Eingabe.
Ich habe ein Bit-Array-Größe n
und zwei ganze Zahlen, 1<=i<=n
und 0<=j<=n
. i
gibt das Maximum der nachfolgenden Nummern an, die 0
sein können. j
gibt das Maximum der nachfolgenden Nummern an, die 1
sein können.Wie finden Sie alle Bitmask-Kombinationen gegebenen i nachfolgenden Werte kann "0", j kann "1" sein?
gewünschte Ausgabe
ich nach einer Methode suchen, die alle möglichen Bit-Arrays n
, die diese Einschränkungen erfüllen Größe zurückgibt.
Das Durchschleifen aller Array-Kombinationen (zuerst ohne Einschränkungen) würde zu einer exponentiellen Zeit führen. (Besonders wenn i/j>>1
. Ich nehme an, Sie können es besser machen). Wie kann ich diese Bitmaskenkombinationen effektiv finden?
Beispiel
Eingang: i = 1
, j = 2
, n = 3
Ergebnis: Mögliche Arrays sind [0,1,0], [1,0,1],[1,1,0],[0,1,1]
.
Was ist'i' und'j' für 100111 und 011100? – Surt
Mit einer rekursiven Formulierung können Sie einen großen Teil des Suchraums beschneiden (jedes Mal, wenn der rekursive Aufruf entweder "i" oder "j" negativ ist, können Sie beschneiden) –
Für 100111, i => 2 und j> = 3. Für 011100, i => 2 und j> = 3. (i und j bezeichnen das Maximum der gleichen nachfolgenden Ziffern. Der Eingang besteht aus zwei i, j und Array-Größe n.) –