Zwracanie i-tej kombinacji tablicy bitów
Biorąc pod uwagę tablicę bitów o stałej długości i liczbę zawartych w niej 0 i 1s, w jaki sposób mogę zorganizować wszystkie możliwe kombinacje tak, że zwrot i-tej kombinacji zajmuje najmniej czasu? Nie ma znaczenia, w jakiej kolejności są zwracane.
Oto przykład:
array length = 6
number of 0s = 4
number of 1s = 2
możliwe kombinacje (6! / 4! / 2!) 000011 000101 000110 001001 001010 001100 010001 010010 010100 011000 100001 100010 100100 101000 110000
problem 1. kombinacja = 000011 5. kombinacja = 001010 9. kombinacja = 010100
Z innym układem, takim jak 100001 100010 100100 101000 110000 001100 010001 010010 010100 011000 000011 000101 000110 001001 001010
zwróci pierwszą kombinację = 100001 piątą kombinację = 110000 9. kombinację = 010100
Obecnie używam algorytmu O (n), który testuje dla każdego bitu, czy jest to 1 czy 0. Problem polega na tym, że muszę obsługiwać wiele bardzo długich tablic (rzędu 10000 bitów), a więc jest nadal bardzo powoli (a buforowanie nie wchodzi w grę). Chciałbym wiedzieć, czy uważasz, że może istnieć szybszy algorytm.
Dziękuję Ci