2011-04-28 127 views
0

有誰知道下面的聲明的原因?還是有更好的網站來問這種類型的問題?任何指針,將不勝感激。後綴樹搜索時間

如果一個模式出現在文本(長度爲n)k次,那麼在該文本的後綴樹中搜索所有那些k次的模式將花費O(n + k)。

+0

什麼是「模式」?索引文本的子字符串? – akappa 2011-04-28 14:29:02

回答

0

後綴樹搜索的時間長度與您正在搜索的模式的長度成正比。如果你爲密西西比建立一個後綴樹並搜索ssi。必須執行的查找將是3.時間是O(n),其中n是模式的長度。

+0

我知道這一點。但是如果我想查找所有'ssi'的出現,時間就變成O(n + 2),因爲在密西西比有'k'2次出現'ssi',任何人都知道原因?順便說一句,這裏是文字的長度,而不是模式 – user685275 2011-04-28 15:01:04

+0

我不這麼認爲,你所做的只是試圖找出ssi是否存在。這聽起來更像是一個倒排索引問題,如果你想知道ssi發生的次數。您不必爲後綴樹中的ssi存儲兩個單獨的分支。您可以保留分支節點的索引列表。也許這就是+2進來的地方。 – 2011-04-28 15:12:10

0

根據您發現此聲明的位置,可能存在具體原因,爲什麼它在上下文中是正確的。

但是,'+ k'的通常原因僅僅是需要O(k)個額外操作來插入在返回給用戶的結果列表中找到的每個匹配項。當使用倒排文件而不是後綴樹時,這不一定是這種情況,因爲在索引中找到的倒排列表(又名發佈列表)已經是最終結果列表(至少如果我們假設(a)查詢只包含一個單一的標記,(b)反演的列表未壓縮存儲)。

但後綴樹通常(除非它是特別準備)不包含這樣的匹配列表。因此,在匹配過程中,您可以確定一條通過樹的路徑,並以某個內部節點結束從那裏開始,您必須遵循該內部節點的子樹中的所有路徑來標識指示匹配的實際位置(每個匹配一個葉節點)的葉節點,並將匹配位置插入到返回的結果列表中用戶。最後一步是花費O(k)時間。

另請注意,在內部節點的子樹中,發現以下所有路徑可能會花費大量額外時間,其中總複雜度甚至高於O(n + k)。這取決於是否有從內部節點到其子樹中的葉節點的直接指針。