演算法步驟序列
Ⅰ 演算法步驟
上述演算法的流程如圖4-1所示。
演算法從尋找初始可行解開始。通常的做法是,它對應於從鬆弛變數列形成的基底。如果沒有初始可行解存在,則演算法在第二步停止。
圖4-1 菲力浦的多目標單純形法計算框圖
如果存在一個可行基底。便置計數器b和c分別為1和0。計數器b標識各個基底,計數器c標識對應於非劣勢解的基底,在第三步中計算與初始基底對應的解。在第四步中,通過解非劣勢性子問題來檢查可行解的非劣勢性。
演算法在第四、五、六步中進行循環,直到發現一個非劣勢解。發現後,把這個非劣勢解在第七步中列印出來。
為了檢查另外的非劣勢解,在第八步中求解方向子問題。如果沒有合適的(sk)min=0,那麼,不存在別的非劣勢解,演算法停止。但是,如果第九步確定了一個(sk)min=0,且第十步指出對應的xk將引導到一個未探索過的基底,則對應的xk進入基底,轉到第七步去列印出這個另外的非劣勢解。演算法將繼續在第七、八、九、十、十一、七步之間進行循環,直到出現沒有對應的xk導致未探索基底時為止。
為了進一步理解菲力浦的多目標單純形法求解的有關步驟,我們考慮上一節中的例子並添加鬆弛變數來產生初始多目標單純形表。
極大優勢
華北煤田排水供水環保結合優化管理
其中,
華北煤田排水供水環保結合優化管理
滿足於約束條件
華北煤田排水供水環保結合優化管理
初始基本可行解在表4-2中列出,初始基底是根據與鬆弛變數x3、x4、x5相關的列來形成的。從而,演算法的第一、二、三步是滿足的。
表4-2 初始基本可行解表
接下來,演算法確定x1=x2=0是否為非劣勢解點。這由解非劣勢性子問題來進行。要解這個非劣勢性子問題,需要確定(uT+eT)D。矩陣D對應於目標函數行中的非基本列,就是
華北煤田排水供水環保結合優化管理
對於x1=x2=0要是非劣勢的,必須存在一個權數集wi=ui+1,使得
華北煤田排水供水環保結合優化管理
或
華北煤田排水供水環保結合優化管理
或
華北煤田排水供水環保結合優化管理
減去剩餘變數s1,s2,添加人工變數y1,y2,產生所需要的第一演算階段單純形問題:
華北煤田排水供水環保結合優化管理
滿足於約束條件
華北煤田排水供水環保結合優化管理
對此非劣勢性子問題的初始表如表4-3所示。
表4-3 非劣勢性子問題的初始表
把第三行加到第一行上,產生初始可行解,如表4-4所示。
表4-4 初始可行解
根據單純形法則,u2進入基底,旋轉主元是第三行框起來的數2。變換後得表4-5。
表4-5 非劣勢解表
此時ymin=0,s1=7/2,u2=1/2,u1=s2=y1=y2=0,於是點x1=x2=0是非劣勢解。
我們也注意到,表4-5表明存在正的權數w1=u1+1=1,w2=u2+1=3/2,解x1=x2=0也是下面問題的最優解。這個問題是:
華北煤田排水供水環保結合優化管理
滿足於
華北煤田排水供水環保結合優化管理
因此,可以這樣說,菲力浦演算法允許我們「朝後」應用加權方法:對於一個非劣勢解x,確定出一組權數w,它們是在加權方法中用來得出這個非劣勢解x所需要的權數。
接下來求解方向子問題,以確定是否存在另外的非劣勢解。從表4-5,我們能夠看到,有s2=0。於是,如果引入x2將導致一個未探索過的基底,則存在另一個非劣勢解點。從表4-2,對x2的旋轉主元是第五行中的數字5,這表明新的基底將是x2、x3和x4,它還沒有被探索過。
顯然沒有必要,因為已經確定了將導致另一個非劣勢解的xk,但我們現在也能夠確定引入x1是否會導致一個非劣勢解。這可以通過解下面的方向子問題來進行。這個方向子問題是:
華北煤田排水供水環保結合優化管理
滿足於
華北煤田排水供水環保結合優化管理
在第一演算階段以後(表4-5),得到如下的方向子問題,表4-6所示。
表4-6 方向子問題表
把第2行加到第一行上,產生了表4-7。
表4-7 最優解表
表4-7是最優的,它指出s1=7/2>0,因此引入x1將導致一個有劣勢解。
我們現在引入x2。以表4-2第五行的元素為主元進行旋轉,得到主問題的第二個表,如表4-8所示,從而,x1=0,x2=72/5是一個非劣勢解,把它列印出來。
表4-8 主問題二表
為了檢查是否存在別的非劣勢解,現在必須重新求解方向子問題。要這樣做,必須又一次計算(uT+eT)D,其中的矩陣D此時為
華北煤田排水供水環保結合優化管理
於是,
華北煤田排水供水環保結合優化管理
由此,方向子問題的合適的約束集為
華北煤田排水供水環保結合優化管理
關於目標函數,可以為s1和s5。然而,在前面我們是用x2驅趕x5而得到目前的非劣勢解點,因此,易知有s5=0,且把x5帶入基底會產生出前面的非劣勢解點。從而,僅需對s1檢查方向子問題,就是,
華北煤田排水供水環保結合優化管理
滿足於
華北煤田排水供水環保結合優化管理
用表的形式,見表4-9。
表4-9 方向子問題表
把表4-9的第2行加到第1行上,得表4-10。對表4-10以第2行第二列元素為主元進行旋轉,得到最優的表4-11。從表4-11可以看出,s1=0,這表示此時把x1引入基底將產生另一個非劣勢解點。從表4-3可明顯看出,旋轉主元是4/25,將把x4驅趕出基底。這導致又一個未探索過的基底(x1,x2和x3)和第三個非劣勢解點。以4/25為主元旋轉,得到下面表4-12中的解:非劣勢點x1=7,x2=13。
表4-10 方向子問題過渡表
表4-11 最優解表
表4-12 非劣勢解表
繼續與前面同樣的過程,即求解與表4-12相關的方向子問題,得到s4=0和s5=9/2。引入s4將把x1從基底中驅趕出去並返回到先前的非劣勢解。引入x5將把x2從基底中驅趕出去將得到一個有劣勢解。這樣,演算法停止[134]。
Ⅱ 常見的幾種排序演算法總結
對於非科班生的我來說,演算法似乎對我來說是個難點,查閱了一些資料,趁此來了解一下幾種排序演算法。
首先了解一下,什麼是程序
關於排序演算法通常我們所說的往往指的是內部排序演算法,即數據記錄在內存中進行排序。
排序演算法大體可分為兩種:
一種是比較排序,時間復雜度O(nlogn) ~ O(n^2),主要有:冒泡排序,選擇排序,插入排序,歸並排序,堆排序,快速排序等。
另一種是非比較排序,時間復雜度可以達到O(n),主要有:計數排序,基數排序,桶排序等
冒泡排序它重復地走訪過要排序的元素,一次比較相鄰兩個元素,如果他們的順序錯誤就把他們調換過來,直到沒有元素再需要交換,排序完成。這個演算法的名字由來是因為越小(或越大)的元素會經由交換慢慢「浮」到數列的頂端。
選擇排序類似於冒泡排序,只不過選擇排序是首先在未排序的序列中找到最小值(最大值),放到序列的起始位置,然後再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾,以此類推,直到所有元素均排序完畢。
插入排序比冒泡排序和選擇排序更有效率,插入排序類似於生活中抓撲克牌來。
插入排序具體演算法描述,以數組[3, 2, 4, 5, 1]為例。
前面三種排序演算法只有教學價值,因為效率低,很少實際使用。歸並排序(Merge sort)則是一種被廣泛使用的排序方法。
它的基本思想是,將兩個已經排序的數組合並,要比從頭開始排序所有元素來得快。因此,可以將數組拆開,分成n個只有一個元素的數組,然後不斷地兩兩合並,直到全部排序完成。
以對數組[3, 2, 4, 5, 1] 進行從小到大排序為例,步驟如下:
有了merge函數,就可以對任意數組排序了。基本方法是將數組不斷地拆成兩半,直到每一半隻包含零個元素或一個元素為止,然後就用merge函數,將拆成兩半的數組不斷合並,直到合並成一整個排序完成的數組。
快速排序(quick sort)是公認最快的排序演算法之一,有著廣泛的應用。
快速排序演算法步驟
參考:
常用排序演算法總結(一)
阮一峰-演算法總結
Ⅲ 序列模式的序列挖掘演算法步驟
1) 排序階段。資料庫D以客戶號為主鍵交易時間為次鍵進行排序。這個階段將原來的事務資料庫轉換成由客戶序列組成的資料庫。
2) 頻繁項集階段。找出所有頻繁項集組成的集合L。也同步得到所有頻繁1-序列組成的集合。
3) 轉換階段。在找序列模式的過程中要不斷地進行檢測一個給定的頻繁集是否包含於一個客戶序列中。
4) 序列階段利用已知的頻繁集的集合來找到所需的序列。類似於關聯的Apriori演算法。 AprioriAll演算法與Apriori演算法的執行過程是一樣的,不同點在於候選集的產生,具體候選者的產生如下:
候選集生成的時候需要區分最後兩個元素的前後,因此就有<p.item1,p.item2,…,p.,q.>和<p.item1,p.item2,…, q.,p.>兩個元素。 AprioriSome演算法可以看做是AprioriAll演算法的改進,具體可以分為兩個階段:
(1)Forward階段:找出置頂長度的所有大序列,在產生Li後,根據判斷函數j=next(last),此時last=i,j>i,下個階段不產生i+1的候選項,而是產生j的候選項,如果j=i+1,那麼就根據Li生成Cj,如果j>i+1,那麼Cj就有Cj-1產生。然後掃描資料庫計算Cj的支持度。
(2)Backward階段:根據Lj中的大項集,去掉Ci(i<j)中出現的Lj項,然後計算Ci中的支持度,判斷那些在Forward階段被漏判的項集。
AprioriAll演算法和AprioriSome演算法的比較:
(1)AprioriAll用去計算出所有的候選Ck,而AprioriSome會直接用去計算所有的候選,因為包含,所以AprioriSome會產生比較多的候選。
(2)雖然AprioriSome跳躍式計算候選,但因為它所產生的候選比較多,可能在回溯階段前就占滿內存。
(3)如果內存占滿了,AprioriSome就會被迫去計算最後一組的候選。
(4)對於較低的支持度,有較長的大序列,AprioriSome演算法要好些。 GSP(Generalized Sequential Patterns)演算法,類似於Apriori演算法大體分為候選集產生、候選集計數以及擴展分類三個階段。與AprioriAll演算法相比,GSP演算法統計較少的候選集,並且在數據轉換過程中不需要事先計算頻繁集。
GSP的計算步驟與Apriori類似,但是主要不同在於產生候選序列模式,GSP產生候選序列模式可以分成如下兩個步驟:
(1)連接階段:如果去掉序列模式S1的第一個項目與去掉序列模式S2的最後一個項目所得到的序列相同,則可以將S1和S2進行連接,即將S2的最後一個項目添加到S1中去。
(2)剪枝階段:若某候選序列模式的某個子集不是序列模式,則此候選序列模式不可能是序列模式,將它從候選序列模式中刪除。
Ⅳ 序列比對的演算法過程
實際操作中利用計算機程序實現序列比對的基本演算法。序列比對不僅需要考慮子序列之間的匹配,而且需要對整個序列進行比較。也就是說,必須考慮兩個序列中所有殘基的匹配。這就意味著,不可能使所有殘基都能嚴格匹配。在這種情況下,序列比對中確定空位的過程變得十分復雜。
在進行序列兩兩比對時,有兩方面問題直接影響相似性分值:取代矩陣和空位罰分。 空位罰分是為了補償插入和缺失對序列相似性的影響,由於沒有什麼合適的理論模型能很好地描述空位 問題,因此空位罰分缺乏理論依據而更多的帶有主觀特色。一般的處理方法是用兩個罰分值,一個對插入的第一個空位罰分,如10-15;另一個對空位的延伸罰分,如1-2。對於具體的比對問題,採用不同的罰分方法會取得不同的效果。
對於比對計算產生的分值,到底多大才能說明兩個序列是同源的,對此有統計學方法加以說明,主要的思想是把具有相同長度的隨機序列進行比對,把分值與最初的比對分值相比,看看比對結果是否具有顯著性。相關的參數E代表隨機比對分值不低於實際比對分值的概率。對於嚴格的比對,必須E值低於一定閾值才能說明比對的結果具有足夠的統計學顯著性,這樣就排除了由於偶然的因素產生高比對得分的可能。
Ⅳ 基因組序列比對演算法介紹(一)
基因組重測序中序列比對介紹
重測序基因組數據比對,是指將測序儀下機fastq數據(NGS read序列,通常100-150bp),與人類參考基因組(reference)進行匹配,允許錯配(mismatch),插入缺失(indel),目的是在參考基因組找到序列最相似的位置,通常是基因組分析(包括 variation calling,ChIP-seq,RNA-seq,BS-seq)流程的第一步。
常用演算法
圖一
漢明距離(Hamming distance)表示兩個(相同長度)字對應位置不同的數量,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字元串進行異或運算,並統計結果為1的個數,那麼這個數就是漢明距離。圖中read1最佳位置的方法,就是通過查找最小漢明距離的實現的。
編輯距離(Edit distance)是針對二個字元串(例如英文字)的差異程度的量化量測,量測方式是看至少需要多少次的處理才能將一個字元串變成另一個字元串。圖中read3最佳位置,通過查找最我輯距離的方法實現。
圖二
全局比對(Global alignment):全局比對是指將參與比對的兩條序列裡面的所有字元進行比對。全局比對在全局范圍內對兩條序列進行比對打分,找出最佳比對,主要被用來尋找關系密切的序列。其可以用來鑒別或證明新序列與已知序列家族的同源性,是進行分子進化分析的重要前提。其代表是Needleman-Wunsch演算法。圖一中,read3使用全部比對。
局部比對(Local alignment):與全局比對不同,局部比對不必對兩個完整的序列進行比對,而是在每個序列中使用某些局部區域片段進行比對。其產生的需求在於、人們發現有的蛋白序列雖然在序列整體上表現出較大的差異性,但是在某些局部區域能獨立的發揮相同的功能,序列相當保守。這時候依靠全局比對明顯不能得到這些局部相似序列的。其次,在真核生物的基因中,內含子片段表現出了極大變異性,外顯子區域卻較為保守,這時候全局比對表現出了其局限性,無法找出這些局部相似性序列。其代表是Smith-Waterman局部比對演算法。圖一中,read2使用局部比對。
圖三
Smith-Waterman演算法介紹
Smith-Waterman是由Temple F. Smith和Michael S. Waterman於1981年提出的一種進行局部序列比對(相對於全局比對)的演算法,用於找出兩個核苷酸序列或蛋白質序列之間的相似區域。該演算法的目的不是進行全序列的比對,而是找出兩個序列中具有高相似度的片段。S-W演算法基於動態規劃,它接受任意長度、任意位置、任意序列的對齊,並確定是否能找到最優的比對。
簡單地說就是,動態規劃找到問題中較小部分的解,然後把它們放在一起,形成整個問題的一個完整的最優最終解。
它優於BLAST和FASTA演算法,因為它搜索了更大的可能性,具有更高的敏感性。
S-W演算法不是一次查看整個序列,而是對多個長度的片段進行比較,尋找能夠最大化得分的片段。演算法本身本質上是遞歸的:
圖四
演算法步驟如下:
基因組分析***** 微信 公眾號推出 《50篇文章深入理解NGS》系列文章, 第三篇文章 《基因組序列比對演算法介紹(一)》,爭取每周更新一篇高質量生信干貨帖子。
關注 "基因組分析" 微信公眾號,了解最新最全生信分析知識。