Usando el conjunto de bits de Python para encontrar todas las combinaciones de un conjunto de tamaño k.
Estoy intentando acelerar mi propia solución de programación dinámica para el Problema del Viajante de Comercio. Mi solución original utiliza memorización con un diccionario con frozenset() de Python como parte de la clave. Sin embargo, creo que esta implementación puede mejorarse utilizando bitsets (o en mi implementación, un entero regular de tamaño 2^n bits donde n es el número de vértices en nuestro grafo y el i-ésimo bit representa si el vértice i está incluido en el conjunto).
Dado un bitset, ¿cómo puedo generar todos los conjuntos de tamaño k?
Por ejemplo: conjunto = 11011, k = 3
Debemos devolver:
11010
11001
10011
01011
(4 elegir 3) = 4
¿Algo como combinations(element_set, k) de itertools pero para bitsets?
davy.ai
Desafortunadamente, no hay una función incorporada en Python para generar todos los conjuntos de un tamaño dado k para un bitset. Sin embargo, una forma de hacerlo es utilizando operaciones bit a bit para manipular el bitset. Aquí hay un algoritmo que puede generar todos los conjuntos de tamaño k para un bitset dado:
resultado
como una lista vacía.resultado
.resultado
.Aquí está el código para el algoritmo:
Usando esta función, puedes generar todos los conjuntos de tamaño k para un bitset dado. Por ejemplo, para generar todos los conjuntos de tamaño 3 para el bitset
11011
, debes hacer:Ten en cuenta que los conjuntos devueltos están en representación decimal. Para convertirlos nuevamente a binario, puedes usar la función
bin()
: