Rozumiem, że drzewa segmentów można wykorzystać do znalezienia sumy podgrupy . I to można zrobić wczas zgodnie z tutorialem tutaj .
Jednak nie jestem w stanie udowodnić, że czas na zapytanie jest rzeczywiście . Ten link (i wiele innych) mówi, że możemy udowodnić, że na każdym poziomie maksymalna liczba przetworzonych węzłów wynosi a więc .
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.
data-structures
runtime-analysis
search-trees
intervals
Arijit Choudhury
źródło
źródło
Odpowiedzi:
Twierdzi się, że są co najwyżej2) węzły, które są rozwinięte na każdym poziomie. Udowodnimy to przez sprzeczność.
Rozważ poniższe 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 )
źródło