2009-01-19 49 views

回答

19

如果你只想做一次,使用binary search,如果在另一方面,你需要做許多不同的前綴,但相同的字符串數組上,建立一個radix tree可以是一個好主意,你以後建起來的樹每個擡頭都會非常快。

0

FreeBSD內核使用Radix tree作爲它的路由表,你應該檢查一下。

2

這僅僅是一個修飾的平分搜索:

  • 僅檢查儘可能多的字符的每個元素作爲在搜索字符串;和
  • 如果找到匹配項,請繼續向後搜索(線性搜索或進一步的二分搜索),直至找到不匹配的結果,然後返回最後匹配結果的索引。
3

可以用線性時間使用Suffix Tree來完成。構建後綴樹需要線性時間。

+0

他也可以在線性時間比較每個元素的前綴。 – 2009-01-19 13:07:15

+0

是的,但是如果他要檢查多個前綴,那不是一個好主意。 – Brian 2009-01-20 03:39:17

0

我目前的解決方案是,而不是找到「前綴」,試圖找到一個「虛擬前綴」。

例如,前綴是「abd」,試圖找到虛擬前綴「abc(255)」。 (255)只代表最大字符數。找到「abc(255)」後。下一個單詞應該是匹配「abd」的第一個單詞(如果有的話)。

0

您是否有能力預先計算所有可能的前綴?

如果是這樣,您可以這樣做,然後使用二進制搜索在預先計算的表中查找前綴。使用前綴將下標存儲到所需的值。

相關問題