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

questionAnswers(3)

yourAnswerToTheQuestion