字尾陣列之構建的一目了然說明

2022-08-30 23:24:21 字數 976 閱讀 7309

什麼是字尾陣列?

字尾陣列是一種解決字串問題的有力工具。相比於字尾樹,它更易於實現且占用記憶體更少。在實際應用中,字尾陣列經常用於解決字串有關的複雜問題。

先介紹幾個字尾陣列中的基本定義:

子串:字串s 的子串r[i..j],i≤j,表示r 串中從i 到j 這一段,也就是順次排列r[i],r[i+1],...,r[j]形成的字串。

字尾:字尾是指從某個位置i 開始到整個串末尾結束的乙個特殊子串。字串r 的從第i 個字元開始的字尾表示為suffix(i) , 也就是suffix(i)=r[i..len(r)]。

有點不明白了吧?

來看個簡單的字尾陣列的構建**就知道大概是個什麼東西了

public int getsuffixarray(string str)   

return result; 

}

返回的result陣列就是名次陣列,意思就是「排第幾的是誰?」。

以上面**為例,假設str="abracadabra"

則suffix=

然後對suffix陣列排序後,結果:

排完序後,字尾陣列表示的意思就是「排第幾的是誰?」

接下來result陣列就是

result陣列表示的意思就是「你排第幾?」。

三步中如何對suffix陣列排序是最費時的,有一些演算法用於處理這事(ukkonen 演算法,dc3 演算法,倍增演算法等

字尾陣列應用

例1:給定乙個字串,求最長重複子串,這兩個子串可以重疊。

相鄰suffix陣列匹配的最長長度

例2:給定兩個字串a 和b,求最長公共子串

先將第二個字串寫在第乙個字串後面,中間用乙個沒有出現過的字元隔開,再求這個新的字串的字尾陣列,再求最長公共子串

Runtime描述,一目了然

oc runtime 其實是乙個 runtime 庫,基本上用 c 和彙編寫的,這個庫使得 c 語言有了物件導向的能力。這個庫做的事前就是載入類的資訊,進行方法的分發和 之類的。oc是一種面向runtime 執行時 的語言,也就是說,它會盡可能地把 執行的決策從編譯和鏈結的時候,推遲到執行時。這給程...

日誌分析讓公升級一目了然

隨著網路技術與網路安全的發展,越來越多的企業開始通過網路版防毒軟體打造企業內網的安全系統。雖然企業網路版防毒軟體在部署 更新及管理等方面都有很不錯的表現,但是就筆者使用經驗來說,在更新源的管理方面或多或少都存在著不足。例如,管理者無法實現更詳細 更有效地針對更新源的過濾設定,一旦內網更新伺服器位址或...

一目了然的Jquery選擇器

jquery中的選擇器主要分為基本選擇器 層次選擇器 過濾選擇器 表單選擇器四種。下面主要用圖的實行來逐個介紹每一種選擇器所包含的內容 1.基本選擇器 與css選擇器類似,jquery的基本選擇器也包括id選擇器 類選擇器 標籤選擇器 群組選擇器 通配選擇器。不同的是css選擇器是給匹配的元素新增樣...