什麼是字尾陣列?
字尾陣列是一種解決字串問題的有力工具。相比於字尾樹,它更易於實現且占用記憶體更少。在實際應用中,字尾陣列經常用於解決字串有關的複雜問題。
先介紹幾個字尾陣列中的基本定義:
子串:字串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)返回的result陣列就是名次陣列,意思就是「排第幾的是誰?」。return 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選擇器是給匹配的元素新增樣...