Fenwick tree jest strukturą danych, która pozwala na dwa rodzaje działalności (można rozszerzyć go więcej operacji):Czy można zbudować drzewo Fenwick w O (n)?
- zmiana punkt
update(index, value)
- suma prefiks
query(index)
Obie operacje są w O(log(n))
gdzie n
jest rozmiarem tablicy. Nie mam problemów ze zrozumieniem, jak wykonywać zarówno operacje, jak i logikę za nimi.
Moje pytanie brzmi: jak mogę zainicjować drzewo Fenwick z tablicy. Najwyraźniej mogę to osiągnąć w O(nlog(n))
, wywołując n
razy update(i, arr[i])
, ale czy istnieje sposób, aby go zainicjować w O(n)
.
Dlaczego pytaniem to jeśli wikipedia mówi, że można zainicjować w nlog(n)
? Ponieważ artykuł jest tak prymitywny, że nie jestem pewien, czy jest to najlepsza złożoność, jaką można osiągnąć. Również rysowanie paraleli z naiwnym tworzeniem sterty, które odbywa się poprzez zapełnianie sterty jeden po drugim i może być osiągnięte w O(nlog(n))
w porównaniu do inicjacji inteligentnego sterty w O(n)
daje mi nadzieję, że coś podobnego można zrobić w drzewie Fenwicka.
Cross-site duplikat: https://cs.stackexchange.com/questions/40540/why-isnt- czas-złożoność-budowy-a-fenwick-drzewa-dokładniejszego niż-na-1 –
@DavidEisenstat Bez duplikatu, ponieważ sprawdzany jest algorytm 'O (n * log (n))' i tutaj wymagany jest algorytm 'O (n)' * i dostarczony *. Chociaż miłe znalezisko. – Vesper
@Vesper Jest to algorytm O (n log n) -time, który jest uważniej analizowany, aby uzyskać O (n). –