Ich versuche, alle möglichen Kombinationen für ein Paar von 1 innerhalb einer gegebenen Bitbreite zu generieren.Generieren Sie alle Kombinationen für ein Bitpaar, das auf 1 gesetzt ist?
Nehmen wir an, die Bitbreite 6, dh die Zahl 32. Dies ist, was ich möchte generieren:
000000
000011
000110
001100
001111
011000
011011
011110
110000
110011
110110
111100
111111
Wenn ich Variablen:
var a = 1,
b = 2;
num = a | b;
und eine Schleife erstellen, die ich Schleife über width - 1
mal, und wo ich sowohl a << 1
und b << 1
verschiebe, werde ich alle Kombinationen für ein Paar bekommen. Danach stecke ich ziemlich fest.
Könnte jemand bitte Hilfe leisten.
Update: Arbeitsbeispiel
Basierend auf Barmar mathematischen Ansatz, ist das, was ich
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));
Arbeitsbeispiel auf JSFiddle
http://jsfiddle.net/zywc5/
Ihre Kombinationsliste enthält viele Kombinationen. Wie 000001. In der Tat, wenn Sie alle Kombination von 0 und 1 und Breite 6 wollen, sollten Sie 64 mögliche Kombinationen haben. Ist Ihre Liste nur ein Beispiel oder gibt es etwas anderes, was Sie nicht sagen? – lolol
1 hat kein Paar 1er. Basierend auf seinem Beispiel sucht er nach allen Bitfolgen, die eine gerade Anzahl von Paaren benachbarter Einsen enthalten. – Barmar
Als ich auf meine Frage gesagt wollte ich nur 'alle möglichen Kombinationen für zwei 1's' ... so einzelne 1en hängen gibt es irgendwo nicht erlaubt – micadelli