martes, 6 de septiembre de 2011

Script Python para realizar combinaciones

Hola a todos, en esta entrada publicaré un script python, pues bien, este script toma como entrada los símbolos de un alfabeto, y realiza la operación de potencia sobre este (Ver lenguajes formales), básicamente esta operación consta en generar todas las combinaciones posibles de cierto tamaño, por ejemplo, si se tiene el alfabeto S={0,1} y se desea elvar este alfabeto a la potencia 3, entonces:

       - S^3 = {000,001,010,011,100,101,110,111}

Bueno, ahora vayamos al código, el script es el siguiente:




#!/usr/bin/python
def main():
    r = int(raw_input("Introduzca el numero de simbolos: "))
    S = [""] * r
    for i in xrange(0,r):
        S[i] = raw_input("Simbolo-> ")
    
    n = int(raw_input("Introduzca el numero de combinaciones: "))
    T = [0] * n
    C = [0]  * n
    Aux = [0] * n
    for i in xrange(0,n):
        T[i] = r**((n-i)-1)

#    print S
#    print T
#    print "_______________"

    for i in xrange(0,r**n):
        res = ""
        for j in xrange(0,n):
            res = res + S[C[j]]
            Aux[j] = Aux[j] + 1
            if Aux[j] == T[j]:
                C[j] = C[j] + 1
                C[j] = (C[j]) % r
                Aux[j] = 0
        print res

if __name__ == "__main__":
    main()


Este script, sigue una lógica circular para el cambio de símbolos, además
que el cambio de símbolos se lo realiza cada vez que llega a un tope, en
este caso los topes están generados por la formula:

     - r ^ ((n-i)-1) ; i = 0,...,n-1

Bueno, obviamente, no creo que este script sea el más óptimo, ya que existen
varias formas de realizar esta misma tarea de mejor forma, con el uso de
estructuras de datos, etc. Espero que les sea de utilidad o como un script
que les de la idea para generar uno mejor.

Saludos

1 comentario: