国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種大規(guī)模字符串文本的后綴索引構(gòu)造方法及裝置的制造方法

      文檔序號:9579369閱讀:309來源:國知局
      一種大規(guī)模字符串文本的后綴索引構(gòu)造方法及裝置的制造方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及后綴索引構(gòu)造技術(shù)領(lǐng)域,尤其涉及一種利用計算機外存來構(gòu)造大規(guī)模字符串文本后綴索引的方法及裝置。
      【背景技術(shù)】
      [0002]后綴索引,也稱為后綴數(shù)組(suffix array),是計算機科學中的一個重要數(shù)據(jù)結(jié)構(gòu),具有結(jié)構(gòu)緊湊且空間占用小的特點,在全文檢索、數(shù)據(jù)壓縮、基因序列對齊和模式匹配等諸多領(lǐng)域具有廣泛應用。任意給定一個字符串文本,簡稱為字符串,從字符串中的任意位置開始到該字符串結(jié)尾的所有字符組成一個字符子串,該子串稱為字符串的后綴(suffix)。顯然,長度為η的字符串包含η個后綴,對這η個后綴按字典順序升序保存在一個整型數(shù)組中,該數(shù)組則稱為字符串的后綴索引。
      [0003]傳統(tǒng)構(gòu)造后綴索引技術(shù)需要把所有文本全部加載至內(nèi)存,然后才能進行后綴索引構(gòu)造。但近年來,基因數(shù)據(jù)庫、互聯(lián)網(wǎng)文本數(shù)據(jù)以及其它相關(guān)領(lǐng)域的文本數(shù)據(jù)規(guī)模不斷擴大,普通計算機內(nèi)存已無法一次性加載全部文本,這些傳統(tǒng)索弓I構(gòu)造技術(shù)顯然已不再適用。

      【發(fā)明內(nèi)容】

      [0004]本發(fā)明為克服上述現(xiàn)有技術(shù)所述的至少一種缺陷(不足),首先提供一種大規(guī)模字符串文本的后綴索引構(gòu)造方法,使用戶在普通計算機環(huán)境下(如:內(nèi)存大小為4G)也能進行大規(guī)申吳字符串文本的后綴索引構(gòu)造。
      [0005]本發(fā)明的又一目的是提出一種大規(guī)模字符串文本的后綴索引構(gòu)造裝置,其實現(xiàn)了借助計算機外存對大規(guī)模字符串文本進行后綴索引構(gòu)造。
      [0006]為了實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
      一種大規(guī)模文本的后綴索引構(gòu)造方法,所述方法包括:
      收縮字符串Τ,得到新的字符串Τ1,Τ1的規(guī)模最多為Τ的一半;
      以直接方式或遞歸方式構(gòu)造Τ1的后綴索引;
      掃描Τ1的后綴索引,得到Τ的后綴索引。
      [0007]其中,所述收縮字符串Τ,得到新的字符串Τ1的具體過程為:
      使用大規(guī)模字符串讀取器分批讀取字符串Τ,獲取Τ中所有LMS子串,壓入外存優(yōu)先級隊列容器Q1中。掃描Q1排序L子串,并使用子串命名單元對L子串和LMS子串進行命名,得到的有序L子串存放于外存優(yōu)先級隊列容器Q2中。掃描Q2中所有L子串排序S子串,并對S子串命名,得到有序S子串。提取S子串中所有LMS子串的名字,這些名字按照LMS子串在原字符串中的索引位置升序構(gòu)成新的字符串Τ1 ;
      所述LMS子串的識別方法為,該子串的首字符和尾字符均為LMS字符,首字符與尾字符之間不存在任何LMS字符;
      所述LMS字符的識別方法為,當后綴為LMS后綴時,則該后綴所對應字符子串的首字符稱為LMS字符; 所述LMS后綴的識別方法為,若當如后綴為S后綴,且字符串T中與當如后綴相鄰的左手邊第一個后綴為L后綴,則該后綴為LMS后綴;
      所述L子串的識別方法為,子串的首字符為L字符,尾字符為LMS字符,且首字符與尾字符之間不存在任何LMS字符,則該子串為L子串;
      所述L或S字符的識別方法為,若某后綴為L或S后綴,則該后綴所對應字符子串的首字符分別稱為L或S字符;
      所述S子串的識別方法為,子串的首字符為S字符,尾字符為LMS字符,且首字符與尾字符之間不存在任何LMS字符,則該子串為S子串;
      所述L后綴、S后綴的識別方法為,先假定字符串最后一個字符為‘$’,該字符在整個字符串所包含的字符當中最小并且唯一,為S后綴;然后從字符串文本倒數(shù)第二個字符開始往前掃描,若當前字符比前一字符小,則該后綴為S后綴;或當前字符與前一字符相等且前一字符所對應的后綴為S后綴,則該后綴也為S后綴。除上述兩種情況之外,后綴被識別為L后綴。
      [0008]其中,所述構(gòu)造字符串T1的后綴索引的過程為:
      若字符串T1中所有字符都唯一,各字符的名稱即為各后綴在后綴索引中的優(yōu)先級次序,掃描字符串T1,每個索引位置生成相應的二元組:(T[i],i),g卩(字符名稱,位置索引),將這些二元組全部壓入外存排序器,按照字符名稱排序,排序后取各字符對應的索引號存入數(shù)組,即得到T1的后綴索引,否則以T1為新的字符串輸入?yún)?shù),用遞歸方式構(gòu)造T1的后綴索引。
      [0009]其中,所述掃描T1的后綴索引,得到T的后綴索引的過程為:
      使用大規(guī)模字符串讀取器讀取字符串T,識別其中的LMS后綴,根據(jù)T1的后綴索引,給相應的LMS后綴賦予優(yōu)先級,并壓入外存優(yōu)先級隊列容器Q1中;
      掃描Q1,得到的有序L后綴,L后綴存放于外存優(yōu)先級隊列Q2中;
      掃描Q2,得到有序S后綴序列;
      歸并所有L和S后綴,得到字符串T的后綴索引。
      [0010]—種大規(guī)模文本的后綴索引構(gòu)造裝置,所述后綴索引構(gòu)造裝置包括大規(guī)模字符串文本讀取器,后綴前驅(qū)信息處理器,前驅(qū)信息存儲模塊,LMS后綴識別器,L/S后綴識別器,子串命名單元,外存優(yōu)先級隊列容器,外存排序器和后綴索引存儲模塊;
      大規(guī)模字符串讀取器,用于順序讀取外存大規(guī)模字符串文本;
      后綴前驅(qū)信息處理器,用于生成字符串文本中各后綴的前驅(qū)信息,并保存至外存容器;
      其中,所述后綴前驅(qū)信息為一個元組,該元組包含了該后綴在字符串中的位置信息,前驅(qū)字符以及前驅(qū)字符距離。這里的前驅(qū)字符為:在字符串T中,后綴i對應的字符為T[i],T[i]左側(cè)第一個不等于T[i]的字符稱為后綴i的前驅(qū)字符,例如:某后綴與其前驅(qū)字符的距離為“0”,說明該后綴左側(cè)第一個字符為其前驅(qū)字符;
      前驅(qū)信息存儲模塊,一種外存容器,用于存放后綴前驅(qū)信息處理器所輸出的各后綴前驅(qū)信息;
      外存優(yōu)先級隊列容器,用于在外存上對字符子串或后綴進行排序,每次從該隊列彈出的子串或后綴為當如隊列中最小或最大子串或后綴; L/S后綴識別器,用于識別具體的后綴是L還是S后綴;
      LMS后綴識別器,用于識別具體的后綴是否為LMS后綴;
      子串命名單元,用于索引構(gòu)造過程中,對字符子串進行命名,以便字符串規(guī)模的收縮; 外存排序器,一種外存容器,可對存入其中的對象按照指定關(guān)鍵字排序;
      后綴索引存儲模塊,一種外存容器,用于存儲后綴索引。
      [0011]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下的優(yōu)點和積極效果:
      本發(fā)明在后綴索引構(gòu)造過程中至少配置大規(guī)模字符串讀取器,后綴前驅(qū)信息處理器,LMS后綴識別器,兩個外存優(yōu)先級隊列容器和外存排序器。這樣,通過大規(guī)模字符串讀取器讀取字符串,通過LMS識別器識別字符串中的LMS子串或后綴,通過外存優(yōu)先級隊列容器實現(xiàn)子串或后綴的排序,最終完成大規(guī)申吳字符串文本的后綴索引構(gòu)造。在索引構(gòu)造過程中,利用了低成本的計算機外存資源,使得后綴索引構(gòu)造不再受限于內(nèi)存容量;從而在任意一臺普通計算機環(huán)境下,本系統(tǒng)能完成超過該內(nèi)存大小的字符串文本數(shù)據(jù)的后綴索引構(gòu)造,突破了現(xiàn)有后綴索引構(gòu)造技術(shù)方案的局限性。而且,本發(fā)明具有運行速度快、I/o量小和簡單易行等優(yōu)點。
      【附圖說明】
      [0012]圖1為本發(fā)明具體實施方案的方法流程圖。
      [0013]圖2為本發(fā)明的裝置結(jié)構(gòu)示意圖。
      【具體實施方式】
      [0014]附圖僅用于示例性說明,不能理解為對本專利的限制;為了更好說明本實施例,附圖某些部件會有省略、放大或縮小,并不代表實際產(chǎn)品的尺寸;
      對于本領(lǐng)域技術(shù)人員來說,附圖中某些公知結(jié)構(gòu)及其說明可能省略是可以理解的。下面結(jié)合附圖和實施例對本發(fā)明的技術(shù)方案做進一步的說明。
      [0015]本發(fā)明的基本思想是:將字符串文本中的后綴分為L后綴和S后綴,先通過外存優(yōu)先級隊列容器排序字符串中的LMS子串;在有序LMS子串的基礎(chǔ)上,推導有序L后綴;在有序L后綴的基礎(chǔ)上,推導有序S后綴;最后以桶為單位,歸并L后綴和S后綴,輸出后綴索引。這里的桶是指:后綴數(shù)組中具有相同首字符的后綴構(gòu)成一塊連續(xù)的區(qū)域,該區(qū)域稱為桶。
      [0016]在索引構(gòu)造過程中,需要隨時訪問后綴的前驅(qū)字符,傳統(tǒng)方法為,將所有字符串全部加載至內(nèi)存,這樣,在索引構(gòu)造過程中可隨機訪問后綴的前驅(qū)字符;但在字符串規(guī)模較大,遠遠超過內(nèi)存容量的情況下,這種處理辦法已不再適用。
      [0017]因此,本發(fā)明預先產(chǎn)生字符串各后綴的前驅(qū)信息,并對所有前驅(qū)信息元組排序,預先存放在外存容器。排序關(guān)鍵字為二元組:后綴的首字符和后綴位置索引,即先按首字符排序,然后按該后綴在源字符串中的位置索引值排序。
      [0018]如前所述,具有相同首字符的后綴構(gòu)成一塊連續(xù)的區(qū)域,這個連續(xù)的區(qū)域稱為桶,在索引構(gòu)造過程中,也是按桶關(guān)鍵字有序掃描各后綴,因而在掃描過程中可以僅加載當前正在掃描的桶所包含的后綴的前驅(qū)信息,然后通過位置索引值來訪問具體后綴的前驅(qū)信息,從而完成字符子串或者后綴的排序。
      [0019]在索引構(gòu)造過程當中,還需對L和S子串進行命名。命名過程如下:當排序L子串時,定義一個整型變量i,i初始化為0,每彈出一個后綴,i增加1。若當前子串與前一子串不等,當前子串被命名為當前變量i的值;若當前子串與前一子串相等,則當前子串的名字與前一子串相等。排序S子串時,命名方法與排序L子串一樣,同樣需要定義一個整型變量i,不同的地方是,i初始化為字符串的長度減1,即n-1,每彈出一個后綴,i自減1。
      [0020]當?shù)玫接行騍子串以后,取其中所有LMS子串(LMS子串屬于S子串),統(tǒng)計LMS子串命名次數(shù),若LMS子串的命名次數(shù)與其數(shù)目一樣,說明字符串中各LMS子串是兩兩互異的,LMS子串的名字即為LMS子串的優(yōu)先級;否則,字符串中存在相等的LMS子串,暫時無法確定其所對應的后綴大小關(guān)系;因此,必須提取各LMS子串的名字,按照其所對應的LMS后綴在字符串中的位置索引從小到大排列,構(gòu)成一個新的字符串,計算該新字符串各后綴的前驅(qū)信息,排序L和S子串,以遞歸方式計算LMS子串的優(yōu)先級次序。
      [0021]當LMS子串有序,可通過外存優(yōu)先級隊列容器Q1,輸出有序L后綴至Q2 ;然后在有序L后綴的基礎(chǔ)上,通過Q2,輸出有序S后綴,對L和S后綴按桶關(guān)鍵字歸并,得到字符串的后綴索引。
      [0022]基于以上所述,本發(fā)明實施例提供了一種通過計算機外存來構(gòu)造大規(guī)模字符串文本的后綴索引的方法,參見圖1,該方法包括如下步驟:
      S101:獲取后綴前驅(qū)信息;
      當前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1