Pergunta

Problema

Eu preciso criar 32 números de bits (com ou sem sinal não importa, o bit mais alto nunca vai ser definido de qualquer maneira) e cada número deve ter um determinado número de bits definidos.

Naive Solução

A solução mais fácil é, naturalmente, para começar com o número de zero. Dentro de um loop o número é agora aumentado por um, o número de bits é contado, se a contagem tem o valor desejado, o número é armazenado a uma lista, se não o loop apenas repete. O ciclo é interrompido se os números suficientes foram encontrados. Claro que isso funciona muito bem, mas é muito lento uma vez que o número de bits desejados fica muito alta.

A melhor solução

O número mais simples ter (digamos de LET) 5 Bits conjunto é o número onde a primeira 5 Bit está definido. Este número pode ser facilmente criados. Dentro de um loop o primeiro bit é definido e o número é deslocado para a esquerda por um. Este loop é executado 5 vezes e eu achei o primeiro número com 5 Bits set. O próximo par de números são fáceis de criar também. Nós agora fingir que o número seja 6 Bit de largura e o mais alto não está definido. Agora vamos começar a mudar o primeiro bit zero para a direita, então temos 101111, 110111, 111011, 111101, 111110. Poderíamos repetir isso adicionando outro 0 a frente e repetir este processo. 0111110, 1011110, 1101110, etc. No entanto que os números de forma irá crescer muito mais rápido do que o necessário, como usar essa abordagem simples que deixar de fora números como 1010111.

Então, há uma maneira melhor para criar todas as permutações possíveis, uma abordagem genérica, que pode ser usado, independentemente quantos bits o próximo número terá e independentemente quantos set pedaços Precisamos definir?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top