Professional Documents
Culture Documents
v
i B
v
,
macierzy przeksztacenia Lv, ktre zostao wykonane na
caym przedziale rejestrw [lv, pv].
Pocztkowo, dla wszystkich v, Lv jest macierz
identycznoci. W momencie dodawania jedynki do rejestrw
z przedziau [a, b], zmieniamy A
v
, B
v
i Lv dla pewnych
wierzchokw, a konkretnie dla takich, eby ich przedziay
potomkw sumoway si w sposb rozczny (biorc pod
uwag tylko zawarte w przedziale liczby cakowite) do
przedziau [a, b], np. [2, 7] = [2, 2] [3, 4] [5, 6] [7, 7].
Tych przedziaw wybierzemy O(m), wywoujc
podziel(a, b, korze) w poniszym pseudokodzie
zakadamy wykonywanie dziaa modulo P:
przy(v, X)
(A
v
, B
v
) := X (A
v
, B
v
)
Lv := Lv X
podziel(a, b, v)
1 if (a = lv) and (b = pv) then
2 przy(v, L)
3 else
4 przy(lewyv, Lv)
5 przy(prawyv, Lv)
6 Lv := id2
7 if a p
lewyv
then
8 podziel(a, min(b, p
lewyv
), lewyv)
9 if b lprawyv
then
10 podziel(max(a, lprawyv
), b, prawyv)
11 A
v
:= A
lewyv
+ A
prawyv
12 B
v
:= B
lewyv
+ B
prawyv
Dlaczego to dziaa? Po pierwsze, koczy si, bo w kadym
wywoaniu podziel zachodzi: [a, b] [lv, pv], a dla
lici mamy lv = pv, wic zachodzi warunek z linii
pierwszej i funkcja nie wywouje si wicej rekurencyjnie.
Po drugie, rzeczywicie rozkada przedzia [a, b] na
sum przedziaw, poniewa p
lewyv
+ 1 = lprawyv
,
wic przedziay [a, min(b, p
lewyv
)] i [max(a, lprawyv
), b]
(lub jeden z nich, gdy nie zachodzi ktry z warunkw
z linii 7 i 9) pokrywaj cay przedzia [a, b]. Po trzecie
wreszcie, po pierwszym takim wywoaniu, ktre powoduje
rozgazienie rekurencyjne (tzn. wykonuj si obie linie
8 i 10), w kadym kolejnym zachodzi co najmniej jeden
z warunkw: a = lv lub b = pv. W takim razie kade
kolejne rozgazienie rekurencyjne powoduje, e w co
najmniej jednym z dwch wywoa rekurencyjnych zachodzi
zarwno a = lv, jak i b = pv, a wic ta ga natychmiast
si koczy. Std, wywoa funkcji podziel moe by
co najwyej 4m + 1 (jedno w korzeniu oraz w kadym
z dwch poddrzew po 2m: m takich, ktre od razu si
kocz, i m kontynuowanych), a wic O(m). To koczy
uzasadnienie, e potrafimy za pomoc takiej struktury
w czasie O(log n) wykona pierwszy typ operacji. Typ drugi
obsugujemy analogicznie, z t rnic, e odpowiednia
funkcja podziel2 zwraca dan sum. W tym celu linia
druga zostaje zmieniona na returnA
v
, a suma wynikw
z podwywoa podziel2 z linii 8 i 10 zostaje zwrcona
w dodatkowej linii 13 jako wynik wywoania teje funkcji.
Dowd poprawnoci i zoonoci czasowej jest analogiczny.
Std czny czas wykonania wynosi O(n + k log n) przy
zuyciu pamici rzdu O(n), gdy drzewo ma co najwyej
4n wierzchokw i w kadym przechowujemy sta ilo
informacji.
Tomasz KULCZYSKI
11