尾碼數組(suffix array)

來源:互聯網
上載者:User

標籤:字典序   pre   計算   div   log   dia   技術分享   ges   wiki   

參考:

Suffix array - Wiki

尾碼數組(suffix array)詳解

6.3   Suffix Arrays - 演算法紅寶書

Suffix Array 尾碼數組

基本概念

應用:字串處理、生物資訊序列處理

尾碼:學過英語的都知道什麼叫尾碼,就是從某個位置開始到字串結尾的特殊子串,記住 Suffix(i)=S[i...len(S)-1],i就是尾碼起始位置

尾碼數組:就是將尾碼排序好後放到一個一維數組裡,SA[i]存放排名第i大的尾碼首字元下標,並且保證 Suffix(SA[i])<Suffix(SA[i+1]), 1<=i<n 。

Rank數組:rank[i]存放suffix(i)的優先順序

註:尾碼數組和Rank數組為互逆運算。我們只要算出了sa數組,就可以在O(n)的時間複雜度內算出rank數組。

height數組:height[i]儲存的是suffix(i)和suffix(i-1)的最長公用首碼的長度。也就是排名相鄰的兩個尾碼的最長公用首碼。

看圖說話:

下面列出了aabaaaab的所有尾碼,並對其標號1..8

構造Rank數組,對每個i一次計算其尾碼的排名,如下第一個尾碼排名第4,所以Rank數組第一個為4

怎麼構造尾碼數組

構造sa數組

構造rank數組

構造height數組

例子
aabaaaab

總共有n=8個尾碼:

1: aabaaaab2: abaaaab3: baaaab4: aaaab5: aaab6: aab7: ab8: b

按照字典序排序後

sa[ 1 ] = 4 aaaabsa[ 2 ] =  5 aaabsa[ 3 ] =  6 aabsa[ 4 ] =  1 aabaaaabsa[ 5 ] =  7 absa[ 6 ] =  2 abaaaabsa[ 7 ] =  8 bsa[ 8 ] =  3 baaaab

rank數組為:

rank[1]=4rank[2]=6rank[3]=8rank[4]=1rank[5]=2rank[6]=3rank[7]=5rank[8]=7

height數組為:

height[ 1 ]=nullheight[ 2 ]= 3height[ 3 ]= 2height[ 4 ]= 3height[ 5 ]= 1height[ 6 ]= 2height[ 7 ]= 0height[ 8 ]= 1

因此,所有子串的最長公用子串就是3.

尾碼數組(suffix array)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.