Retornando a i-ésima combinação de um array de bits
Dado um array de bit de comprimento fixo e o número de 0s e 1s que ele contém, como posso organizar todas as combinações possíveis de forma que retornar as i-ésimas combinações leva o menor tempo possível? Não é importante a ordem em que são retornados.
Aqui está um exemplo:
array length = 6
number of 0s = 4
number of 1s = 2
combinações possíveis (6! / 4! / 2!) 000011 000101 000110 001001 001010 001100 010001 010010 010100 011000 100001 100010 100100 101000 110000
1º problema combinação = 000011 5ª combinação = 001010 9ª combinação = 010100
Com uma disposição diferente, tal como 100001 100010 100100 101000 110000 001100 010001 010010 010100 011000 000011 000101 000110 001001 001010
devolverá a 1a combinação = 100001 5ª combinação = 110000 9ª combinação = 010100
Atualmente estou usando um algoritmo O (n) que testa para cada bit se é um 1 ou 0. O problema é que eu preciso lidar com muitos arrays muito longos (na ordem de 10000 bits), e por isso ainda é muito lento (e cache está fora de questão). Eu gostaria de saber se você acha que um algoritmo mais rápido pode existir.
Obrigado