Fenwick tree ist eine Datenstruktur, die zwei Arten von Operationen erlaubt (Sie es mit mehr Operationen vermehren können):Kann man in O (n) einen Fenwickbaum bauen?
- Punkt Update
update(index, value)
- Präfixsumme
query(index)
Beide Operationen sind in O(log(n))
wobei n
die Größe eines Arrays ist. Ich habe keine Probleme zu verstehen, wie man beide Operationen und die Logik dahinter ausführt.
Meine Frage ist, wie kann ich einen Fenwick-Baum von einem Array initialisieren. Klar kann ich dies in O(nlog(n))
zu erreichen, durch den Aufruf n
mal update(i, arr[i])
, aber gibt es eine Möglichkeit, es in O(n)
zu initialisieren.
Warum ich dies zu fragen, ob Wikipedia sagt, dass Sie in nlog(n)
initialisieren kann? Weil der Artikel so rudimentär ist, dass ich nicht sicher bin, ob es die beste Komplexität ist, die man erreichen kann. Auch Parallelen mit naiver Haufen Schöpfung, die durch Bestücken der Halde eins nach dem anderen getan und kann in O(n)
in O(nlog(n))
gegen Smart Heap Initialisierung erreicht werden gibt mir Hoffnung, dass etwas Ähnliches in Fenwick Baum erfolgen.
Cross-Site-Duplikat: https://cs.stackexchange.com/questions/40540/why-isnt- die Zeitkomplexität-of-Konstruktion-a-Fenwick-tree-straffer-als-on-l –
@DavidEisenstat Kein Duplikat, da es einen Algorithmus von 'O (n * log (n))' wird geprüft, und hier ein 'O (n)' Algorithmus wird angefordert * und bereitgestellt *. Obwohl schön zu finden. – Vesper
@Vesper Es ist ein O (n log n) -Zeitalgorithmus, der sorgfältiger analysiert wird, um O (n) zu sein. –