Dies ist der Code für die Summe Abfrage von Index 0 bis Index XFenwick Baum Sum Abfrage
Int query(int x){
Int sum=0;
for(; x>0; x -= x &(-x))
sum += BIT[x];
Return sum;
}
Ich habe zwei Arrays BIT[] and a[]
. Ich speichere die Werte von Array A zu BIT für Abfragen. Nun fügen wir gemäß der Schleife einen Wert am Index X hinzu und ändern dann den Index, indem wir das letzte gesetzte Bit daraus entfernen.
Für zB wenn ich Abfrage nennen (14) wird wie folgt ausführen:
Summe = BIT [14] + BIT [12] + BIT [8]
Es wird aufhören nach Index 8 wie 8 ist 1000
und nach dem Entfernen des letzten Bits wird es 0 und Schleife endet. Das heißt, für Index 14 Ie. 1110
Ich greife auf das Array 3 mal, IE ist die Anzahl der gesetzten Bits. Aber ich habe nach langen Bits gesucht, es ist fehlgeschlagen für zB 1000110111011101100
gesetzte Bits sind 11 aber die Antwort ist 12. Gibt es eine andere Möglichkeit zu sagen, wie oft ich während der Ausführung der Summenabfrage auf das Array zugreife, indem ich den Binärwert eines Index I sehe?
Ich kann es nicht herausfinden. Ich habe viele Fälle ausprobiert, für einige ist es weniger als 1, für einige ist es mehr als 1 und für einige ist es tatsächlich die Antwort.
Bitte helfen Sie mir.
würde Vergessen Sie nicht, die Sprache zu markieren. In C beispielsweise hängt 'x & (- x)' von dem Komplementschema des Typs mit Vorzeichen ab. – Bathsheba
@Bathsheba Ich benötige diesen Code nicht. Alles, was ich will, ist zu wissen, wie oft ich BIT [] Array für einen bestimmten Binärwert von Index X zugreifen. –