es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puedo generar todas las posibles cadenas binarias con un número especificado de cambios de bits en Python?

Estoy tratando de escribir un programa, donde la entrada es una cadena binaria de longitud arbitraria, así como el número de cambios de bits deseados, y la salida es todas las posibles cadenas con el número especificado de cambios de bits (en una lista). Por ejemplo, si la entrada es ‘110’ y ‘2’, la salida es [‘000’, ‘101’, ‘011’]. Soy nuevo en Python y no encontré programas similares. Realmente no tengo idea de cómo puedo hacer eso. ¿Alguien podría darme algunas pistas? ¡¡Muchas gracias por la ayuda!!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes usar el módulo integrado itertools en Python. Específicamente, puedes utilizar la función combinations para generar todas las combinaciones posibles de índices para voltear. Luego, puedes iterar a través de cada combinación, volterar los bits en esos índices y agregar la cadena resultante a una lista. Aquí hay un ejemplo de código:

    import itertools
    
    def bit_flips(binary_str, num_flips):
        n = len(binary_str)
        indices = range(n)
        flip_combinations = itertools.combinations(indices, num_flips)
        result = []
        for flips in flip_combinations:
            new_str = list(binary_str)
            for i in flips:
                if new_str[i] == '0':
                    new_str[i] = '1'
                else:
                    new_str[i] = '0'
            result.append(''.join(new_str))
        return result
    

    En este código, indices es un arreglo que contiene los índices de cada bit en la cadena binaria. flip_combinations contiene todas las combinaciones posibles de num_flips índices para voltear, generadas utilizando la función combinations. Luego, iteramos a través de cada combinación, creamos una copia de la cadena original y volteamos los bits en los índices especificados. Agregamos la cadena resultante a la lista result y la retornamos.

    Aquí tienes un ejemplo de uso de la función:

    >>> bit_flips('110', 2)
    ['000', '101', '011']
    

Comments are closed.