bwt演算法
1. 後綴樹演算法
後綴樹演算法在現代的比對工具中也是非常常見的一類比對演算法,常用的STAR軟體利用的就是後綴樹演算法,而bowtie,BWA等比對軟體用的是BWT演算法,這就是為什麼STAR的比對速度要比其他二代軟體快,索引比其他二代軟體大的原因
構建後綴樹演算法的流程類似於BWT演算法,比方說我的 ref 序列為:ATCATGATC$ ,類似於BWT演算法依次向前移位,並去掉第一個元素
並且根據你的 ref序列的特點 來構建樹
其中黑色點代表結點,[3,9]表示位置信息,代表上表中3到9號位置的兩個元素,其他的以此類推
對於 ref:ATCATGATC$
開頭第一個元素無非是A,T,C,G四種元素,那麼由0號節點出發,分為四類
倘若現在有一條 reads:ATCA ,首先走結點0->1->6->12,並儲存位置信息,這就比對完成了,即比對到位置信息為[0,3]
又比如有一條 reads:CATGA ,首先走結點0->3->10,儲存位置信息,這就比對完成了,即比對到位置信息為[2,6]
再如有一條 reads:ATC ,可以走結點0->1->6,即比對到位置信息為[0,2];也可以走結點0->16->17,即比對到位置信息為[6,9]
參考:孟叔live
2. .7z後綴的文件用什麼打開
工具材料
winrar軟體
方法如下
1、首先打開「winrar」軟體,在下拉菜單中找到「設置」選項。
3. seed alignment 演算法(BWT)
這篇文章就記錄一下seed alignment 的BWT演算法,不過,BWT演算法原本用於數據壓縮,而它的 壓縮 和 解壓縮 的過程也可以直接類比到, 參考基因組做索引 和 seed alignment 的雙序列比對。
以下步驟與圖1一一對應:
舉例:壓縮字元串 ababc
輸入字元串 ababc
第一步,添加標記 ababc$
第二步, ababc$ 「循環轉移」(序列最後一個字母「依次」移動到最前端)
第三步,將「循環轉移」獲得的矩陣按照 第一列首字母 排序獲得M數組
第四步,取出M數組的第一列為 F列 ;M數組的最後一列為 L列
數據壓縮: 做到這一步之後,便可以直接將 L列 以 c,$,b,2a,b 的形式存儲,實現了字元串 ababc 的數據壓縮(不過這個舉例里壓縮率並不高😓)
數據解壓縮,也就是從 L列 內容還原原始字元串。其中勢必用到了M數組中的兩個特殊列 F列 和 L列 ,還有他們之間的相互關系。
如何通過F列和L列還原原始序列?也就是解壓縮過程:
以上步驟中,黑粗體描述的字母 從下向上 排列為: ababc ,即達到了恢復原始序列的目的。
我們如何用BWT的演算法做鹼基序列比對?實際上,以上提到 數據壓縮和解壓縮 的過程就是我們做序列比對的過程。
1)我們建立參考基因組的索引,其實便是建立refercen序列的L列和它相對位置的index(體現在👆便是 ababc 獲得L列的過程,也就是 數據壓縮 的過程);
2)我們將測序得到的reads與參考基因組比對,其實便是查找reads對應參考基因組的位置,並觀察reads序列是否可以還原出對應位置的鹼基序列(體現在👆便是由L列排序獲得F列,然後以F列配合做指引,從最後一個字母出發做 數據解壓縮 )
舉例: abab 是否為 ababc 的子序列?我們看BWT演算法是如何判斷的
第二次:
實際的比對過程中,測序得到的reads都被分割成幾十bp的片段,選取其中的部分質量較好的序列作為seed序列與參考基因組比對(循環如上的 解壓縮 過程),找到reads在基因組上大概的位置(比對上的位置可能會很多,會綜合很多因素:insertion、deletion、mismatch、reads quality等等,為每一個位置打分,最終取 得分最高的位置 )。
確定位置之後,取出參考基因組對應位置附近的序列,和reads做雙序列比對。
4. BWT是什麼啊
很多意思,你可以搜網路。你沒告訴我們到底是哪方面的,它實在有很多層意思。
5. 數據壓縮技術的數據壓縮技術簡史
電腦里的數據壓縮其實類似於美眉們的瘦身運動,不外有兩大功用。第一,可以節省空間。拿瘦身美眉來說,要是八個美眉可以擠進一輛計程車里,那該有多省錢啊!第二,可以減少對帶寬的佔用。例如,我們都想在不到 100Kbps 的 GPRS 網上觀看 DVD 大片,這就好比瘦身美眉們總希望用一尺布裁出七件吊帶衫,前者有待於數據壓縮技術的突破性進展,後者則取決於美眉們的恆心和毅力。
簡單地說,如果沒有數據壓縮技術,我們就沒法用 WinRAR 為 Email 中的附件瘦身;如果沒有數據壓縮技術,市場上的數碼錄音筆就只能記錄不到 20 分鍾的語音;如果沒有數據壓縮技術,從 Internet 上下載一部電影也許要花半年的時間……可是這一切究竟是如何實現的呢?數據壓縮技術又是怎樣從無到有發展起來的呢? 一千多年前的中國學者就知道用「班馬」這樣的縮略語來指代班固和司馬遷,這種崇尚簡約的風俗一直延續到了今天的 Internet 時代:當我們在 BBS 上用「 7456 」代表「氣死我了」,或是用「 B4 」代表「 Before 」的時候,我們至少應該知道,這其實就是一種最簡單的數據壓縮呀。
嚴格意義上的數據壓縮起源於人們對概率的認識。當我們對文字信息進行編碼時,如果為出現概率較高的字母賦予較短的編碼,為出現概率較低的字母賦予較長的編碼,總的編碼長度就能縮短不少。遠在計算機出現之前,著名的 Morse 電碼就已經成功地實踐了這一準則。在 Morse 碼表中,每個字母都對應於一個唯一的點劃組合,出現概率最高的字母 e 被編碼為一個點「 . 」,而出現概率較低的字母 z 則被編碼為「 --.. 」。顯然,這可以有效縮短最終的電碼長度。
資訊理論之父 C. E. Shannon 第一次用數學語言闡明了概率與信息冗餘度的關系。在 1948 年發表的論文「通信的數學理論( A Mathematical Theory of Communication )」中, Shannon 指出,任何信息都存在冗餘,冗餘大小與信息中每個符號(數字、字母或單詞)的出現概率或者說不確定性有關。 Shannon 借鑒了熱力學的概念,把信息中排除了冗餘後的平均信息量稱為「信息熵」,並給出了計算信息熵的數學表達式。這篇偉大的論文後來被譽為資訊理論的開山之作,信息熵也奠定了所有數據壓縮演算法的理論基礎。從本質上講,數據壓縮的目的就是要消除信息中的冗餘,而信息熵及相關的定理恰恰用數學手段精確地描述了信息冗餘的程度。利用信息熵公式,人們可以計算出信息編碼的極限,即在一定的概率模型下,無損壓縮的編碼長度不可能小於信息熵公式給出的結果。
有了完備的理論,接下來的事就是要想辦法實現具體的演算法,並盡量使演算法的輸出接近信息熵的極限了。當然,大多數工程技術人員都知道,要將一種理論從數學公式發展成實用技術,就像僅憑一個 E=mc 2 的公式就要去製造核武器一樣,並不是一件很容易的事。 設計具體的壓縮演算法的過程通常更像是一場數學游戲。開發者首先要尋找一種能盡量精確地統計或估計信息中符號出現概率的方法,然後還要設計一套用最短的代碼描述每個符號的編碼規則。統計學知識對於前一項工作相當有效,迄今為止,人們已經陸續實現了靜態模型、半靜態模型、自適應模型、 Markov 模型、部分匹配預測模型等概率統計模型。相對而言,編碼方法的發展歷程更為曲折一些。
1948 年, Shannon 在提出信息熵理論的同時,也給出了一種簡單的編碼方法—— Shannon 編碼。 1952 年, R. M. Fano 又進一步提出了 Fano 編碼。這些早期的編碼方法揭示了變長編碼的基本規律,也確實可以取得一定的壓縮效果,但離真正實用的壓縮演算法還相去甚遠。
第一個實用的編碼方法是由 D. A. Huffman 在 1952 年的論文「最小冗餘度代碼的構造方法( A Method for the Construction of Minimum Rendancy Codes )」中提出的。直到今天,許多《數據結構》教材在討論二叉樹時仍要提及這種被後人稱為 Huffman 編碼的方法。 Huffman 編碼在計算機界是如此著名,以至於連編碼的發明過程本身也成了人們津津樂道的話題。據說, 1952 年時,年輕的 Huffman 還是麻省理工學院的一名學生,他為了向老師證明自己可以不參加某門功課的期末考試,才設計了這個看似簡單,但卻影響深遠的編碼方法。
Huffman 編碼效率高,運算速度快,實現方式靈活,從 20 世紀 60 年代至今,在數據壓縮領域得到了廣泛的應用。例如,早期 UNIX 系統上一個不太為現代人熟知的壓縮程序 COMPACT 實際就是 Huffman 0 階自適應編碼的具體實現。 20 世紀 80 年代初, Huffman 編碼又出現在 CP/M 和 DOS 系統中,其代表程序叫 SQ 。今天,在許多知名的壓縮工具和壓縮演算法(如 WinRAR 、 gzip 和 JPEG )里,都有 Huffman 編碼的身影。不過, Huffman 編碼所得的編碼長度只是對信息熵計算結果的一種近似,還無法真正逼近信息熵的極限。正因為如此,現代壓縮技術通常只將 Huffman 視作最終的編碼手段,而非數據壓縮演算法的全部。
科學家們一直沒有放棄向信息熵極限挑戰的理想。 1968 年前後, P. Elias 發展了 Shannon 和 Fano 的編碼方法,構造出從數學角度看來更為完美的 Shannon-Fano-Elias 編碼。沿著這一編碼方法的思路, 1976 年, J. Rissanen 提出了一種可以成功地逼近信息熵極限的編碼方法——算術編碼。 1982 年, Rissanen 和 G. G. Langdon 一起改進了算術編碼。之後,人們又將算術編碼與 J. G. Cleary 和 I. H. Witten 於 1984 年提出的部分匹配預測模型( PPM )相結合,開發出了壓縮效果近乎完美的演算法。今天,那些名為 PPMC 、 PPMD 或 PPMZ 並號稱壓縮效果天下第一的通用壓縮演算法,實際上全都是這一思路的具體實現。
對於無損壓縮而言, PPM 模型與算術編碼相結合,已經可以最大程度地逼近信息熵的極限。看起來,壓縮技術的發展可以到此為止了。不幸的是,事情往往不像想像中的那樣簡單:算術編碼雖然可以獲得最短的編碼長度,但其本身的復雜性也使得算術編碼的任何具體實現在運行時都慢如蝸牛。即使在摩爾定律大行其道, CPU 速度日新月異的今天,算術編碼程序的運行速度也很難滿足日常應用的需求。沒辦法,如果不是後文將要提到的那兩個猶太人,我們還不知要到什麼時候才能用上 WinZIP 這樣方便實用的壓縮工具呢。 逆向思維永遠是科學和技術領域里出奇制勝的法寶。就在大多數人絞盡腦汁想改進 Huffman 或算術編碼,以獲得一種兼顧了運行速度和壓縮效果的「完美」編碼的時候,兩個聰明的猶太人 J. Ziv 和 A. Lempel 獨辟蹊徑,完全脫離 Huffman 及算術編碼的設計思路,創造出了一系列比 Huffman 編碼更有效,比算術編碼更快捷的壓縮演算法。我們通常用這兩個猶太人姓氏的縮寫,將這些演算法統稱為 LZ 系列演算法。
按照時間順序, LZ 系列演算法的發展歷程大致是: Ziv 和 Lempel 於 1977 年發表題為「順序數據壓縮的一個通用演算法( A Universal Algorithm for Sequential Data Compression )」的論文,論文中描述的演算法被後人稱為 LZ77 演算法。 1978 年,二人又發表了該論文的續篇「通過可變比率編碼的獨立序列的壓縮( Compression of Indivial Sequences via Variable Rate Coding )」,描述了後來被命名為 LZ78 的壓縮演算法。 1984 年, T. A. Welch 發表了名為「高性能數據壓縮技術( A Technique for High Performance Data Compression )」的論文,描述了他在 Sperry 研究中心(該研究中心後來並入了 Unisys 公司)的研究成果,這是 LZ78 演算法的一個變種,也就是後來非常有名的 LZW 演算法。 1990 年後, T. C. Bell 等人又陸續提出了許多 LZ 系列演算法的變體或改進版本。
說實話, LZ 系列演算法的思路並不新鮮,其中既沒有高深的理論背景,也沒有復雜的數學公式,它們只是簡單地延續了千百年來人們對字典的追崇和喜好,並用一種極為巧妙的方式將字典技術應用於通用數據壓縮領域。通俗地說,當你用字典中的頁碼和行號代替文章中每個單詞的時候,你實際上已經掌握了 LZ 系列演算法的真諦。這種基於字典模型的思路在表面上雖然和 Shannon 、 Huffman 等人開創的統計學方法大相徑庭,但在效果上一樣可以逼近信息熵的極限。而且,可以從理論上證明, LZ 系列演算法在本質上仍然符合信息熵的基本規律。
LZ 系列演算法的優越性很快就在數據壓縮領域里體現 了 出來,使用 LZ 系列演算法的工具軟體數量呈爆炸式增長。 UNIX 系統上最先出現了使用 LZW 演算法的 compress 程序,該程序很快成為了 UNIX 世界的壓縮標准。緊隨其後的是 MS-DOS 環境下的 ARC 程序,以及 PKWare 、 PKARC 等仿製品。 20 世紀 80 年代,著名的壓縮工具 LHarc 和 ARJ 則是 LZ77 演算法的傑出代表。
今天, LZ77 、 LZ78 、 LZW 演算法以及它們的各種變體幾乎壟斷了整個通用數據壓縮領域,我們熟悉的 PKZIP 、 WinZIP 、 WinRAR 、 gzip 等壓縮工具以及 ZIP 、 GIF 、 PNG 等文件格式都是 LZ 系列演算法的受益者,甚至連 PGP 這樣的加密文件格式也選擇了 LZ 系列演算法作為其數據壓縮的標准。
沒有誰能否認兩位猶太人對數據壓縮技術的貢獻。我想強調的只是,在工程技術領域,片面追求理論上的完美往往只會事倍功半,如果大家能像 Ziv 和 Lempel 那樣,經常換個角度來思考問題,沒准兒你我就能發明一種新的演算法,就能在技術方展史上揚名立萬呢。 LZ 系列演算法基本解決了通用數據壓縮中兼顧速度與壓縮效果的難題。但是,數據壓縮領域里還有另一片更為廣闊的天地等待著我們去探索。 Shannon 的資訊理論告訴我們,對信息的先驗知識越多,我們就可以把信息壓縮得越小。換句話說,如果壓縮演算法的設計目標不是任意的數據源,而是基本屬性已知的特種數據,壓縮的效果就會進一步提高。這提醒我們,在發展通用壓縮演算法之餘,還必須認真研究針對各種特殊數據的專用壓縮演算法。比方說,在今天的數碼生活中,遍布於數碼相機、數碼錄音筆、數碼隨身聽、數碼攝像機等各種數字設備中的圖像、音頻、視頻信息,就必須經過有效的壓縮才能在硬碟上存儲或是通過 USB 電纜傳輸。實際上,多媒體信息的壓縮一直是數據壓縮領域里的重要課題,其中的每一個分支都有可能主導未來的某個技術潮流,並為數碼產品、通信設備和應用軟體開發商帶來無限的商機。
讓我們先從圖像數據的壓縮講起。通常所說的圖像可以被分為二值圖像、灰度圖像、彩色圖像等不同的類型。每一類圖像的壓縮方法也不盡相同。
傳真技術的發明和廣泛使用促進了二值圖像壓縮演算法的飛速發展。 CCITT (國際電報電話咨詢委員會,是國際電信聯盟 ITU 下屬的一個機構)針對傳真類應用建立了一系列圖像壓縮標准,專用於壓縮和傳遞二值圖像。這些標准大致包括 20 世紀 70 年代後期的 CCITT Group 1 和 Group 2 , 1980 年的 CCITT Group 3 ,以及 1984 年的 CCITT Group 4 。為了適應不同類型的傳真圖像,這些標准所用的編碼方法包括了一維的 MH 編碼和二維的 MR 編碼,其中使用了行程編碼( RLE )和 Huffman 編碼等技術。今天,我們在辦公室或家裡收發傳真時,使用的大多是 CCITT Group 3 壓縮標准,一些基於數字網路的傳真設備和存放二值圖像的 TIFF 文件則使用了 CCITT Group 4 壓縮標准。 1993 年, CCITT 和 ISO (國際標准化組織)共同成立的二值圖像聯合專家組( Joint Bi-level Image Experts Group , JBIG )又將二值圖像的壓縮進一步發展為更加通用的 JBIG 標准。
實際上,對於二值圖像和非連續的灰度、彩色圖像而言,包括 LZ 系列演算法在內的許多通用壓縮演算法都能獲得很好的壓縮效果。例如,誕生於 1987 年的 GIF 圖像文件格式使用的是 LZW 壓縮演算法, 1995 年出現的 PNG 格式比 GIF 格式更加完善,它選擇了 LZ77 演算法的變體 zlib 來壓縮圖像數據。此外,利用前面提到過的 Huffman 編碼、算術編碼以及 PPM 模型,人們事實上已經構造出了許多行之有效的圖像壓縮演算法。
但是,對於生活中更加常見的,像素值在空間上連續變化的灰度或彩色圖像(比如數碼照片),通用壓縮演算法的優勢就不那麼明顯了。幸運的是,科學家們發現,如果在壓縮這一類圖像數據時允許改變一些不太重要的像素值,或者說允許損失一些精度(在壓縮通用數據時,我們絕不會容忍任何精度上的損失,但在壓縮和顯示一幅數碼照片時,如果一片樹林里某些樹葉的顏色稍微變深了一些,看照片的人通常是察覺不到的),我們就有可能在壓縮效果上獲得突破性的進展。這一思想在數據壓縮領域具有革命性的地位:通過在用戶的忍耐范圍內損失一些精度,我們可以把圖像(也包括音頻和視頻)壓縮到原大小的十分之一、百分之一甚至千分之一,這遠遠超出了通用壓縮演算法的能力極限。也許,這和生活中常說的「退一步海闊天空」的道理有異曲同工之妙吧。
這種允許精度損失的壓縮也被稱為有損壓縮。在圖像壓縮領域,著名的 JPEG 標準是有損壓縮演算法中的經典。 JPEG 標准由靜態圖像聯合專家組( Joint Photographic Experts Group , JPEG )於 1986 年開始制定, 1994 年後成為國際標准。 JPEG 以離散餘弦變換( DCT )為核心演算法,通過調整質量系數控制圖像的精度和大小。對於照片等連續變化的灰度或彩色圖像, JPEG 在保證圖像質量的前提下,一般可以將圖像壓縮到原大小的十分之一到二十分之一。如果不考慮圖像質量, JPEG 甚至可以將圖像壓縮到「無限小」。
JPEG 標準的最新進展是 1996 年開始制定, 2001 年正式成為國際標準的 JPEG 2000 。與 JPEG 相比, JPEG 2000 作了大幅改進,其中最重要的是用離散小波變換( DWT )替代了 JPEG 標准中的離散餘弦變換。在文件大小相同的情況下, JPEG 2000 壓縮的圖像比 JPEG 質量更高,精度損失更小。作為一個新標准, JPEG 2000 暫時還沒有得到廣泛的應用,不過包括數碼相機製造商在內的許多企業都對其應用前景表示樂觀, JPEG 2000 在圖像壓縮領域里大顯身手的那一天應該不會特別遙遠。
JPEG 標准中通過損失精度來換取壓縮效果的設計思想直接影響了視頻數據的壓縮技術。 CCITT 於 1988 年制定了電視電話和會議電視的 H.261 建議草案。 H.261 的基本思路是使用類似 JPEG 標準的演算法壓縮視頻流中的每一幀圖像,同時採用運動補償的幀間預測來消除視頻流在時間維度上的冗餘信息。在此基礎上, 1993 年, ISO 通過了動態圖像專家組( Moving Picture Experts Group , MPEG )提出的 MPEG-1 標准。 MPEG-1 可以對普通質量的視頻數據進行有效編碼。我們現在看到的大多數 VCD 影碟,就是使用 MPEG-1 標准來壓縮視頻數據的。
為了支持更清晰的視頻圖像,特別是支持數字電視等高端應用, ISO 於 1994 年提出了新的 MPEG-2 標准(相當於 CCITT 的 H.262 標准)。 MPEG-2 對圖像質量作了分級處理,可以適應普通電視節目、會議電視、高清晰數字電視等不同質量的視頻應用。在我們的生活中,可以提供高清晰畫面的 DVD 影碟所採用的正是 MPEG-2 標准。
Internet 的發展對視頻壓縮提出了更高的要求。在內容交互、對象編輯、隨機存取等新需求的刺激下, ISO 於 1999 年通過了 MPEG-4 標准(相當於 CCITT 的 H.263 和 H.263+ 標准)。 MPEG-4 標准擁有更高的壓縮比率,支持並發數據流的編碼、基於內容的交互操作、增強的時間域隨機存取、容錯、基於內容的尺度可變性等先進特性。 Internet 上新興的 DivX 和 XviD 文件格式就是採用 MPEG-4 標准來壓縮視頻數據的,它們可以用更小的存儲空間或通信帶寬提供與 DVD 不相上下的高清晰視頻,這使我們在 Internet 上發布或下載數字電影的夢想成為了現實。
就像視頻壓縮和電視產業的發展密不可分一樣,音頻數據的壓縮技術最早也是由無線電廣播、語音通信等領域里的技術人員發展起來的。這其中又以語音編碼和壓縮技術的研究最為活躍。自從 1939 年 H. Dudley 發明聲碼器以來,人們陸續發明了脈沖編碼調制( PCM )、線性預測( LPC )、矢量量化( VQ )、自適應變換編碼( ATC )、子帶編碼( SBC )等語音分析與處理技術。這些語音技術在採集語音特徵,獲取數字信號的同時,通常也可以起到降低信息冗餘度的作用。像圖像壓縮領域里的 JPEG 一樣,為獲得更高的編碼效率,大多數語音編碼技術都允許一定程度的精度損失。而且,為了更好地用二進制數據存儲或傳送語音信號,這些語音編碼技術在將語音信號轉換為數字信息之後又總會用 Huffman 編碼、算術編碼等通用壓縮演算法進一步減少數據流中的冗餘信息。
對於電腦和數字電器(如數碼錄音筆、數碼隨身聽)中存儲的普通音頻信息,我們最常使用的壓縮方法主要是 MPEG 系列中的音頻壓縮標准。例如, MPEG-1 標准提供了 Layer I 、 Layer II 和 Layer III 共三種可選的音頻壓縮標准, MPEG-2 又進一步引入了 AAC ( Advanced Audio Coding )音頻壓縮標准, MPEG-4 標准中的音頻部分則同時支持合成聲音編碼和自然聲音編碼等不同類型的應用。在這許多音頻壓縮標准中,聲名最為顯赫的恐怕要數 MPEG-1 Layer III ,也就是我們常說的 MP3 音頻壓縮標准了。從 MP3 播放器到 MP3 手機,從硬碟上堆積如山的 MP3 文件到 Internet 上版權糾紛不斷的 MP3 下載, MP3 早已超出了數據壓縮技術的范疇,而成了一種時尚文化的象徵了。
很顯然,在多媒體信息日益成為主流信息形態的數字化時代里,數據壓縮技術特別是專用於圖像、音頻、視頻的數據壓縮技術還有相當大的發展空間——畢竟,人們對信息數量和信息質量的追求是永無止境的。 從信息熵到算術編碼,從猶太人到 WinRAR ,從 JPEG 到 MP3 ,數據壓縮技術的發展史就像是一個寫滿了「創新」、「挑戰」、「突破」和「變革」的羊皮卷軸。也許,我們在這里不厭其煩地羅列年代、人物、標准和文獻,其目的只是要告訴大家,前人的成果只不過是後人有望超越的目標而已,誰知道在未來的幾年裡,還會出現幾個 Shannon ,幾個 Huffman 呢?
談到未來,我們還可以補充一些與數據壓縮技術的發展趨勢有關的話題。
1994年, M. Burrows 和 D. J. Wheeler 共同提出了一種全新的通用數據壓縮演算法。這種演算法的核心思想是對字元串輪轉後得到的字元矩陣進行排序和變換,類似的變換演算法被稱為 Burrows-Wheeler 變換,簡稱 BWT 。與 Ziv 和 Lempel 另闢蹊徑的做法如出一轍, Burrows 和 Wheeler 設計的 BWT 演算法與以往所有通用壓縮演算法的設計思路都迥然不同。如今, BWT 演算法在開放源碼的壓縮工具 bzip 中獲得了巨大的成功, bzip 對於文本文件的壓縮效果要遠好於使用 LZ 系列演算法的工具軟體。這至少可以表明,即便在日趨成熟的通用數據壓縮領域,只要能在思路和技術上不斷創新,我們仍然可以找到新的突破口。
分形壓縮技術是圖像壓縮領域近幾年來的一個熱點。這一技術起源於 B. Mandelbrot 於 1977 年創建的分形幾何學。 M. Barnsley 在 20 世紀 80 年代後期為分形壓縮奠定了理論基礎。從 20 世紀 90 年代開始, A. Jacquin 等人陸續提出了許多實驗性的分形壓縮演算法。今天,很多人相信,分形壓縮是圖像壓縮領域里最有潛力的一種技術體系,但也有很多人對此不屑一顧。無論其前景如何,分形壓縮技術的研究與發展都提示我們,在經過了幾十年的高速發展之後,也許,我們需要一種新的理論,或是幾種更有效的數學模型,以支撐和推動數據壓縮技術繼續向前躍進。
人工智慧是另一個可能對數據壓縮的未來產生重大影響的關鍵詞。既然 Shannon 認為,信息能否被壓縮以及能在多大程度上被壓縮與信息的不確定性有直接關系,假設人工智慧技術在某一天成熟起來,假設計算機可以像人一樣根據已知的少量上下文猜測後續的信息,那麼,將信息壓縮到原大小的萬分之一乃至十萬分之一,恐怕就不再是天方夜譚了。
回顧歷史之後,人們總喜歡暢想一下未來。但未來終究是未來,如果僅憑你我幾句話就可以理清未來的技術發展趨勢,那技術創新的工作豈不就索然無味了嗎?依我說,未來並不重要,重要的是,趕快到 Internet 上下載幾部大片,然後躺在沙發里,好好享受一下數據壓縮為我們帶來的無限快樂吧。
6. NGS數據比對之BWA
BWA 主要是將reads比對到大型基因組上,主要功能是:序列比對。首先為大型參考基因組建立索引,然後將reads比對到基因組。特點是快速、准確、省內存。由三種類似演算法組成:BWA-backtrack,BWA-SW和BWA-MEM。首推BWA-MEM。
BWA-backtrack:reads長度<70bp時,推薦本演算法,建議輸入reads長度 < 100bp。
BWA-SW:在reads具有頻繁的gap時,比對更敏感,推薦本演算法。reads長度一般為70bp-1Mbp,支持long-reads,split alignment。
BWA-MEM(首推):在reads長度在70bp-1Mbp范圍時,推薦本演算法(除了上面兩種情況)。支持long-reads,split alignment。
BWA使用說明 使用手冊
語法
bwa index ref.fa #首先建立基因組索引
bwa mem ref.fa reads.fq > aln-se.sam # 調用BWA-MEM
bwa mem ref.fa read1.fq read2.fq > aln-pe.sam # 調用BWA-MEM
bwa aln ref.fa short_read.fq > aln_sa.sai # 調用BWA-backtrack
bwa samse ref.fa aln_sa.sai short_read.fq > aln-se.sam # 調用BWA-backtrack
bwa sampe ref.fa aln_sa1.sai aln_sa2.sai read1.fq read2.fq > aln-pe.sam # 調用BWA-backtrack
bwa bwasw ref.fa long_read.fq > aln.sam # 調用BWA-SW
注意:BWA輸入的是fastq/fq的原始測序數據。
bwa的使用需要兩個 輸入文件 :
Reference genome data 和 Short reads data
根據reference genome data 建立 Index File
構建索引時需要注意的問題:bwa構建索引有三種演算法,三種演算法都是基於BWT的,這三種演算法通過參數
-a is 、-a div和-a bwtsw進行選擇。其中-a bwtsw對於短的參考序列是不工作的,必須要大於等於10Mb;-a is(效果和-a div是一樣的)是默認參數,這個參數不適用於大的參考序列,必須要小於等於2G。
需要參考基因組以及原始fastq文件,輸出sam文件格式
read包含:
FLAG欄位中的定義為:
BWA生成以下可選欄位。以「X」開頭的標簽是特定於BWA的。
使用bwa完成比對後,用samtools完成BAM格式轉換、排序並標記PCR重復序列。
例子:利用 SRR1770413 , 見WES數據處理之尋找突變GATK
以上為BWA比對流程,排序,標記等
7. 好壓 7z 哪個更好
7z好7z 是一種新的壓縮格式,它擁有目前較高的壓縮比。
支持格式:
壓縮及解壓縮:7z、ZIP、GZIP、BZIP2 和 TAR
僅解壓縮:RAR、CAB、ISO、ARJ、LZH、CHM、WIM、Z、CPIO、RPM、DEB 和 NSIS
對於 ZIP 及 GZIP 格式,7-Zip 能提供比使用 PKZip 及 WinZip 高 2-10% 的壓縮比
7z 格式支持創建自釋放(SFX)壓縮檔案
集成 Windows 外殼擴展
強大的的文件管理
強大的命令行版本
支持 FAR Manager 插件
支持 63 種語言 [編輯本段]主要特徵公開的結構編輯功能
最高的壓縮比
強大的 AES-256 加密
可更改和配置壓縮的演算法
最高支持 16000000000 GB 的文件壓縮
以 Unicode 為標準的文件名
支持固實壓縮
支持檔案的文件頭壓縮
7z 已公開了結構編輯功能,所以它可以支持任何一種新的壓縮演算法。到目前為止,下列壓縮演算法已被整合到了 7z 中: [編輯本段]壓縮演算法LZMA LZ77 改良和優化演算法後的最新版本
PPMD 基於 Dmitry Shkarin 之上的演算法 PPMdH 並加以優化
BCJ 32-位 x86 可執行文件轉換程序
BCJ2 32-位 x86 可執行文件轉換程序
BZip2 標准 BWT 演算法
Deflate 標准 LZ77-based 演算法 [編輯本段]LZMA 演算法LZMA 演算法是 7z 格式的默認標准演算法。 LZMA 演算法的主要特徵高壓縮比 可變字典大小(最大 4 GB)
壓縮速度:運行於 2 GHz 的處理器可達到 1 MB/秒
解壓縮速度:運行於 2 GHz 的處理器可達到 10-20 MB/秒
較小的解壓縮內存需求(依賴於字典大小)
較小的解壓縮代碼:約 5 KB 支持 Pentium 4 的多線程(Hyper-Threading)技術及多處理器 LZMA 壓縮演算法非常適於應用程序的內嵌。
LZMA SDK. 7z 是 7-Zip 發布於 GNU LGPL 的子程序。
其它支持 7z 格式的壓縮軟體:WinRAR、PowerArchiver、TUGZip、IZArc。 [編輯本段]7-zip官網7-Zip 官方首頁/7z下載
http://www.7-zip.org/
中文首頁
http://7z.sparanoid.com/來源 http://ke..com/view/915907.html?wtp=tt
8. 基於BWT演算法的比對軟體原理解析(BWA & Bowtie & Bowtie2)
參考:
踏踏實實做技術:BWA,Bowtie,Bowtie2的比對演算法推導
remove multiple mapping reads的方法
CHIP-seq: Bowtie2、BWA用的比較多
RNA-seq: Tophat、Bsmap
甲基化:BS-seeker
global---NW
local--SW
好處是能夠窮舉出所有的比對情況,所以可以選擇全局最優的結果;最大的缺點是比對的非常慢。
BWT(Burrows-Wheeler Transform )
第一步,在raw seq中加$符號,並平移,形成一個 raw matrix
第二步,根據Raw Matrix的首字母進行排序,得到轉換矩陣Matrix』,默認$符號排在第一位,
所以最後只用保存L列和每個字母的相對位置就可以了,根據L列和每個字母的相對位置可以干兩件事情:
例如:第一個是L- 對應F- 的前一個是G,L-G對應F-G;F-G的前一個是L-C,依次類推,得到原來的ref:ACAACG$
14bp(high quality)---14bp(low quality of high quality)--8bp(real low quality)
分成三斷seed,seed1+seed2比對總共的mismatch <= 2,則繼續8bp的比對;如果 > 2 直接放棄後面的比對;
第一步,選擇seed區域;
20裡面選18---
(18+2)+(18+2)+(18+2)+...+(18+2)
保證一個fragment是20,seed 是18bp
或者,10裡面選16--
fragment = 16,overlap = 6,
那麼根據BWT演算法,就把拆分的seed mapping到基因組的大概位置;
然後把基因組可能mapping上的那段區域挑出來,和query seq做比對(用NW或者SW演算法),因為query seq NW和SW允許gap open
9. 有哪些經典的演算法或者輕量應用適合並行化
反對,不會顯示你的姓名
知乎用戶 計算機博士生,做生物信息
6 人贊同
挖個坑,說幾個生物信息領域的經典演算法吧。 1. Smith-Waterman 和 Needleman-Wunsch,倆生物信息最經典的動態規劃演算法, 並行演算法的論文不知道發了多少篇了,Xeon,Xeon Phi, CUDA,SIMD的,一般並行先從這個演算法開始講 2. 基因組拼接的演算法 de brijin Gra… 顯示全部
挖個坑,說幾個生物信息領域的經典演算法吧。
1. Smith-Waterman 和 Needleman-Wunsch,倆生物信息最經典的動態規劃演算法, 並行演算法的論文不知道發了多少篇了,Xeon,Xeon Phi, CUDA,SIMD的,一般並行先從這個演算法開始講
2. 基因組拼接的演算法 de brijin Graph 的構建和查詢的並行演算法
3. 序列比對,BWT 構建的並行演算法
以後慢慢補充
最後來一發,之前給物理學裡面的QMC演算法(一種MCMC演算法,用來計算分子結構的)做Xeon Phi上並行的優化,題主有興趣可以看看,已經有現成的軟體包QMCPACK,可以支持Xeon和GPU並行了。
10. 比對演算法總結(二)——基於BWT索引結構的比對演算法-Bowite1
這是美國馬里蘭大學計算機研究所、生物信息學和計算生物學中心於2009年發表在《Genome Biology》雜志的一篇經典文章,至此以後依賴於BWT索引的比對演算法成為主流。 Bowite 是一款超快速、內存佔用低的短序列比對軟體,適用於將短reads比對至大型參考基因組。採用Burrows-Wheeler 演算法建立索引的Bowite軟體可以在1 CPU時內,將2000萬條reads 比對至人參考基因組,且內存只佔有1.3Gb。於此同時Bowite 採用了新的quality-aware backtracking(質量回溯)演算法,比對過程允許錯配。
在此之前都是採用對reads (SHRiMP, Maq, RMAP,ZOOM) 或者參考基因組 (SOAP)構建哈希表的演算法進行序列比對,該演算法已在上篇文章中進行了介紹 https://www.jianshu.com/p/f5ccff73b181 。
Bowite 採用了一種完全新的索引構建策略,適用於哺乳動物重測序。根據千人基因組計劃數據,Bowite 在35bp PE 序列上的比對速度要比Maq 軟體快35 倍,比SOAP軟體快300倍。Bowite 採用 Burrows-Wheeler 演算法對 full-text minute-space (FM) 構建索引,人參考基因組佔用的內存為1.3 GB。
為了追求速度,Bowite 針對哺乳動物重測序項目進行了很多合理的折中。例如,如果一條reads有多條最優匹配,Bowite 只會輸出一條最優匹配。當輸出的最優匹配也不是完全匹配時,Bowite並不能保證在所有情況下都能輸出最高質量的匹配。在設定了較高的匹配閾值時,一小部分含有多個錯配的reads可能會比對失敗。在默認參數條件下,Bowite 的靈敏度與SOAP 相當,略低於Maq。可以在命令行手動改變參數,在犧牲更多時間的情況下,增加靈敏度,給出reads所有可能的比對結果。目前Bowite 比對的reads長度范圍為4bp - 1024bp。
Bowite 對參考基因組建立索引的方法是 Burrows-Wheeler transform (BWT) 和 FM index。Bowite 建立的人類基因組索引在硬碟上的大小為2.2GB,在比對時的內存為1.3GB。FM index 常用的精確查找方法為 Ferragina 和 Manzini 演算法。Bowite 沒有完全使用該演算法,因為該演算法不允許錯配,不能比對含有測序錯誤和變異的reads。針對這種情況,Bowite引入了新的擴展演算法:quality-aware backtracking 演算法,允許錯配並支持高質量比對;double indexing 策略,避免過度回溯;Bowite比對策略與Maq軟體相似,允許小部分的高質量reads 含有錯配,並且對所有的錯配位點的質量值設置了上限閾值。
BWT 轉換是字元串的可逆性排列,它最早應用於文本數據的壓縮,依賴BWT建立的索引,可以在較低內存下,實現大型文本的有效搜索。它被在生物信息學中有廣泛的應用,包括重復區域計數、全基因組比對、微陣列探針設計、Smith-Waterman 比對到人參考基因組。Burrows-Wheeler transform (BWT) 的轉換步驟如圖1所示:
1、輪轉排序。如圖1a 所示,(1)將字元$ 添加到文本 T (acaacg)的末尾,但需注意其中字元$ 並未實際添加到文本 T 中,且其在字母表中邏輯順序小於 T 中所有出現過的字元。(2) 然後將當前字元串的第一個字元移到最後一位,形成一個新的字元串,再將新的字元串的第一位移到最後一位形成另一個新的字元串,就這樣不斷循環這個過程,直到字元串循環完畢(即$處於第一位),這樣就形成了一個基於原字元串的字元矩陣M(這一步原圖1a 進行了省略,見下方小圖)。(3) 然後對矩陣M的各行字元按照字典先後順序排序,獲得排序後的字元矩陣 BWM(T),矩陣的最後一列定義為 BWT(T)。 前期經過一個小復雜的過程獲得了BWT(T)列,那這一列到底有什麼用呢?其實BWT(T)列通過簡單的演算法就可以推算出原始文本T的所有信息。而經過轉換之後的BWT(T)列大量重復字元是靠近的,只儲存該列信息,可以大大提高字元壓縮比例。
2、LF-Mapping。圖1a 轉換矩陣 BWM(T)含有一種 'last first (LF) mapping' 的特性,即最後一列L中出現某字元出現的順序與第一列F某字元出現的次序時一致的。根據Supplementary1 圖中演算法1 STEPLEFT 和 演算法2 UNPERMUTE 就可以推算出BWT(T)到 T 的過程, 圖1 b記錄了整個推算過程。 詳細推算過程可參考這個博客介紹: https://blog.csdn.net/stormlovetao/article/details/7048481 。
3、reads精確匹配。使用BWT演算法的最終目的是要將短reads比對到參考基因組上,確定短reads在參考基因組上的具體位置。轉換後的BWT(T)序列,可以利用Supplementary1 圖中演算法3 EXACTMATCH 實現reads的精確匹配。圖1c 列出了 字元串 aac 比對至acaacg 的過程 。 詳細推算過程可參考這篇介紹: https://zhuanlan.hu.com/p/158901556 。
上述的BWT轉換只能用於精確的匹配,但是測序reads是含有測序錯誤和突變的,精確匹配並不適用。這里應用了 backtracking 搜索的演算法,用於允許錯配快速比對 。含有錯配的reads只是一小部分。測序reads的每個鹼基都含有唯一的測序量值,測序質量值越該位點是測序錯誤的可能越大,只有當一條read 的所有錯配的測序質量值總和小於一定閾值時可以允許錯誤匹配。
圖2顯示了精確匹配和非精確匹配的過程,backtracking 搜索過程類似於 EXACTMATCH ,首先計算連續較長的後綴矩陣。如果矩陣中沒有搜索到相應的reads,則演算法會選擇一個已經匹配的查詢位置,替換一個不同鹼基,再次進行匹配。EXACTMATCH搜索從被替換位置之後開始,這樣就可以比對就可以允許一定的錯配。backtracking 過程發生在堆棧結構的上下文中,當有替換產生時,堆棧的結構會增長;當所有結果都不匹配時,堆棧結構會收縮。
Bowite 軟體的搜索演算法是比較貪婪的,Bowite軟體會報出遇到的第一個有效比對,並不一定是在錯配數目和變異質量上的「最佳比對」。沒有查詢最優比對的原因是尋找「最佳比對」會比現有的模型慢2-3倍。而在重測序項目上,速度是更重要的因素。Bowite 也設置了可以輸出多個比對位置(-k)和所有比對位置(-a)的參數,添加這些參數後,比對速度會顯著變慢。
目前的比對軟體會有過度回溯的情況,在reads的3『端花費大量無用時間去回溯。Bowite利用『double indexing』技術減少了過度回溯的發生。簡單來說就是對正向參考基因組進行BWT轉換,稱為 『Forward index』,同時對反向(注意不是互補配對序列,是反向序列)參考基因組也進行BWT轉換,稱為『Mirror index』。 當只允許一個錯配時,比對根據reads是前半段出現錯配,還是後半段出現錯配會有兩種情況:(1)Phase1 將Forward index 載入入內存,不允許查詢reads右半段出現錯配;(2)Phase2 將Mirror index 載入如內存,不允許查詢序列的反向reads右半段(原查詢序列的左半端) 出現錯配。這樣可以避免過度回溯,提高比比對的靈敏度。 但是,如果比對軟體允許一個reads有多個錯配時,仍然會有過度回溯的現象發生,為了減少過度回溯現象的發生,這里將回溯的上限進行了限定(默認值為:125次)。
Bowite 允許使用者在高質量reads的末端(默認是28bp)設置錯配數目(默認的錯配數目是2)。高質量reads末端的28bp序列被稱為 '種子' 序列。這個『種子』序列又可分為兩等份:14bp的高質量末端稱為 『hi-half』(通常位於5『端),14bp的低質量末端稱為『lo-half』。 如果種子序列只允許2bp 的錯配,比對會出現4 種情況:(1)種子序列中沒有錯配(case1);(2)hi-half區域沒有錯配,lo-half區域有一個或兩個錯配(case2);(3)lo-half區域沒有錯配,hi-half區域有一個或兩個錯配(case3);(4)lo-half區域有一個錯配,hi-half區域有一個錯配(case4);
在所有情況下,reads的非種子部分允許任意數目的錯配。如圖3所示,Bowite 演算法會根據上面4 種情況交替變化『Forward index』和『Mirror index』比對策略,主要會有三種比對策略。
Bowite 建立一次參考基因組索引後,後續的比對可反復使用該索引。表1和表2列出了在默認參數條件下,Bowite、SOAP、Maq軟體性能的比較。在reads比對率相近的條件下,Bowite軟體的比對速度速度相對於SOAP、Maq軟體有較大的提升。
1、將reads 比對至人參考基因組上,Bowite相對於SOAP和Maq軟體有較大的優勢。它運行的內存非常小(1.2GB),在相同靈敏度下,速度有了較大的提升。
2、Bowite 軟體建立一次參考基因組索引後,後續的比對可反復使用該索引。
3、Bowite 速度快、內存佔用小、靈敏度高主要是因為使用了BWT演算法構建索引、利用回溯演算法允許錯配、採用Double index策略避免過度回溯。
4、Bowite 軟體目前並不支持插入、缺失比對,這個是今後需要努力的方向。
[1] Langmead B . Ultrafast and memory-efficient alignment of short DNA sequences to the human genome[J]. Genome biology, 2009, 10(3):R25.
[2] BWT 推算過程參考博客 https://blog.csdn.net/stormlovetao/article/details/7048481
[3] FM index 精確查匹配過程參考文章 https://zhuanlan.hu.com/p/158901556