該解釋有點含糊。我想他們的意思是[p+1,y]
你從p+1
開始爬上前三個,但用第二個樹來查詢。
讓我們假設您更新第10個索引的值(來自紙張)。在更新樹時,您必須回答[x, 10 - 1]
& [10 + 1, y]
的查詢。爲了有效地做到這一點,你建兩個「爬」名單:
CLB1
由p+1
攀爬第一棵樹:攀登[11..11]
,第二棵樹
CLB2
的[12..15]
:{11, 12}
,其對應於下一個區間從p-1
第二棵樹:{9, 8}
,其對應於下一個時間間隔:[9..9]
,第一棵樹
現在你開始第一樹通過爬上第一棵樹STA更新的[1..8]
與10
10 rting - 平凡的更新
12 - 您需要查詢[9..9]
,{10}
,[11..11]
,{12}
。通過參加CLB2
的第一個成員,您可以從BIT1
獲得[9..9]
的答案。並通過CLB1
的第一個成員從BIT2
獲得[11..11]
的答案。 {10}
和{12}
是微不足道的。
16 - 您需要查詢[1..9]
。 {10}
,[11..15]
(沒有{16}
,因爲它是虛構的)。您從BIT1
拍下[1..9]
,拍下前兩項CLB2
。您拍下[11..15]
,從BIT2
開始,拍下前兩項CLB1
。 {10}
是微不足道的。
正如你可以看到左邊的查詢你從第二棵樹的p-1
使用攀爬歷史記錄中的第一棵樹得到答案。對於正確的查詢,您可以使用第一棵樹的p+1
的攀登歷史記錄從第二棵樹中獲取答案。
類似的過程用於更新右樹。
更新:過程第九節點
在更新9日指數情況下,我們有下一個CLB
S:
CLB1
:{10, 12}
,間隔:[10..11]
的BIT2
[12..15]
。
CLB2
:{8}
,間隔:的BIT1
[1..8]
更新BIT1
:
9 - 瑣碎
10 - 瑣碎(我們只需要{9}
和{10}
)
12 - 我們需要來自CLB1
的第一項 - [10..11]
和{12}
與{9}
16 - 我們需要CLB1
兩個第一項 - [10..11] U [12..15]
,從CLB2
第一個條目 - [1..8]
和{9}
更新BIT2
:
9 - 平凡
8 - 我們需要先CLB1
- [10..11] U [12..15]
和{9}
兩個條目與{8}
0 - 我們需要CLB1
前兩個條目 - [10..11] U [12..15]
和CLB2
第一項 - [1..8]
和{9}
明白了,這樣一個偉大的救濟了。我仍然不明白爲什麼這個查詢/更新算法可行,但這篇論文只是教會了我們的方式,但並沒有解釋爲什麼......無論如何,至少我現在可以將這個問題應用於一些問題 – shole
嗯,但我不能使用相同的算法更新9th-index(在論文中)......你可以再做一個例子嗎? – shole
@舒爾,你是對的,我想我錯過了一些東西(4年前與這個結構一起工作),每當有空閒時我會深入挖掘,並且會分享信息。 – user3707125