Dowód złożoności czasu dla implementacji problemu segmentu dystansowego w drzewie segmentów


10

Rozumiem, że drzewa segmentów można wykorzystać do znalezienia sumy podgrupy A. I to można zrobić wO(logn)czas zgodnie z tutorialem tutaj .

Jednak nie jestem w stanie udowodnić, że czas na zapytanie jest rzeczywiście O(logn). Ten link (i wiele innych) mówi, że możemy udowodnić, że na każdym poziomie maksymalna liczba przetworzonych węzłów wynosi4 a więc O(4logn)=O(logn).

Ale jak to udowodnić, być może przez sprzeczność?

A jeśli tak, jeśli mielibyśmy użyć drzew segmentowych do sumowania zasięgów tablic wyższych wymiarów, w jaki sposób dowód zostałby rozszerzony?

Na przykład mogę myśleć o znalezieniu sumy podmacierzy, dzieląc pierwotną macierz na 4 ćwiartki (podobne do połówek przedziałów w liniowych tablicach) budując drzewo segmentu kwadrantu, ale dowód mi umyka.


budowanie drzewa segmentu to O (n), zapytanie to O (log n), a aktualizacja to O (log N). Jego przewaga nad tablicą sum polega na złożoności aktualizacji.
Nurlan

Odpowiedzi:


11

Twierdzi się, że są co najwyżej 2)węzły, które są rozwinięte na każdym poziomie. Udowodnimy to przez sprzeczność.

Rozważ poniższe drzewo segmentów.

Drzewo segmentów

Powiedzmy, że są 3)węzły, które są rozwinięte w tym drzewie. Oznacza to, że zakres jest od lewego najbardziej kolorowego węzła do prawego najbardziej kolorowego węzła. Zauważ jednak, że jeśli zakres rozciąga się na najbardziej prawy węzeł, wówczas pełny zakres środkowego węzła jest objęty. Zatem ten węzeł natychmiast zwróci wartość i nie zostanie rozwinięty. Udowadniamy zatem, że na każdym poziomie rozwijamy się co najwyżej2) węzły i ponieważ istnieją logn poziomy, rozwinięte są węzły 2)logn=Θ(logn)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.