專利名稱:一種字符串匹配的方法及裝置的制作方法
技術領域:
本發(fā)明涉及電子及計 算機技術領域,特別是涉及字符串匹配的方法及裝置。
背景技術:
Burrows-Wheeler 轉(zhuǎn)換(Burrows-Wheeler Transform, BffT,巴羅斯-惠勒轉(zhuǎn)換)又稱塊分類壓縮(block-sorting compression)。這種數(shù)據(jù)壓縮算法技術,將完整的人類基因組序列索引壓縮到不到2GB大小(這是當前主流臺式機甚至是筆記本電腦都能達到的水平)。因此,目前通常數(shù)據(jù)庫采用BWT格式索引存儲完整的人類基因組序列。BWA(Burrows-WheeIerAlignment,巴羅斯-惠勒對齊)算法能夠?qū)⒍味唐涡蛄?稱為reads)與經(jīng)BWT壓縮過的參考基因組序列進行比對,最終能找出這段短片段序列在參考基因組中的定位。比對過程主要包括,參見圖I所示步驟101 :從數(shù)據(jù)庫中取出索引和由測序產(chǎn)生的基因短序列,該基因短序列為完整的人類基因組序列的一部分。步驟102:根據(jù)從數(shù)據(jù)庫中查詢到的索引和基因短序列中的位置信息運用FMIndex算法(保羅.費拉吉納和喬瓦爾.曼奇尼于2000年提出的壓縮索引算法)計算出對應的OCC數(shù)組,OCC數(shù)組包括了所有堿基四個字符在該位置的OCC值。具體的,對基因短序列中的每個字符,將該字符對應的索引,加上從O到待查詢位置之間的該字符的數(shù)量,即得到該字符的OCC值。其中,索引的實質(zhì)為前一個字符的坐標,初值為默認的初始索引,每成功匹配一次,該索引的值更新為當前匹配成功的字符的坐標,以作為下一個字符匹配時的起始位置。步驟103 :根據(jù)OCC數(shù)組計算出對應的SA Interval (后綴數(shù)組間隔)的坐標k和I0 對于 k,k[aw] = C[a]+0CC[a, k[w]_l]+l ;對于 I, I = C[a]+0CC[a, I [w]];其中,a 為當前匹配的字符,w為基因短序列中a之前的字符串;C(a)表示字符串a(chǎn)在基因短序列中比a小的字符個數(shù);0CC即為輸入的OCC數(shù)組;k[w]和I [w]為前一個字符的坐標。最終得到的坐標k和I便為短片段序列在參考基因組中的BWT空間的定位。目前BWA算法均在CPU中實現(xiàn),CPU是以reads (基因短序列)為單位進行比對。也就是說,在執(zhí)行步驟101時,CPU針對短片段序列中的每個字符依次取出索引和基因短序列。當基因短序列的所有字符均執(zhí)行完步驟101 103時,CPU再針對下一個reads進行匹配,以此類推。該比對過程的效率較低。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種字符串匹配的方法及裝置,用于提高匹配效率。一種字符串匹配的方法,包括以下步驟為獲得的多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識;
針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標;依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。一種可編程邏輯裝置,包括查詢控制模塊,用于為獲得的多個待匹配字符串分配不同的標識,以及將待匹配字符串以字符為單位發(fā)送給匹配模塊,并將該字符對應的標識發(fā)送給合并模塊,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識;匹配模塊,用于針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BffT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標,并輸出給合并模塊;合并模塊,用于依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中,并將合并后的匹配路徑輸出給聯(lián)結(jié)模塊;遍歷模塊,用于當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。一種單板,包括主控模塊和多個可編程邏輯模塊;主控模塊,用于向每個可編程邏輯模塊發(fā)送多個待匹配字符串,并接收可編程邏輯模塊返回的匹配結(jié)果;可編程邏輯模塊,用于為獲得的多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識;針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標;依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。本發(fā)明實施例中由可編程邏輯器件實現(xiàn)以字符為單位的基于BWT搜索的匹配。一個待匹配字符串中的每個字符均對應該待匹配字符串的標識,將當前獲得的字符的坐標與對應同一待匹配字符串的之前已獲得的字符的坐標合并;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。這樣,可編程邏輯器件可在一個字符的匹配周期內(nèi)處理多個字符的匹配,不需要每個匹配環(huán)節(jié)等待一個待匹配字符串中所有字符均完成之后才能進行下一個環(huán)節(jié),明顯提高了匹配效率。并且,可編程邏輯器件中的各邏輯門可獨立運行,匹配過程的各個環(huán)節(jié)由不同的邏輯門實現(xiàn),也就是說匹配過程的各個環(huán)節(jié)可同步進行,進一步提高了匹配效率。k和I可獨立進行計算,提高了并行度。
圖I為現(xiàn)有技術中字符串匹配的方法流程圖;圖2為本發(fā)明實施例中單板的結(jié)構(gòu)圖3為本發(fā)明實施例中可編程邏輯器件的主要結(jié)構(gòu)圖;圖4為本發(fā)明實施例中可編程邏輯器件的詳細結(jié)構(gòu)圖;圖5為本發(fā)明實施例中目標字符串移位示意圖;圖6為本發(fā)明實施例中目標字符串排序后的不意圖;圖7為本發(fā)明實施例中目標字符串形成的搜索樹的示意圖;圖8為本發(fā)明實施例中第一個字符的搜索空間的示意圖;圖9為本發(fā)明實施例中字符串匹配的主要方法流程圖;圖10為本發(fā)明實施例中字符串匹配的詳細方法流程圖。
具體實施例方式本發(fā)明實施例中由可編程邏輯器件實現(xiàn)以字符為單位的基于BWT搜索算法的匹配。一個待匹配字符串中的每個字符均對應該待匹配字符串的標識,將當前獲得的字符的坐標與對應同一待匹配字符串的之前已獲得的字符的坐標合并;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。這樣,可編程邏輯器件可在一個字符的匹配周期內(nèi)處理多個字符的匹配,不需要每個匹配環(huán)節(jié)等待一個待匹配字符串中所有字符均完成之后才能進行下一個環(huán)節(jié),明顯提高了匹配效率。并且,可編程邏輯器件中的各邏輯門可獨立運行,匹配過程的各個環(huán)節(jié)由不同的邏輯門實現(xiàn),也就是說匹配過程的各個環(huán)節(jié)可同步進行,進一步提高了匹配效率。另外,本實施例中在一個單板上可以有多個可編程邏輯器件并行處理字符的匹配,由單板上的主控模塊負責各可編程邏輯器件的負載均衡。參見圖2,本實施例中的單板包括主控模塊201和多個可編程邏輯模塊202??删幊踢壿嬆K202即為前述的可編程邏輯器件,具體為FPGA(Field Programmable GateArray,現(xiàn)場可編程門陣列)等。主控模塊201可具體為CPU、DSP(數(shù)字信號處理芯片)或MCU (微處理器)等。主控模塊201用于向每個可編程邏輯模塊202發(fā)送多個待匹配字符串,并接收可編程邏輯模塊202返回的匹配結(jié)果。主控模塊201還用于在收到匹配結(jié)果后,如果有待匹配字符串,則向發(fā)送該匹配結(jié)果的可編程邏輯模塊202發(fā)送待匹配字符串。主控模塊201依據(jù)與可編程邏輯模塊202之間的帶寬或可編程邏輯模塊202的邏輯門數(shù)量向可編程邏輯模塊202發(fā)送多個待匹配字符串,使待匹配字符串占滿整個帶寬,或使可編程邏輯模塊202的所有邏輯門均運行在匹配過程上。并且,較佳的,主控模塊201優(yōu)先向負荷最輕的可編程邏輯模塊202發(fā)送待匹配字符串,以便負載均衡。主控模塊201還可以為多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識?;蛘撸瑸槎鄠€待匹配字符串分配不同的標識的工作由可編程邏輯模塊202實現(xiàn)。可編程邏輯模塊202用于為獲得的多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識;針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標;依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。
下面對可編程邏輯模塊202的內(nèi)部結(jié)構(gòu)和進行詳細介紹。參見圖3,本實施例中可編程邏輯裝置包括查詢控制模塊301、匹配模塊302、合并模塊303和遍歷模塊304??删幊踢壿嬔b置即為前述的可編程邏輯模塊202及可編程邏輯器件??删幊踢壿嬔b置中的各模塊及模塊內(nèi)的各單元均對應不同的邏輯門,以便實現(xiàn)并行處理。查詢控制(query)模塊301用于為獲得的多個待匹配字符串分配不同的標識,以及將待匹配字符串以字符為單位發(fā)送給匹配模塊,并將該字符對應的標識發(fā)送給合并模塊,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識。匹配模塊302用于針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標(primary位置)為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標。該當前字符的坐標為當前字符之前的字符串在BWT空間中的坐標,并輸出給合并模塊。字符的前后依據(jù)字符串中字符的匹配順序確定,例如,字符串L00,如果按照從左到右的順序讀取字符進行匹配,則中間的O 的前一個字符為L ;如果按照從右到左的順序讀取字符進行匹配,則中間的O的前一個字符為O。較佳的,匹配模塊302在以前一個字符的坐標為起始位置要進行匹配時,針對當前字符分配字符標識,同一字符串中的不同字符對應不同的標識。對當前字符分別進行k和I的計算,然后利用當前字符的字符標識將k和I的計算結(jié)果合并得到當前字符的坐標。合并(merge)模塊303用于依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中。匹配路徑是指序列聯(lián)配中查找路徑與待匹配字符串之間的映射關系。遍歷(traverse)模塊304用于當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。若匹配模塊302在字符匹配過程中匹配不成功,此時存在錯配,插入和缺失三種情況,則遍歷模塊304分別針對三種情況繼續(xù)在BWT空間進行匹配。如果有過多的字符匹配不成功,則說明待匹配字符串與目標字符串無法匹配,或者說沒有關聯(lián)。因此需要設置一個錯誤的容忍度。則若字符匹配不成功時,遍歷模塊304更新匹配不成功的罰分,并判斷當前的罰分是否達到預設的門限值。若未達到,則在BWT空間上繼續(xù)匹配。若達到預設的門限值,則結(jié)束待匹配字符串的匹配,待匹配字符串的匹配失敗。對于每個字符,每次匹配不成功均對應有罰分,錯配,插入和缺失三種情況的罰分可以不同,也就是三種情況的權(quán)重不同,例如錯配的罰分為1,插入的罰分為2,缺失的罰分為2。每匹配不成功一次,便將相應的罰分累加,得到更新后的罰分,將其與預設的門限值比較。由于針對一個字符在第一次匹配不成功時存在錯配,插入和缺失三種情況,可能需要嘗試三種情況后才能獲得正確的結(jié)果。但是這樣需要大量的匹配操作,設備的負荷較大。為解決該問題,遍歷模塊304先將待匹配字符串與目標字符串進行初配,針對當前字符,在匹配不成功時,在BWT空間中確定字符當前位置后存在的初配結(jié)果中的段數(shù),當段數(shù)大于預設門限值時,終止該待匹配字符串的匹配;當?shù)扔陬A設門限值時,根據(jù)當前位置后續(xù)的初配結(jié)果段從所有可能的查詢路徑中刪除相應的查詢路徑,由于初配結(jié)果段會對應錯配、插入或缺失的情況,所以這些路徑都將被刪除,然后從剩余查詢路徑中繼續(xù)匹配;當小于預設門限時,則在BWT空間的所有可能路徑上繼續(xù)匹配。其中,所述BWT空間為前綴樹或后綴樹,查詢路徑為字符串在樹上的查詢路徑。所有可能的查詢路徑是在樹上針對錯配,插入和缺失三種情況的所有查詢路徑。初配是指將待匹配字符串與BWT空間中的目標字符串進行匹配,針對當前字符,在字符匹配不成功時,記錄該字符之前的字符串的BWT空間坐標,并以此字符之前匹配成功的字符串記為一段,并從匹配不成功的位置起,繼續(xù)將當前字符與BWT空間中的目標字符串進行匹配,確定第一次匹配成功的位置,并將下一個字符以該匹配成功的位置為起始位置,繼續(xù)與BWT空間中的目標字符串進行匹配,直到出現(xiàn)匹配不成功的字符,以此字符之前匹配成功的字符串記為一段,或者直到待匹配字符串的每個字符均匹配完畢。初配可以從待匹配字符串中的不同字符開始進行多次匹配(初始匹配字符可以由用戶指定),得到針對不同初始字符的多組片段作為初配結(jié)果。每組片段對應一個初始字符關于待匹配字符串的初配結(jié)果。本實施例中BWT空間中的目標字符串可存儲在可編程邏輯裝置以外的存儲設備中,該存儲設備可具體為 DDR SDRAM(DoubIe Data Rate Synchronous Dynamic RandomAccess Memory雙倍速率同步動態(tài)隨機存儲器)。例如,DDR包括兩個內(nèi)存區(qū)塊(RANK),每個RANK包括8個BANK(存儲陣列)。每次訪問需要啟動一個BANK,并在一段時間內(nèi)完成訪問。BANK —次只能處理一個訪問請求,在處理時間內(nèi),不能接受新的請求。同時,任意時刻,每個RANK最多有四個BANK處于活動狀態(tài)。目前在與BWT空間中的目標字符串進行匹配時,對BANK的訪問請求是按照接收請求的順序來處理的,如果多個請求需要訪問同一 BANK,則需要排隊,后續(xù)不訪問該BANK的請求也不能立即處理。本申請的發(fā)明人發(fā)現(xiàn)該問題后,為解決該問題,可編程邏輯裝置的匹配模塊302在訪問BANK之前,對當前的所有訪問請求散列排隊,尤其是針對各訪問請求需訪問的BANK進行排隊,盡可能使連續(xù)的多個訪問請求訪問不同的BANK,從而減少存儲設備帶寬的空閑。實測結(jié)果表明,這一方案可以將數(shù)據(jù)庫訪問吞吐量提升四倍左右,這對于算法整體的加速比有重大的貢獻。可編程邏輯裝置還包括緩存模塊305,參見圖4所示。緩存模塊305用于存儲初始設置的坐標和獲得的多個待匹配字符串。本申請的發(fā)明人發(fā)現(xiàn),當字符匹配應用在基因序列匹配方面時,數(shù)據(jù)庫的訪問在順序上具有依賴關系,所有的訪問都是從O或者PRIMARY位置(即前一個字符的坐標)開始。根據(jù)每一個當前字符,下一次訪問的位置有四種可能(因為基因有四種堿基),對應四種不同字符。這樣,可以將數(shù)據(jù)庫的所有位置看做從O和PRIMARY起始的兩顆樹,樹的每個節(jié)點有四條分支。這決定了在樹的一定深度內(nèi),對數(shù)據(jù)庫的訪問位置局限在一個小的集合內(nèi)。由于每個子序列比對的數(shù)據(jù)庫訪問都將從這個局部集合起始,并且發(fā)明人經(jīng)統(tǒng)計發(fā)現(xiàn),基因的待匹配字符串的前幾個字符相同的情況比較多,因此在所述局部集合存儲在某個BANK中時,會需要頻繁的訪問該BANK,且一次只能處理一個訪問請求,影響訪問的整體隨機性,造成性能下降。當采用多個可編程邏輯裝置時,每個可編程邏輯裝置可訪問為其唯一配置的DDRSDRAM,以提高訪問效率和匹配效率。為解決該問題,本實施例中緩存模塊305包括第一緩存單元和第二緩存單元。第一緩存單??梢允?SDRAM (Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器),用于存儲初始設置的坐標和獲得的多個待匹配字符串等。第二緩存單元可以是Cache (緩存),用于存儲所述局部集合。當BWT空間采用前綴樹或后綴樹時,所述局部集合包括從根節(jié)點開始的3、4層節(jié)點的目標字符串及節(jié)點間的父子關系。在不使用第二緩存單元時,存儲設備的帶寬利用率只有70%,0和PRIMARY所在的通道出現(xiàn)阻塞,其他通道可能出現(xiàn)饑餓。使用第二緩存單元時,存儲設備帶寬的利用率達到90 %,提高了所有通道的負載均衡。匹配模塊3 02包括數(shù)據(jù)庫查詢單元、OCC單元和SA單元。數(shù)據(jù)庫查詢單元用于從數(shù)據(jù)庫中取出BWT格式的初始索引和目標字符串。OCC單元用于根據(jù)BWA算法、初始索引和目標字符串中的位置信息計算出對應的OCC數(shù)組。OCC數(shù)組包括了所有可能的字符在該位置的OCC值。具體的,對待匹配字符串中的每個字符,將該字符對應的初始索引中的起始索引值,加上初始索引中從O到待查詢位置之間的該字符的數(shù)量,即得到該字符的OCC值。SA單元用于根據(jù)BWT搜索算法和OCC數(shù)組計算出對應的SAInterval的上坐標k和下坐標 I。對于 k, k[aw] = C[a]+0CC[a, k[w]_l]+l ;對于 I, I = C[a]+0CC[a, I [w]];其中,a為當前匹配的字符,w為基因短序列中a之前的字符串;C(a)表示字符串a(chǎn)在基因短序列中比a小的字符個數(shù);0CC即為輸入的OCC數(shù)組;k[w]和l[w]為前一個字符的坐標。查詢控制(query)模塊301還可以為每個字符分配標識,則SA單元3023可以針對一個字符分配計算k和I,然后依據(jù)該字符的標識將該字符對應的k和I組合。例如,目標字符串為LEELGE$,字符長度為7,則循環(huán)移位后如圖5所示,將字符按照大小排序,則排序后的結(jié)果如圖6所示。經(jīng)BWT算法可得到搜索樹(即BWT空間),如圖7所示。待匹配字符串為LE,長度為2。目標字符串LEELGE$存于單板或外部的內(nèi)存上。緩存模塊305從主控模塊201處獲得并存儲待匹配字符串LE,以及存儲初始配置的坐標k和I的值(0,6)。緩存模塊305將坐標k和I的值(0,6)和待匹配字符串GO的長度2發(fā)送給遍歷模塊304。當前遍歷模塊304中k和I的值只有(0,6),則將(0,6)發(fā)送給查詢控制模塊301。查詢控制模塊301為緩存模塊305中的存儲待匹配字符串LE分配標識EIDl,以及從緩存模塊305處獲得存儲待匹配字符串中的第一個字符L,則根據(jù)遍歷模塊304指示的查詢路徑,確定從節(jié)點(0,6)的子節(jié)點中匹配。查詢控制模塊301將字符L、坐標(0,6)和搜索方向信息發(fā)送給數(shù)據(jù)庫查詢單元3021。數(shù)據(jù)庫查詢單元3021依據(jù)坐標(0,6)和搜索方向信息從數(shù)據(jù)庫中獲得節(jié)點(0,6)的子節(jié)點(1,2)、(4,6)和(3,3),參見圖8所示。OCC單元3021依據(jù)字符L計算出OCC數(shù)組。SA單元3022依據(jù)OCC數(shù)組計算出k和I的新值(1,2),并將該值發(fā)送給合并模塊303。合并模塊303將值(1,2)合并到EIDl對應的默認的空的匹配路徑中,記錄對應的標識EID1。合并模塊303將值(1,2)發(fā)送給遍歷模塊304。此時遍歷模塊304中有值(0,6)和(I,2),依據(jù)BWT搜索算法確定(1,2)存在子節(jié)點,并且從緩存模塊305中獲得第二個字符E,確定繼續(xù)與(1,2)的子節(jié)點匹配。重復上述過程,合并模塊303將對應EIDl的字符E對應的坐標(4,4)合并到EIDl的匹配路徑。遍歷模塊304確定緩存模塊305中待匹配字符串的字符均匹配完畢,則輸出匹配結(jié)果。匹配成功,結(jié)果為(1,2),(4,4)。當有多個待匹配字符串并行匹配時,例如OCC單元3022依據(jù)待匹配字符串EIDl的第一個字符計算出OCC數(shù)組。此時,數(shù)據(jù)庫查詢單元3021可以針對待匹配字符串EID2的第一個字符查詢數(shù)據(jù)庫。從而實現(xiàn)可編程邏輯裝置大概在一個待匹配字符串的匹配周期內(nèi)實現(xiàn)多個待匹配字符串的匹配??删幊踢壿嬔b置中各模塊之間的邏輯門關系為例如,采用邏輯門百分比,查詢控制模塊301、匹配模塊302、合并模塊303、遍歷模塊304和緩存模塊305對應的邏輯門百分比為3% 4%、35 40%%、4% 5%、35% 40%和15% 20%,百分比和等于I。該邏輯門的比例關系是依據(jù)各模塊的運算量設置的,是一種較佳配比方案,當然也可以在適當?shù)姆秶鷥?nèi)調(diào)整該配比關系。以上是單板及可編程邏輯裝置的介紹,下面對字符串匹配的過程進行描述。 參見圖9,本實施例中字符串匹配的主要方法流程如下步驟901 :為獲得的多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識。步驟902 :針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標。該當前字符的坐標為當前字符之前的字符串在BWT空間中的坐標。較佳的,在以前一個字符的坐標為起始位置要進行匹配時,針對當前字符分配字符標識,同一字符串中的不同字符對應不同的標識。對當前字符分別進行k和I的計算,然后利用當前字符的字符標識將k和I的計算結(jié)果合并得到上述坐標。步驟903 :依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中。匹配路徑是指序列聯(lián)配中查找路徑與待匹配字符串之間的映射關系。步驟904 :當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。針對多個待匹配字符串中每個待匹配字符串的第一個字符,前一個字符的坐標是初始設置的。若在字符匹配過程中匹配不成功,此時存在錯配,插入和缺失三種情況,則分別針對三種情況繼續(xù)在BWT空間進行匹配。如果有過多的字符匹配不成功,則說明待匹配字符串與目標字符串無法匹配,或者說沒有關聯(lián)。因此需要設置一個錯誤的容忍度。則若字符匹配不成功時,更新匹配不成功的罰分,并判斷當前的罰分是否達到預設的門限值。若未達到,則在BWT空間上繼續(xù)匹配。若達到預設的門限值,則結(jié)束待匹配字符串的匹配,待匹配字符串的匹配失敗。對于每個字符,每次匹配不成功均對應有罰分,錯配,插入和缺失三種情況的罰分可以不同,也就是三種情況的權(quán)重不同,例如錯配的罰分為1,插入的罰分為2,缺失的罰分為2。每匹配不成功一次,便將相應的罰分累加,得到更新后的罰分,將其與預設的門限值比較。由于針對一個字符在第一次匹配不成功時存在錯配,插入和缺失三種情況,可能需要嘗試三種情況后才能獲得正確的結(jié)果。但是這樣需要大量的匹配操作,設備的負荷較大。為解決該問題,先將待匹配字符串與目標字符串進行初配,針對當前字符,在匹配不成功時,在BWT空間中確定字符當前位置后存在的初配結(jié)果中的段數(shù),當段數(shù)大于預設門限值時,終止該待匹配字符串的匹配;當?shù)扔陬A設門限值時,根據(jù)當前位置后續(xù)的初配結(jié)果段從所有可能的查詢路徑中刪除相應的查詢路徑,從剩余查詢路徑中繼續(xù)匹配;當小于預設門限時,則在BWT空間的所有可能路徑上繼續(xù)匹配。其中,所述BWT空間為前綴樹或后綴樹,查詢路徑為字符串在樹上的查詢路徑。所有可能的查詢路徑是在樹上針對錯配,插入和缺失三種情況的所有查詢路徑。參見圖10,本實施例中字符串匹配的詳細方法流程如下為獲得的待匹配字符串分配標識,并將待匹配字符串與BWT空間中的目標字符串進行初配,得到初配結(jié)果。步驟1001 :從待匹配字符串中獲得一個字符,并為該字符分配標識。步驟1002 :對當前字符分別進行k和I的計算,若均有計算結(jié)果且k > I (表示匹配成功),則繼續(xù)步驟1003,否則繼續(xù)步驟1004。
步驟1003 :利用當前字符的字符標識將k和I的計算結(jié)果合并得到當前字符的坐標。繼續(xù)步驟1010。步驟1004 :更新待匹配字符串對應的匹配不成功的罰分。步驟1005 :判斷當前的罰分是否達到預設的門限值,若未達到,則繼續(xù)步驟1006,否則結(jié)束流程。步驟1006 :在BffT空間中確定字符當前位置后存在的初配結(jié)果中的段數(shù)。步驟1007 :判斷確定的段數(shù)與預設的門限值的大小關系,若大于,則結(jié)束流程,若等于,則繼續(xù)步驟1008,若小于則繼續(xù)步驟1009。步驟1008 :根據(jù)當前位置后續(xù)的初配結(jié)果段從所有可能的查詢路徑中刪除相應的查詢路徑,從剩余查詢路徑中繼續(xù)匹配,繼續(xù)步驟1002。步驟1009 :在BWT空間的所有可能路徑上繼續(xù)匹配,繼續(xù)步驟1002。步驟1010 :依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中。步驟1011 :判斷待匹配字符串中是否有未參與匹配的字符,若有,則繼續(xù)步驟1001,否則繼續(xù)步驟1012。步驟1012 :當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。本發(fā)明實施例中由可編程邏輯器件實現(xiàn)以字符為單位的基于BWA算法的匹配。一個待匹配字符串中的每個字符均對應該待匹配字符串的標識,將當前獲得的字符的坐標與對應同一待匹配字符串的之前已獲得的字符的坐標合并;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。這樣,可編程邏輯器件可在一個字符的匹配周期內(nèi)處理多個字符的匹配,不需要每個匹配環(huán)節(jié)等待一個待匹配字符串中所有字符均完成之后才能進行下一個環(huán)節(jié),明顯提高了匹配效率。并且,可編程邏輯器件中的各邏輯門可獨立運行,匹配過程的各個環(huán)節(jié)由不同的邏輯門實現(xiàn),也就是說匹配過程的各個環(huán)節(jié)可同步進行,進一步提高了匹配效率。本領域內(nèi)的技術人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精·神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種字符串匹配的方法,其特征在于,包括以下步驟 為獲得的多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識; 并行處理所述多個待匹配字符串,并針對每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標; 依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中; 當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。
2.如權(quán)利要求I所述的方法,其特征在于,針對多個待匹配字符串中每個待匹配字符串的第一個字符,其前一個字符的坐標是初始設置的。
3.如權(quán)利要求I所述的方法,其特征在于,針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標,具體包括 在以前一個字符的坐標為起始位置要進行匹配時,針對當前字符分配字符標識,并依據(jù)前一個字符的坐標對當前字符分別進行k和I的計算,利用當前字符的字符標識將k和I的計算結(jié)果合并得到當前字符的坐標,其中,同一字符串中的不同字符對應不同的標識,其中k和I分別是BWT空間中后綴數(shù)組間隔的開始位置和結(jié)束位置。
4.如權(quán)利要求I所述的方法,其特征在于,還包括步驟若在字符匹配過程中匹配不成功,則分別針對錯配,插入和缺失三種情況,根據(jù)與該三種情況對應的匹配策略,將當前字符繼續(xù)與BWT空間中的目標字符串進行匹配。
5.如權(quán)利要求4所述的方法,其特征在于,分別針對錯配,插入和缺失三種情況將當前字符繼續(xù)與BWT空間中的目標字符串進行匹配之前,還包括步驟更新匹配不成功的罰分,并判斷當前的罰分是否達到預設的門限值; 若未達到門限值,則分別針對錯配,插入和缺失三種情況繼續(xù)與BWT空間中的目標字符串進行匹配。
6.如權(quán)利要求5所述的方法,其特征在于,在將待匹配字符串與BWT空間中的目標字符串進行匹配之前,還包括步驟將待匹配字符串與BWT空間中的目標字符串進行初配,得到包括多個初配結(jié)果段; 在當前的罰分未達到門限值時,還包括步驟在BWT空間中確定字符當前匹配不成功的位置后存在的初配結(jié)果段的段數(shù),并將確定的段數(shù)與預設的門限值比較; 當段數(shù)大于預設門限值時,終止該待匹配字符串的匹配; 當段數(shù)等于預設門限值時,根據(jù)當前位置后續(xù)的初配結(jié)果段從BWT空間的所有可能的查詢路徑中刪除相應的查詢路徑,從剩余查詢路徑中繼續(xù)匹配; 當段數(shù)小于預設門限時,則在BWT空間的所有可能路徑上繼續(xù)匹配。
7.一種可編程邏輯裝置,其特征在于,包括 查詢控制模塊,用于為獲得的多個待匹配字符串分配不同的標識,以及將待匹配字符串以字符為單位發(fā)送給匹配模塊,并將該字符對應的標識發(fā)送給合并模塊,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識; 匹配模塊,用于并行處理所述多個待匹配字符串,并針對每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標,并輸出給合并模塊; 合并模塊,用于依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中,并將合并后的匹配路徑輸出給遍歷模塊; 遍歷模塊,用于當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。
8.如權(quán)利要求7所述的裝置,其特征在于,還包括緩存模塊,用于存儲初始設置的坐標和獲得的多個待匹配字符串。
9.如權(quán)利要求7所述的裝置,其特征在于,針對多個待匹配字符串中每個待匹配字符串的第一個字符,前一個字符的坐標是初始設置的。
10.如權(quán)利要求7所述的裝置,其特征在于,查詢控制模塊還用于在以前一個字符的坐標為起始位置要進行匹配時,針對當前字符分配字符標識; 匹配模塊依據(jù)前一個字符的坐標對當前字符分別進行k和I的計算,利用當前字符的字符標識將k和I的計算結(jié)果合并得到當前字符的坐標,其中,同一字符串中的不同字符對應不同的標識,其中k和I分別是BWT空間中后綴數(shù)組間隔的開始位置和結(jié)束位置。
11.如權(quán)利要求10所述的裝置,其特征在于,匹配模塊包括 數(shù)據(jù)庫查詢單元,用于從數(shù)據(jù)庫中取出BWT空間的初始索引和目標字符串; OCC單元,用于根據(jù)BWT搜索算法、初始索引和目標字符串中的位置信息計算出對應的OCC數(shù)組; SA單元,用于根據(jù)BWT搜索算法和OCC數(shù)組計算出對應的SA Interval的上坐標k和下坐標1,并利用當前字符的字符標識將k和I的計算結(jié)果合并得到當前字符的坐標。
12.如權(quán)利要求7所述的裝置,其特征在于,若在字符匹配過程中匹配不成功,則遍歷模塊用于分別針對錯配,插入和缺失三種情況確定,根據(jù)與該三種情況對應的匹配策略,將當前字符繼續(xù)與BWT空間中的目標字符串進行匹配的查詢路徑,并通過查詢控制模塊指示匹配模塊依據(jù)該查詢路徑繼續(xù)匹配。
13.如權(quán)利要求12所述的裝置,其特征在于,遍歷模塊還用于更新匹配不成功的罰分,并判斷當前的罰分是否達到預設的門限值,若未達到門限值,則分別針對錯配,插入和缺失三種情況確定繼續(xù)與BWT空間中的目標字符串進行匹配的查詢路徑。
14.如權(quán)利要求13所述的裝置,其特征在于,在將待匹配字符串與BWT空間中的目標字符串進行匹配之前,遍歷模塊還用于將待匹配字符串與BWT空間中的目標字符串進行初配,得到包括多個初配結(jié)果段; 遍歷模塊還用于在當前的罰分未達到門限值時,在BWT空間中確定字符當前匹配不成功的位置后存在的初配結(jié)果段的段數(shù),并將確定的段數(shù)與預設的門限值比較;當段數(shù)大于預設門限值時,終止該待匹配字符串的匹配;當段數(shù)等于預設門限值時,根據(jù)當前位置后續(xù)的初配結(jié)果段從BWT空間的所有可能的查詢路徑中刪除相應的查詢路徑,通過查詢控制模塊指示匹配模塊從剩余查詢路徑中繼續(xù)匹配;當段數(shù)小于預設門限時,通過查詢控制模塊指示匹配模塊在BWT空間的所有可能路徑上繼續(xù)匹配。
15.如權(quán)利要求7所述的裝置,其特征在于,各模塊對應不同的邏輯門。
16.一種單板,其特征在于,包括主控模塊和多個可編程邏輯模塊; 主控模塊,用于向每個可編程邏輯模塊發(fā)送多個待匹配字符串,并接收可編程邏輯模塊返回的匹配結(jié)果; 可編程邏輯模塊,用于為獲得的多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識;針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標;依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。
17.如權(quán)利要求16所述的單板,其特征在于,主控模塊還用于在收到匹配結(jié)果后,如果有待匹配字符串,則向發(fā)送該匹配結(jié)果的可編程邏輯模塊發(fā)送待匹配字符串。
全文摘要
本發(fā)明公開了一種字符串匹配的方法,用于提高匹配效率。所述方法包括為獲得的多個待匹配字符串分配不同的標識,其中一個待匹配字符串中的每個字符均對應該待匹配字符串的標識;針對多個待匹配字符串中每個待匹配字符串的每一個字符,依據(jù)BWT搜索算法,以前一個字符的坐標為起始位置與BWT空間中的目標字符串進行匹配,并在字符匹配成功時獲得當前字符的坐標;依據(jù)待匹配字符串的標識,將當前獲得的字符的坐標合并到對應的待匹配字符串的匹配路徑中;當一個待匹配字符串中所有字符的坐標均合并時,確定該待匹配字符串與目標字符串匹配成功。本發(fā)明還公開了用于實現(xiàn)所述方法的裝置。
文檔編號G06F17/30GK102929900SQ20121001330
公開日2013年2月13日 申請日期2012年1月16日 優(yōu)先權(quán)日2012年1月16日
發(fā)明者凌少平, 呂雪梅 申請人:中國科學院北京基因組研究所