Próbuję wygenerować wszystkie możliwe kombinacje dla pary 1 w ramach danej szerokości bitowej.Wygeneruj wszystkie kombinacje dla pary bitów ustawionej na 1?
Powiedzmy szerokość bit jest 6, czyli numer 32. To jest to, co chciałbym wygenerować:
000000
000011
000110
001100
001111
011000
011011
011110
110000
110011
110110
111100
111111
Jeśli mam zmienne:
var a = 1,
b = 2;
num = a | b;
i stworzyć pętlę, że Pętla nad width - 1
razy, i gdzie przestawię oba a << 1
i b << 1
, otrzymam wszystkie kombinacje dla jednej pary. Po tym jestem prawie utknął.
Czy ktoś mógłby, proszę, udzielić pomocy.
Aktualizacja: przykład pracy
podstawie matematycznego podejścia Barmar, jest to, co udało mi się wdrożyć
var arr = [],
arrBits = [];
function getCombs(pairs, startIdx) {
var i, j, val = 0, tmpVal, idx;
if (startIdx + 2 < pairs) {
startIdx = arr.length - 1;
pairs -= 1;
}
if (pairs < 2) {
return;
}
for (i = 0; i < pairs-1; i++) {
idx = startIdx - (i * 2);
val += arr[idx];
}
for (j = 0; j < idx - 1; j++) {
arrBits.push((val + arr[j]).toString(2));
}
getCombs(pairs, startIdx-1);
}
(function initArr(bits) {
var i, val, pairs, startIdx;
for (i = 1; i < bits; i++) {
val = i == 1 ? 3 : val * 2;
arr.push(val);
arrBits.push(val.toString(2));
}
pairs = Math.floor(bits/2);
startIdx = arr.length - 1;
getCombs(pairs, startIdx);
console.log(arrBits);
}(9));
przykład roboczych na JSFiddle
http://jsfiddle.net/zywc5/
Twoja lista kombinacji nie zawiera wielu kombinacji. Podobnie jak 000001. W rzeczywistości, jeśli chcesz wszystkie kombinacje 0 i 1 i szerokość 6, powinieneś mieć 64 możliwe kombinacje. Czy twoja lista jest tylko próbką, czy jest coś jeszcze, czego nie mówisz? – lolol
1 nie ma pary 1-ek. Na podstawie tego przykładu szuka wszystkich sekwencji bitowych, które zawierają parzystą liczbę par sąsiednich 1-ek. – Barmar
Jak powiedziałem na moje pytanie, chciałem tylko "wszystkie możliwe kombinacje dla pary 1" ... więc pojedynczy 1 wiszący gdzieś tam nie są dozwolone – micadelli