• 沒有找到結果。

中 華 大 學

N/A
N/A
Protected

Academic year: 2022

Share "中 華 大 學"

Copied!
68
0
0

加載中.... (立即查看全文)

全文

(1)

碩 士 論 文

基因重組字首反轉排序之啟發式演算法 A Heuristic Algorithm for Sorting by Prefix

Reversals on Genome Rearrangement

系 所 別:生物資訊學系碩士班 學號姓名:M09720004 張正佳 指導教授:吳哲賢 博士

中 華 民 國 九十九 年 八 月

(2)

中文摘要

基因重組問題為給定兩個不同物種,擁有相同基因卻有不同的基因排列順 序,研究如何經由反轉排序彼此轉換。其中字首反轉排序問題是生物資訊學近來 被廣泛研究的主題,目的為利用字首反轉方式,找出最少反轉次數。目前相關研 究,在基因序列長度 17 以下已找出最佳解,但長度 18 以上最佳解仍未知。

目前已被提出的啟發式演算法主要有兩個: Gates 及 Papadimitriou 演算法,

以及 Fischer 及

Ginzinger

演算法。本論文針對此問題,提出一個有效率地啟發式 演算法。實驗結果說明我們所提出的演算法,在長度 17 以下,最少反轉次數接 近最佳解;長度 18 以上,最少反轉次數明顯優於上述兩個主要啟發式演算法。

關鍵字:基因重組、字首反轉排序、啟發式演算法

(3)

ABSTRACT

Genome rearrangement problem is given two distinct objects with same genomes but different ordering to transfer each other. Sorting by prefix reversals is widely studied topic for bioinformatics, the goal is to find the minimum number of prefix reversals. Until now, relational researches derive optimal solutions while the lengths of genome sequence are under 17, but optimal solutions are still open while above 18.

Now, there are two major heuristic algorithms are proposed: one is Gates &

Papadimitriou algorithm, the other is Fischer &

Ginzinger

algorithm. In this thesis, we propose one efficient algorithm. Experimental results show that: while the lengths are under 17, our results are almost the same as optimal solutions; while above 18, the number of prefix reversals are clear better than the above two algorithms.

Keywords: Genome Rearrangement, Sorting by Prefix Reversals, Heuristic Algorithm

(4)

誌 謝

本篇論文能夠在二年之內順利的完成,必須感謝最重要的恩師 吳哲賢教 授。由於老師您的不厭其煩反覆教導我與兩年來辛苦指導,讓我在論文的研究方 面能夠得到明確的解決方法。在我遇到困挫與遭遇難關的時候能夠適時的給予我 適當的幫助與教導。尤其是在家裡中出現問題時,老師您還給予我鼓勵和勉勵並 且騰出更多時間讓我能順利完成本篇論文。

接著要感謝我的家人,常打電話來關心我,錢夠不夠用,雖然每次都叫我花 費少一點,但是你們還是努力的讓我吃好、穿好、也睡好。我能夠很深刻的體會 到你們的工作辛勞,每天都要頂著大太陽工作,等我畢業賺錢,換我來照顧你們。

家裡就剩下我還在念書,如今用這篇論文的完成來報答你們這兩年來對我所付出 的一切,謝謝你們,祝福你們身體健康,事事都很順利。

(5)

目 錄

第一章 導論 ...1

1.1 基因重組... 2

1.2 基因反轉... 5

1.3 字首反轉... 10

1.4 研究動機與目的... 13

1.5 章節綱要... 14

第二章 GATES及PAPADIMITRIOUU演算法 ...15

2.1 符號定義... 16

2.2 啟發式演算法... 18

2.3 執行結果... 24

第三章 FISCHER 及GINZINGER演算法...26

3.1 符號定義... 27

3.2 啟發式演算法... 28

3.3 執行結果... 34

第四章 我們的演算法 ...36

4.1 符號定義... 37

4.2 啟發式演算法... 38

4.3 執行結果... 43

4.4 三個演算法比較分析... 45

4.5 演算法最佳解之上限值...52

第五章 結論 ...54

(6)

5.1 研究成果... 55 5.2 未來研究方向... 56 參考文獻 ...57

(7)

圖目錄

圖 1.1 : GENOME REARRANGEMENT 的型態...2

圖 1.2 : 人類染色體 ...3

圖 1.3 : 基因組序列 ...4

圖 1.4 : 甘藍菜(CABBAGE)和蕪菁(TURNIP) ...5

圖 1.5 : CABBAGE基因組反轉排序成TURNIP基因組...6

圖 1.6 : 有向反轉排序之基因重組 ...7

圖 1.7 : MOUSE 反轉成 HUMAN基因序列示意圖 ...8

圖 1.8 : 無向反轉排序之基因重組 ...8

圖 1.9 : 字首反轉排序之基因重組 ... 11

圖 1.10 : 無向字首反轉排序 ...12

圖 2.1 : 斷點和相鄰點示意圖 ...16

圖 2.2 : GATES及PAPADIMITRIOU演算法舉例 ...22

圖 2.3 : 環狀結構之字首反轉排序 ...23

圖 2.4 : GATES及PAPADIMITRIOU演算法之字首反轉排序 ...25

圖 3.1 : 斷點和目標線構成之斷點圖 ...27

圖 3.2 : 斷點與目標線之四種情況 ...28

圖 3.3 : FISCHER及GINZINGER演算法之三種情況範例 ...31

圖 3.4 : FISCHER及GINZINGER演算法之獨特循環結構 ...32

圖 3.5 : 獨特循環結構之字首反轉排序 ...33

(8)

圖 3.6 : FISCHER及GINZINGER演算法之字首反轉排序 ...35

圖 4.1 : 我們的演算法舉例 ...42

圖 4.2 : 我們的演算法之字首反轉排序 ...44

圖 4.3 : 序列長度為 20、50、100 之亂數排列 ...47

圖 4.4 : 序列長度為 20、50、100 之亂數獨立字元排列 ...48

圖 4.5 : 序列長度為 100、200、500、1000 亂數排列 ...49

圖 4.6 : 序列長度為 100、200、500、1000 亂數獨立字元排列 ...50

(9)

表目錄

表 2.1 : GATES及PAPADIMITRIOU演算法之九大情況條件 ...20

表 4.1 : 我們的演算法之四大條件情況 ...40

表 4.2 : 三種演算法與最佳解之比較表 ...46

表 4.3 : 三種演算法平均反轉次數之比較表 ...50

表 4.4 : 演算法之執行時間 ...51

(10)

第一章 導論

生物的演化過程是以基因重組(Genome rearrangements)[2,19]、基因突變、

遺傳變異為基礎,改變其基因序列順序,導致物種發生變異。Dobzhansky 和 Sturtevant[22]兩位學者於 1936 年,首先在分子生物上研究分析基因重組問題,

該論文對果蠅分析其物種之基因重組。其中基因重組為針對具有相同基因組之兩 種不同物種,利用反轉方式進行演化過程。目前相關研究,區分為有方向性之反 轉和無方向性之反轉排序,針對方向性之反轉排序最少反轉次數問題[16],

Hannenhalli 和 Pevzner [12-13] 於 1995 年,提出時間複雜度 O(n4)之最佳解演算 法。無方向性之反轉排序最少反轉次數問題,Caprara[5]於 1997 年,首度證明反 轉排序最少反轉次數問題為 NP-hard。

基因重組之字首反轉排序問題(Sorting by prefix reversals)[6,10,11,14,19]是 生物資訊學近來被廣泛研究的主題,又稱為煎餅翻轉問題(Pancake flipping problem)[9,15,3],目的為利用字首反轉方式,並找出最少反轉次數。目前相關 研究,在序列長度 17 以下可找出最佳解。序列長度 18 以上最佳解仍未知,已被 提出的啟發式演算法主要有兩個:Gates 及 Papadimitriou 的啟發式演算法,以及 Fischer 及

Ginzinger

的啟發式演算法。

本論文針對此問題提出我們的啟發式演算法,在序列長度 17 以下,最少反 轉次數接近最佳解。序列長度 18 以上,和已被提出的兩個主要啟發式演算法比 較,最少反轉次數明顯較佳。實驗結果說明,我們提出的為目前執行上最有效率 地啟發式演算法。當序列長度越大,執行字首反轉排序困難度便增加,針對此問 題,我們依據三種啟發式演算法並設計在網頁上[24],以便於執行字首反轉排序。

(11)

1.1基因重組

基因重組為兩個不同物種擁有相同基因,但卻有著不同的基因排列順序。主 要基因重組型態有五種,如圖 1.1:分裂(Fissions)、融合(Fusions)、反轉

(Reversals)、移位(Transpositions)、以及易位(Translocations)。

利用白、紅、綠、紫、黃等顏色區分不同基因組,解釋基因重組型態如下。

(一)分裂:將一段染色體基因組剪開分裂成兩段染色體基因組;(二)融合:

兩段染色體基因組融合形成單一段染色體基因組;(三)反轉:染色體基因組其 中某段基因組進行反轉互換的動作,形成顛倒的順序;(四)移位:基因組中任 何區段都能移位到任何區段並插入,圖 1.1 中以黑線條區段與紅線條區間進行移 位,我們看到紫色也就是黑線條插入到黃色與白色之間的區間;(五)易位:兩 條黑線條與前面序列剪開並將兩基因組分別剪開部分進行易位動作,也就是將第 一條染色體基因組所剪開部分連接在第二條序列上,第二條染色體基因組因此連 接到第一條的序列上。

圖 1.1 : Genome Rearrangement 的型態

(12)

‹ 基因組序列

在任意物種中,以人類為例,人類基因組是由 23 條染色體所組成,圖 1.2 中包括 22 條體染色體、1 條性染色體即為 X 染色體或 1 條 Y 染色體。染色體中 包含大量的基因(如 DNA 序列、RNA 序列、或是蛋白質序列),然而基因是由 去氧核醣核酸簡稱 DNA(Dexyribonucleic acid)所組成,接著 DNA 是由四種核 苷酸(Nucleotides)所組成,其四種核苷酸中所攜帶的含氮鹼基(Base)則分別 為:腺嘌呤(Adenine)、胸腺嘧啶(Thymine)、鳥糞嘌呤(Guanine)、胞嘧啶

(Cytosine),即是 A、T、C、G。圖 1.3 中每個基因片段由 DNA 序列所組成,

其中基因都有其排列順序[8]。

圖 1.2 : 人類染色體

(13)

圖 1.3 : 基因組序列

(14)

1.2基因反轉

基因重組的型態分為五種,接下來我們主要是針對基因反轉的重組型態,並 分析基因組的演化過程。近幾年學者致力於研究基因的反轉排序問題,並計算出 兩個不同物種擁有相同基因,但卻有著不同的基因排列順序之最少的反轉距離

(Reversals distance)[16]。

自然界在演化過程其基因序列中,兩物種間可能有相同的基因序列,但是其 基因序列之排列順序為不同,使其物種形態有所不同。在植物界中,以甘藍菜

(Cabbage)和蕪菁(Turnip)來說明,Jeffrey Palmer 於 1980 年[19,20],圖 1.4 中針對兩種外表和味道完全不一樣的植物甘藍菜與蕪菁,發現兩種植物細胞演化 時,細胞中基因組幾乎相同,相同率大約於 99%~99.9%,只是基因順序不相同。

圖 1.4 : 甘藍菜(Cabbage)和蕪菁(Turnip)

造成這種現象的主要原因,在於基因反轉排序產生基因重組。考慮基因組裡 方向性的問題:(3'端到 5'端,以及 5'端到 3'端),將基因組區段以數字表 示,方向以正負號表示,舉例來說:甘藍菜基因序列中的基因 4,其基因 4 之序 列為 ATTGCG,經過基因反轉後基因 4 變成基因-4,方向顛倒,基因序列為 GCGTTA。甘藍菜和蕪菁兩種植物在自然界的演化過程中,可能經過幾百年甚至 幾千年的演化突變,才可能形成一樣的基因序列。針對甘藍菜演化成蕪菁,我們 以數字型態分別來表示每經過一次基因反轉過後的基因序列,圖 1.5 中甘藍菜基 因排列為(1, -5, 4, -3, 2),首先將基因 2 反轉形成-2;接著將基因 4 反轉形成-4;

(15)

最後將基因排列(-5, -4, -3, -2)反轉形成(2, 3, 4, 5),最後剛好與蕪菁基因排列

(1, 2, 3, 4, 5)完全一致,其最少的基因反轉距離即為 3 次。

圖 1.5 : Cabbage 基因組反轉排序成 Turnip 基因組

‹ 反轉排序

針對有向反轉排序最少反轉次數問題,為考慮方向性之基因重組研究。

Hannenhalli 和 Pevzner 於 1995 年,提出時間複雜度 O(n4)之最佳解演算法。基因 組裡方向性的問題:(3'端到 5'端,以及 5'端到 3'端),將基因組區段以數 字表示,方向以正負號表示。首先,給定一基因組排列,利用反轉排序從一基因 組排列轉成另一基因組排列,如圖 1.6 紅色線段表示反轉位置,藍色箭頭表示反 轉過後形成下一段基因序列。給定一基因排列(2, -4, -3, 5, -8, -7, -6, 1),首先將 基因排列(-4, -3)反轉形成(3, 4);再來將基因排列(-8, -7, -6)反轉形成(6, 7, 8);再來將基因 1 反轉形成-1;接著將基因排列(2, 3, 4, 5, 6, 7, 8)反轉形成(-8, -7, -6, -5, -4, -3, -2);最後將基因排列(-8, -7, -6, -5, -4, -3, -2, -1)反轉形成(1, 2, 3, 4, 5, 6, 7, 8)形成另外一基因組。

(16)

圖 1.6 : 基因重組之有向反轉排序

在人類與老鼠中,有著上千種相似同源基因(Homologous genes),但是這 些同源基因的排列順序是不相同的,比較其染色體基因在數目以及大小上有明顯 的差異,根據研究指出人類與老鼠染色體上排列的基因有一些關連性。圖 1.7 中 發現人類和老鼠的 X 染色體有相同基因區塊以號碼 1 到 11 及正負號來標示,但 其基因順序並非完全一樣。考慮老鼠的基因排列為(1, -7, 6, -10, 9, -8, 2, -11, -3, 5, 4)經過演化反轉排序會形成人類的 X 染色體基因排列(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),其基因反轉次數為 7 次。

(17)

圖 1.7 : Mouse 反轉成 Human 基因序列示意圖

無向反轉排序基因重組問題之最少反轉次數,為不考慮方向性之基因重組研 究。為簡化基因重組之研究,可不考慮基因組方向性的問題。圖 1.8 為無向反轉 排序問題範例,其基因反轉次數為 5 次。

圖 1.8 : 基因重組之無向反轉排序

無向反轉排序中 Kececioglu 和 Sanko[17]於 1995 年帥先提出比率值為 2 的逼

(18)

近演算法;接著 Bafna 和 Pevzner[2] 在 1996 年提出比率值為 1.75 的逼近演算法。

Caprara 於 1997 年,首度證明反轉排序最少反轉次數問題為 NP-hard。在 1998 年,Christie[7]提出 1.5 的逼近演算法;目前最好的逼近演算法為 1.375,為 Berman、Hannenhalli 以及 Karpinski[4]於 2002 年所提出。

(19)

1.3字首反轉

字首反轉排序問題,又叫煎餅翻轉問題,給定 n 基因排列,以最少的反轉次 數找出完全排列(Identity permutation),基因排列的順序即為(1 2 3…n)。在基 因重組研究上,考慮基因組方向性的問題,分成有方向性之字首反轉和無方向性 之字首反轉,而我們為簡化基因重組之研究,則不考慮基因組方向性的問題。字 首反轉為從起始基因序列反轉至目標序列,反覆利用字首反轉排序的動作,使基 因序列為完全排列,如圖 1.9 中基因序列標號 3 即為起始基因,而基因序列標號 10 為目標基因,反覆利用字首反轉排序,其基因序列即轉成完全排列。

‹ 字首反轉排序

字首反轉排序問題,給定一段排列π,利用字首反轉排序到完全排列。我們 為簡化基因重組之研究,則不考慮基因組方向性的問題,即為無方向性之字首反 轉排序。無向字首反轉排序最少反轉次數問題,即為煎餅翻轉問題。Gates 和 Papadimitriou[11]首先於 1979 年,提出啟發式演算法(Heuristic algorithms);目 前專家學者們還沒有證明此問題是 NP 或者 P 問題,但是在 1993 年,Heydari[14]

提出修改版的字首反轉排序問題,證明其為 NP-complete 問題。於 2005 年,

Fischer 和 Ginzinger[10]提出比率值為 2 的逼近演算法;在 2009 年,研究又有更 進一步發展,Chitturi[6]針對上限值更進一步提出 ⎟

n

⎜ ⎞

⎛ 11

18

1.6363n 的啟發式演算

法,但是極為複雜及不易懂;針對此問題我們於 2010 年[23],利用線性規劃方 法,簡易且有效率地同樣推導出 ⎟

n

⎜ ⎞

⎛ 11

18

1.6363n 上限值。

圖 1.9 中給定一段排列(3, 5, 8, 6, 4, 7, 9, 2, 1, 10, 11),反覆利用字首反轉排 序的動作,直到整段排列為完全排列。

(20)

圖 1.9 : 基因重組之字首反轉排序

圖 1.10 為給定起始排列π=(3, 5, 8, 6, 4, 7, 9, 2, 1, 10, 11),首先將起始基因 3 反轉和目標基因 2 相連接,紅色底線即為基因的翻轉區段;起始基因 9 反轉和 目標基因 10 相連接;起始基因 1 反轉和目標基因 7 相連接;起始基因 4 反轉和 目標基因 3 相連接;起始基因 5 反轉和目標基因 4 相連接;起始基因 6 反轉和目 標基因 5 相連接;起始基因 8 反轉和目標基因 9 相連接;接著起始基因 7 反轉和 目標基因 8 相連接;最後起始基因 6 反轉和目標基因 7 相連接,經過九次無向字 首反轉動作,最後變成完全排列π=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)。

(21)

圖 1.10 : 無向字首反轉排序

(22)

1.4 研究動機與目的

先前學者所提出來的序列長度 14 以下可以被利用在普通電腦來計算[15],

而 2005 年 Kounoike 和 Kaneko 和 Shinano[18]提出序列長度 14 以上則需利用平 行電腦來處理。在 2006 年,由 Asai 和 Kounoike 和 Shinano 和 Kanek 提出最糟 的情況條件(Worst case)中已知序列長度 17 時,最大直徑(Diameter)[1]為 19,

指在最糟的情況條件中,序列長度為 17 並找出利用字首反轉排序轉成完全排列 後所需要的最少反轉次數,其序列長度的最少反轉次數即為 19,最佳解為 19。

所以在序列長度 17 以下可找出最佳解。序列長度 18 以上最佳解仍未知,已被提 出的啟發式演算法主要有兩個:Gates 及 Papadimitriou 的啟發式演算法,以及 Fischer 及 Ginzinger 的啟發式演算法。

由於 Gates 和 Papadimitriou 在 1979 年所提出啟發式演算法利用字首反轉排 序,其中 9 個 case 有 3 個 case 反轉次數需要 4 次,此演算法利用字首反轉排序 將排列反轉成環狀結構,而將環狀結構反轉成完全排列,需要加上額外的反轉次 數。於 2005 年 Fischer 和 Ginzinger 所提出的啟發式演算法,其中演算法利用字 首反轉排序,其排列可能會反轉成獨特循環結構,接著將此獨特循環結構反轉成 完全排列,需要加上額外的反轉次數。

我們針對序列長度 18 以上最佳解未知、Gates 及 Papadimitriou 的啟發式演 算法的環狀結構,以及 Fischer 及 Ginzinger 的啟發式演算法的獨特循環結構,提 出我們的啟發式演算法,利用無向字首反轉排序找出比先前學者所提出的演算法 更有效率且反轉次數更少的演算法。

(23)

1.5 章節綱要

本篇論文的結構,首先在第一章中介紹何謂基因重組,進而談到基因重組之 反轉排序以及字首反轉排序問題,並且將相關研究論文加以整理。

第二章針對 Gates 和 Papadimitriou 在 1979 年所提出啟發式演算法作詳細的 說明與介紹,首先從符號表示來定義,進而談到啟發式演算法之執行程序,最後 執行提出之範例,並且說明其範例執行結果;第三章針對 Fischer 和 Ginzinger 在 2005 年所提出的演算法作詳細的說明與介紹,首先從符號表示來定義,進而 談到啟發式演算法之執行程序,最後執行提出之範例,並且說明其範例執行結果。

第四章針對前兩章的演算法,我們提出另一演算法並進行範例實作,不僅演 算法簡潔並且有效的改善其反轉次數,接著比較分析其演算法執行結果之差異與 演算法執行時間之差異;最後,第五章以我們的演算法提出結論與討論未來展望。

(24)

第二章 Gates及Papadimitriou演算法

比爾蓋茲在哈佛大學期間於 1979 年和 Papadimitriou 完成離散數學論文。他 們針對啟發式演算法提出証明字首反轉排序之上限值和下限值,先前學者提出在 字首反轉排序中,給定一序列 n,每次最多反轉 2 次就可以消去一個斷點,即字 首反轉排序之上限值為 2n。給定一序列 n,可以在 2(n-2)次動作將此序列轉成完 全序列,但是最後一次反轉可以消去 2 個斷點,所以只要再反轉一次就可以,也 就是說,給定一序列 n,利用字首反轉排序保證可以在 2n–3 次反轉成完全排列。

而他們將上限值從 2n 降低至 3

5

5

n

+

1.667n。

(25)

2.1 符號定義

首先我們介紹斷點(Breakpoint)[2]為一對不連續片段,圖 2.1 中的紅色箭 頭所標示的位置,也就是(0, 2),(1, 3)這兩點地方存在含有兩個斷點。相鄰點

(Adjacency),給定一段排列其排列中不存在任何斷點也不需要任何反轉便為完 全排列,並且為一段連續片段,圖 2.1 中藍色箭頭所標示的位置,含有五個相鄰 點。

圖 2.1 : 斷點和相鄰點示意圖

根據排列中相連區塊結構(Block structure)和獨立字元(Singleton)來定義 基本符號,定義 2.1 給定一段排列π。

‹ 假設|πi-πj|≣1,i 連接(Consecutive)到 j。

‹ 假設|πi-πi+1|=1,在排列π中 i 和 i+1 有相連,所以存在 1 個相鄰點。

‹ 在排列π中,長度超過 1 的相連字元稱為相連區塊,將相連區塊以符號

“~"來表示。

‹ 不存在任何斷點也不需要任何反轉便為完全排列ι。

‹ 相連區塊中,初始字元和終點字元被稱作終端點(Endpoint)。

(26)

‹ 另外長度為 1,且不和前後字元相連稱為獨立字元。

舉例說明,給定一段排列π,使π=(5, 6, 7, 1, 3, 2, 4)

‹ 1 連接到 2,2 連接到 3,3 連接到 4,…,6 連接到 7,最後 7 則連接到 1,

成為環狀結構。

‹ 在(3, 2)中,有 1 相鄰點存在,而(5, 6, 7, 1)中,則存在 3 個相鄰點,(5, 6)中,1 個相鄰點,(6, 7)中,1 個相鄰點,最後(7, 1)中,也存在 1 個 相鄰點。

‹ 此排列中,存在 2 段相連區塊,即為(5, 6, 7, 1)和(3, 2)長度皆超過 1 的 相連字元,另外可以將相連區塊(5, 6, 7, 1)表示為 5~或~1。

‹ 2 段相連區塊(5, 6, 7, 1)和(3, 2),其終點端分別為 5 和 1,3 和 2。

‹ 字元 4 即為獨立字元。

在演算法中,根據排列中相連區塊和獨立字元來分類,舉例來說:給定一段 排列π=(5, 6, 7, 1, 3, 2, 4),並分析從 1 連續到 7,將排列中第一個字元以符號 B 來表示。在例題中,排列的第一個字元為 5,所以將 5 表示為 B,而在排列中 開始為一段相連區塊(5, 6, 7, 1),可以表示為 B ~ C。相連區塊(5, 6, 7, 1)連 續到 4,且 4 為獨立字元而不是相連區塊,可以被表示為 A,所以 B ~ C 連續 到 A,也就是 5 連續到 4。根據相連區塊(5, 6, 7, 1)繼續做相同分析,連續到 右邊終端點為 2 的數字,只有 1 可以連續到 2,因為另一個字元 7 已經在相連區 塊裡面,2 為相連區塊(3, 2),在我們分類中可以被表示為 ~ D,所以 C 連續 到 D,也就是 1 連續到 2。另外我們在相連區塊和獨立字元中存在的其它字元,

以符號“_"來表示,也可以利用符號“_"來分離相連區塊和獨立字元,因為符 號“_"裡面可以被表示有其它字元存在,也可以被表示不存在任何字元。所以 在排列π=(5, 6, 7, 1, 3, 2, 4)中,可以表示為 B~C_~D_A_。

(27)

2.2 啟發式演算法

在 Gates 及 Papadimitriou 定義演算法,表 2.1 針對排列,以初始字元結構和 連接字元分類成九大類情況條件(Case)。經過第一次字首反轉後,將形成另外 一段排列與另外一情況條件。重複這些動作直到排列形成環狀結構。

根據演算法,我們給定一段排列π並執行字首反轉排序:

1. 首先判斷執行 Case 1,若排列π為此 Case,其排列初始字元必須為獨立字 元 B,而字元 B 要連接到字元 A,經過 1 次的字首反轉,字元 B 會連接到 字元 A,所以 Case 1 只需要 1 次字首反轉的動作;若排列π非此 Case 繼續 判斷 Case 2。

2. 判斷排列π是否為 Case 2,若排列π為此 Case,其排列初始字元必須為獨 立字元 B,而字元 A 為左邊終端點之相連區塊,字元 B 要連接到字元 A,

經過 1 次的字首反轉,字元 B 會連接到字元 A,所以 Case 2 只需要 1 次字 首反轉的動作;若排列π非此 Case 繼續判斷 Case 3。

3. 判斷排列π是否為 Case 3,若排列π為此 Case,其排列初始字元必須為獨 立字元 B,字元 A 為右邊終端點之相連區塊,而字元 C 也是為右邊終端點 之相連區塊,每 2 次字首反轉排序才能將字元 B 和字元 A 或字元 B 和字元 C 連接,所以 Case 3 需要 4 次字首反轉的動作;若排列π非此 Case 繼續判 斷 Case 4。

4. 判斷排列π是否為 Case 4,若排列π為此 Case,其排列初始字元必須為左 邊終端點之相連區塊 B~,而字元 A 為獨立字元,字元 B 要連接到字元 A,

經過 1 次的字首反轉,字元 B 會連接到字元 A,所以 Case 4 只需要 1 次字 首反轉的動作;若排列π非此 Case 繼續判斷 Case 5。

5. 判斷排列π是否為 Case 5,若排列π為此 Case,其排列初始字元必須為左 邊終端點之相連區塊 B~,而字元 A 為左邊終端點之相連區塊,字元 B 要

(28)

連接到字元 A,經過 1 次的字首反轉,字元 B 會連接到字元 A,所以 Case 5 只需要 1 次字首反轉的動作;若排列π非此 Case 繼續判斷 Case 6。

6. 判斷排列π是否為 Case 6,若排列π為此 Case,其排列初始字元必須為左 右終端點之相連區塊 B~C,而字元 D 為左邊終端點之相連區塊,字元 C 要 連接到字元 D,經過 2 次字首反轉,字元 C 會連接到字元 D,所以 Case 6 需要 2 次字首反轉的動作;若排列π非此 Case 繼續判斷 Case 7。

7. 判斷排列π是否為 Case 7,若排列π為此 Case,其排列初始字元必須為左 右終端點之相連區塊 B~C,而字元 D 為右邊終端點之相連區塊,字元 C 要 連接到字元 D,經過 2 次字首反轉,字元 C 會連接到字元 D,所以 Case 7 需要 2 次字首反轉的動作;若排列π非此 Case 繼續判斷 Case 8。

8. 判斷排列π是否為 Case 8,若排列π為此 Case,其排列初始字元必須為左 右終端點之相連區塊 B~C,字元 A 為右邊終端點之相連區塊,字元 D 為獨 立字元,而字元 A 在字元 D 的左邊,每 2 次字首反轉排序才能將字元 B 和 字元 A 或字元 B 和字元 C 連接,所以 Case 8 需要 4 次字首反轉的動作;若 排列π非此 Case 繼續判斷 Case 9。

9. 判斷排列π是否為 Case 9,若排列π為此 Case,其排列初始字元必須為左 右終端點之相連區塊 B~C,字元 A 為右邊終端點之相連區塊,字元 D 為獨 立字元,而字元 A 在字元 D 的右邊,每 2 次字首反轉排序才能將字元 B 和 字元 A 或字元 B 和字元 C 連接,所以 Case 9 需要 4 次字首反轉的動作。

(29)

表 2.1 : Gates 及 Papadimitriou 演算法之九大情況條件

根據 Gates 及 Papadimitriou 演算法我們舉例來分別佐證九大條件:

Case 1. 圖 2.2-1 初始排列π=(3, 5, 6, 2, 4, 1, 7, 8),其初始字元為 3,

而 3 連接到 2,經過 1 次字首反轉,形成排列π=(6, 5, 3, 2, 4, 1, 7, 8)。

(30)

Case 2. 圖 2.2-2 初始排列π=(3, 6, 5, 4, 2, 1, 7, 8),其初始字元為 3,

而 3 連接到 2,經過 1 次字首反轉,形成排列π=(4, 5, 6, 3, 2, 1, 7, 8)。

Case 3. 圖 2.2-3 初始排列π=(4, 1, 6, 5, 7, 2, 3, 8),其初始字元為 4,

而 4 連接到 5 和 3,經過 4 次字首反轉,形成排列π=(7, 2, 3, 4, 5, 6, 1, 8)。

Case 4. 圖 2.2-4 初始排列π=(4, 3, 6, 7, 1, 2, 5, 8),其初始字元為 4,

而 4 連接到 5,經過 1 次字首反轉,形成排列π=(2, 1, 7, 6, 3, 4, 5, 8)。

Case 5. 圖 2.2-5 初始排列π=(4, 3, 7, 1, 2, 5, 6, 8),其初始字元為 4,

而 4 連接到 5,經過 1 次字首反轉,形成排列π=(2, 1, 7, 3, 4, 5, 6, 8)。

Case 6. 圖 2.2-6 初始排列π=(5, 4, 3, 7, 6, 2, 1, 8),其初始字元為 5,

而 3 連接到 2,經過 2 次字首反轉,形成排列π=(6, 7, 5, 4, 3, 2, 1, 8)。

Case 7. 圖 2.2-7 初始排列π=(5, 4, 3, 7, 6, 1, 2, 8),其初始字元為 5,

而 3 連接到 2,經過 2 次字首反轉,形成排列π=(7, 6, 1, 2, 3, 4, 5, 8)。

Case 8. 圖 2.2-8 初始排列π=(5, 4, 3, 1, 7, 6, 8, 2),其初始字元為 5,5 連接到 6,而 3 連接到 2,經過 4 次字首反轉,形成排列π=(8, 2, 3, 4, 5, 6, 7, 1)。

Case 9. 圖 2.2-9 初始排列π=(5, 4, 3, 8, 2, 7, 6, 1),其初始字元為 5,5 連接到 6,而 3 連接到 2,經過 4 次字首反轉,形成排列π=(7, 6, 5, 4, 3, 2, 8, 1)。

(31)

圖 2.2 : Gates 及 Papadimitriou 演算法範例

Gates 及 Papadimitriou 演算法中,給定一段排列π,排列為(1, 2, …, n), 即為ι,將創造 n-1 個相鄰點。當排列形成環狀結構時,如圖 2.3 演算法之九 個條件皆無法滿足。要將環狀結構反轉成

ι

,分別為圖 2.3-(A)情況要反轉成圖 2.3-(X)需要反轉 4 次;圖 2.3-(B)情況要反轉成圖 2.3-(Y)則需要反轉 3 次。

(32)

圖 2.3 : 環狀結構之字首反轉排序

(33)

2.3 執行結果

圖 2.4 為根據以上之演算法我們舉例實際來做字首反轉排序:

‹ 首先給定一段排列π=(5, 1, 7, 4, 10, 8, 3, 2, 6, 9),其初始字元為獨立字元 5,將 5 連接到 4,此字首反轉為 Gates 及 Papadimitriou 演算法之 Case 1,

形成排列π=(7, 1, 5, 4, 10, 8, 3, 2, 6, 9)。

‹ 排列π=(7, 1, 5, 4, 10, 8, 3, 2, 6, 9),初始字元為獨立字元 7,將 7 連接到 6,

此字首反轉為 Gates 及 Papadimitriou 演算法之 Case 1,形成排列π=(2, 3, 8, 10, 4, 5, 1, 7, 6, 9)。

‹ 排列π=(2, 3, 8, 10, 4, 5, 1, 7, 6, 9),初始字元為相連區塊(2, 3),將 2 連 接到 1,此字首反轉為 Gates 及 Papadimitriou 演算法之 Case 4,形成排列π

=(5, 4, 10, 8, 3, 2, 1, 7, 6, 9)。

‹ 排列π=(5, 4, 10, 8, 3, 2, 1, 7, 6, 9),初始字元為相連區塊(5, 4),將 4 連 接到 3,此字首反轉為 Gates 及 Papadimitriou 演算法之 Case 6,形成排列π

=(8, 10, 5, 4, 3, 2, 1, 7, 6, 9)。

‹ 排列π=(8, 10, 5, 4, 3, 2, 1, 7, 6, 9),初始字元為獨立字元 8,將 8 連接到 7,

此字首反轉為 Gates 及 Papadimitriou 演算法之 Case 2,形成排列π=(1, 2, 3, 4, 5, 10, 8, 7, 6, 9)。

‹ 排列π=(1, 2, 3, 4, 5, 10, 8, 7, 6, 9),初始字元為相連區塊(1, 2, 3, 4, 5),

將 1 連接到 10,此字首反轉為 Gates 及 Papadimitriou 演算法之 Case 4,形 成排列π=(5, 4, 3, 2, 1, 10, 8, 7, 6, 9)。

‹ 排列π=(5, 4, 3, 2, 1, 10, 8, 7, 6, 9),初始字元為相連區塊(5, 4, 3, 2, 1, 10), 將 10 連接到 9 和 5 連接到 6,,此字首反轉為 Gates 及 Papadimitriou 演算 法之 Case 8,形成排列π=(9, 10, 1, 2, 3, 4, 5, 6, 7, 8)。

‹ 排列π=(9, 10, 1, 2, 3, 4, 5, 6, 7, 8),為環狀結構如圖 2.3,演算法之九個 Case 皆無法滿足,要將環狀結構反轉成

ι

,需要 3 次字首反轉動作。

(34)

圖 2.4 : Gates 及 Papadimitriou 演算法之字首反轉排序

(35)

第三章 Fischer 及 Ginzinger 演算法

在說明這一章之前,我們已知煎餅翻轉問題即為字首反轉排序問題。針對這 個問題 Fischer 及 Ginzinger 演算法利用啟發式演算法解決此問題,而且提供相關 符號之定義、啟發式演算法執行程序和執行出來的結果。

Fischer 及 Ginzinger 於 2005 年提出啟發式演算法,其中演算法根據斷點與 目標線所構成的斷點圖(Breakpoint graph)[2],分成四種情況,接著利用字首 反轉排序,將排列反轉成完全排列。其排列有機率反轉成獨特循環結構,針對此 循環結構以四種情況加以分析,最後要將此獨特循環結構反轉成完全排列,需要 加上額外的反轉次數。

(36)

3.1 符號定義

給定一段排列π=(0, 4, 2, 3, 1, 5),圖 3.1 為排列π所畫出的斷點圖。其 中四個斷點以紅色線表示,目標完全排列以藍色線表示,排列中存在一個相鄰 點。反轉排序的目標為沒有斷點及擁有五個相鄰點的完全排列,π=(0, 1, 2, 3, 4, 5)。

圖 3.1 : 斷點和目標線構成之斷點圖

給定一段排列π=(π1, π2,…, πn)即為(1, 2,…, n),根據字首反轉排序,

我們將基本符號定義在下:

‹ 字首反轉以符號ψ(r)來表示,π。ψ(r)=(πr,…, π1, πr+1,…, πn)。

‹ 完全排列以符號

ι

來表示。

‹ 字首反轉距離以符號 d(π)來表示,其代表利用字首反轉排序轉成完全排列 所需要的最少次數。

‹ 斷點是介於πi和πi+1之間,其

|

πi-πi+1

| ≠ 1,

且 1 ≦ i ≦ n。將符號 b(π) 表示為排列中斷點出現的個數,如(8|2, 1|9|5, 6|3, 4|7|)此段序列中 b(π)=6,

共 6 個斷點數。

‹ 符號 Gπ被表示為斷點圖。

(37)

3.2 啟發式演算法

Fischer 及 Ginzinger 演算法中根據斷點圖之紅色線與藍色線分別組成四種型 態,圖 3.2 中 Type 1 初始字元可能為獨立字元或左邊終端點之相連區塊,反轉藍 色線並連接到目標字元;Type 2 初始字元為獨立字元或右邊終端點之相連區塊,

反轉藍色線並連接到目標字元;Type 3 初始字元為獨立字元或右邊終端點之相連 區塊,反轉藍色線之前的字元;最後,Type 4 初始字元為獨立字元或左邊終端點 之相連區塊,並不反轉,若排列π中,初始型態為 Type 2,終點型態為 Type 1,

中間區段皆為 Type 4,則需要再利用字首反轉 2b(π)-2 個動作。

圖 3.2 : 斷點與目標線之四種情況

根據斷點圖所示,即利用字首反轉最多只要 2 次便可以消去一個斷點。給定 一段排列π=(1, 2,…, n)和連接斷點圖,以下三種情況(Condition),在排列 中最多二個字首反轉動作ψ(r)和ψ(s)可以消去一個斷點:

Condition 1. Type 1 中斷點圖包含一藍色線(πi, πj),且 i=1。

Condition 2. Type 2 中斷點圖包含一藍色線(πi, πj),且 i≠0。

Condition 3. Type 3 中斷點圖包含一藍色線(πi, πj)。

(38)

根據以上三種情況,藍色線(πi, πj)為πj=πi± 1,即πi必須連續到πj, 其中πi 和πj 之間增加一個相鄰點並消去一個斷點數,而不會增加額外的斷點 數。圖 3.3 中舉例來表示三種條件(Case):

Case 1. 圖 3.3-(a)即為 Type 1 也可以被稱有效藍色線段(Good blue edge), 利用字首反轉,在位置ψ(j-1)反轉,π1和πj 之間增加一個相 鄰點,且不會增加額外的斷點數。

Case 2. 圖 3.3-(b)(c)即為 Type 2 也可以被稱有效藍色線段(Good blue edge),利用字首反轉,在位置ψ(j)和ψ(j-i)反轉,第一次 字首反轉ψ(j)後不會增加相鄰點也不會消去斷點數,更不會額 外增加斷點數,但是形成 Type 1。而第二次字首反轉ψ(j-i)後,

增加一個相鄰點和消去一個斷點數。

Case 3. 圖 3.3-(d) (e) (f)即為 Type 3 也可以被稱有效藍色線段(Good blue edge),利用字首反轉,在位置ψ(i)和ψ(j-1)反轉,第一次 字首反轉ψ(i)後不會增加相鄰點也不會消去斷點數,更不會額 外增加斷點數,但是形成 Type 1。而第二次字首反轉ψ(j-1)後,

增加一個相鄰點和消去一個斷點數。

根據 Fischer 及 Ginzinger 演算法我們利用字首反轉排序分別說明前三種情 況:

‹ 首先,斷點和目標線構成斷點圖,圖 3.3-(a)為 Type 1,在ψ(3)的位置利 用字首反轉,藍色線從π1=3 到π4=2,將 3 連接到 2,增加一個相鄰點和 消去一個斷點數,即為 Condition 1,。

‹ 圖 3.3-(b)為 Type 2,在ψ(7)的位置利用字首反轉,藍色線從π2=3 到π7

=2,先將 2 反轉至初始位置之後,不會增加相鄰點也不會消去斷點數,更

(39)

不會額外增加斷點數,但是形成 Type 1,此情況即為 Condition 2。接著再將 2 連接到 3,增加一個相鄰點和消去一個斷點數,即為 Condition 1。

‹ 圖 3.3-(c)為 Type 3,在ψ(3)的位置利用字首反轉,藍色線從π3=3 到π6

=2,先將 3 反轉至初始位置之後,不會增加相鄰點也不會消去斷點數,更 不會額外增加斷點數,但是形成 Type 1,此情況即為 Condition 3。接著再將 3 連接到 2,增加一個相鄰點和消去一個斷點數,即為 Condition 1。當演算 法中三種情況皆無法滿足時,要轉成ι,則需要考慮第四種情況。

(40)

圖 3.3 : Fischer 及 Ginzinger 演算法之三種情況範例

當排列π≠ι,且演算法中三種情況皆無法滿足,此時斷點圖為獨特循環結 構,其斷點圖第一條藍色線是由 Type 2 所構成,最後一條藍色線是由 Type 1 所 構成,而中間區段至少要二個 Type 4 以上所構成,且不為其它 Type。

(41)

下列為獨特循環結構所構成的排列π≠ι,由斷點數=2 以上(b(π)≧2)

和遞減片段(Descending strips)長度=2 以上所組成,其中斷點與斷點之間的排 列由遞減片段 所構成,而遞減片段個數和斷點個數相同。

l

‹

π = ( p

1

,..., 1 , p

2

,..., p

1

+ 1 ,..., n ,..., p

b

( )

π 1

+ 1 )

圖 3.4 中,以藍色目標線和紅色斷點線來表示獨特循環結構所形成之斷點 圖,(πi , πj)為第一條藍色線,和紅色線形成 Type 2;(πn-1 , πn+1)為最後 一條藍色線,和紅色線形成 Type 1;而中間區段藍色線和紅色線全部皆構成 Type 4。

圖 3.4 : Fischer 及 Ginzinger 演算法之獨特循環結構

根據 Fischer 及 Ginzinger 演算法中,給定一段排列π。當排列形成獨特循環 結構時,其演算法之三種情況皆無法滿足,其斷點圖第一條藍色線和紅色線是由 Type 2 所構成,最後一條藍色線和紅色線是由 Type 1 所構成,而中間區段至少 要二個 Type 4 以上所構成,且不為其它 Type。圖 3.5 為獨特循環結構,利用字 首反轉排序將排列π反轉至ι。

(42)

圖 3.5 : 獨特循環結構之字首反轉排序

(43)

3.3 執行結果

根據圖 3.6 中,給定排列π=(8, 2, 1, 9, 5, 6, 3, 4, 7),利用字首反轉排序 將排列π反轉至ι:

‹ 排列π=(8, 2, 1, 9, 5, 6, 3, 4, 7),判斷為 Type 1,將 8 連接到 7,形成排 列π=(4, 3, 6, 5, 9, 1, 2, 8, 7)。

‹ 排列π=(4, 3, 6, 5, 9, 1, 2, 8, 7),判斷為 Type 2,將 2 反轉至初始字元,

形成排列π=(2, 1, 9, 5, 6, 3, 4, 8, 7),Type 形成 Type 1,將 2 連接到 3,形 成排列π=(6, 5, 9, 1, 2, 3, 4, 8, 7)。

‹ 排列π=(6, 5, 9, 1, 2, 3, 4, 8, 7),判斷為 Type 3,將 9 反轉至初始字元,

形成排列π=(9, 5, 6, 1, 2, 3, 4, 8, 7),Type 形成 Type 1,將 9 連接到 8,形 成排列π=(4, 3, 2, 1, 6, 5, 9, 8, 7)。

‹ 排列π=(4, 3, 2, 1, 6, 5, 9, 8, 7),判斷為獨特循環結構,首先將整段排列 反轉,形成排列π=(7, 8, 9, 5, 6, 1, 2, 3, 4),接著將 6 反轉至初始字元,形 成排列π=(6, 5, 9, 8, 7, 1, 2, 3, 4),再將整段排列反轉,形成排列π=(4, 3, 2, 1, 7, 8, 9, 5, 6),將 9 反轉至初始字元,形成排列π=(9, 8, 7, 1, 2, 3, 4, 5, 6),將整段排列反轉,形成排列π=(6, 5, 4, 3, 2, 1, 7, 8, 9),最後將 1 反 轉至初始字元,形成ι。

(44)

圖 3.6 : Fischer 及 Ginzinger 演算法之字首反轉排序

(45)

第四章 我們的演算法

由於 Gates 及 Papadimitriou 演算法透過字首反轉排序後會形成環狀結構,要 將此環狀結構反轉至完全排列,最多需要再反轉 4 次。至於 Fischer 及 Ginzinger 演算法中,透過字首反轉排序後有些排列會形成特定的獨特循環結構,當形成這 些獨特循環結構時,要將反轉至完全排列,最多需要再反轉 2b(π)-2 次。因為這 兩種結構型態,使其字首反轉排序多了幾次動作。針對此問題,我們在本章節提 出一個演算法,進而改善其字首反轉排序之問題。

討論三種演算法之執行結果,並比較分析字首反轉排序問題,首先針對問題 我們利用最糟情況條件之排列,執行字首反轉排序,並分析三種演算法所執行之 差異,接著我們以序列長度為 20、50、100、200、500、1000 執行字首反轉排序,

比較分析三種演算法執行之差異,最後比較分析三種演算法執行時間之差異。

(46)

4.1符號定義

在我們的演算法中,利用字首反轉來排序,其排列依據初始字元結構和連接 字元分類成四大類情況條件(Case),首先我們針對 Case 1 來定義符號,排列π

=(5, 2, 3, 4, 1, 6, 7):

‹ 字元(6, 7)為已排序之字元。

‹ 字元(5, 2, 3, 4, 1)皆為未排序之字元。

‹ 5 為未排序之字元中最大字元,以符號“MAX"來表示。

‹ 1 為未排序之字元中最右邊的字元,以符號“R"來表示。

接著我們針對 Case 2-4 來定義符號:

‹ 獨立字元:長度為 1 且不和前後字元相連,我們以符號“A_"、“_A"、

“_A_"來表示。

‹ 相連區塊:長度超過 1 以上的相連字元稱為相連區塊,我們以符號“A~"、

“~A"、“AB"、“A~B"來表示。

‹ 可以被表示有其它字元存在,也可以被表示不存在任何字元,以符號“_"

來表示。

‹ 排列中最大字元或最小字元即為 n 或 1,以符號“Z"來表示。

(47)

4.2 啟發式演算法

執行我們的演算法時,首先在表 4.1 中將其排列依據初始字元結構和連接字 元分類成四大類情況條件,根據初始字元結構和連接字元所分成的情況條件再區 分成子情況條件(Subcase)。經過第一次字首反轉後,將形成另外一段排列與另 外一情況條件。重複這些動作直到排列形成完全排列。

根據演算法中,我們給定一段排列π並執行字首反轉排序:

1. 首先判斷執行 Case 1,若排列π為此 Case,其排列初始字元必須為最大字 元或未排序之字元中最大字元,藉由字首反轉將此最大字元反轉至最右,所 以 Case 1 只需要 1 次字首反轉的動作;若排列π非此 Case 繼續判斷 Case 2。

2. 判斷排列π是否為 Case 2,首要判斷之條件為初始字元是否獨立字元,若初 始字元為獨立字元,再依其排列判斷為哪一個 Subcase。Subcase 1 其排列初 始字元必須為獨立字元 B,而字元 A 為獨立字元,字元 B 經過 1 次字首反 轉連接到字元 A,所以 Subcase 1 只需要 1 次字首反轉的動作,若排列π非 此 Subcase 繼續判斷 Subcase 2;Subcase 2 其排列初始字元必須為獨立字元 B,而字元 A 為左邊終端點之相連區塊,字元 B 經過 1 次字首反轉連接到相 連區塊 A,所以 Subcase 2 只需要 1 次字首反轉的動作,若排列π非此 Subcase 繼續判斷 Subcase 3;Subcase 3 其排列初始字元必須為獨立字元 B,而字元 A 為右邊終端點之相連區塊,字元 B 經過 2 次字首反轉連接到相連區塊 A,

所以 Subcase 3 需要 2 次字首反轉的動作,若排列π非此 Subcase 則判斷 Case 3。

3. 判斷排列π是否為 Case 3,首要判斷之條件為初始字元是否相連區塊,若初 始字元為相連區塊,再依其排列判斷為哪一個 Subcase。Subcase 1 其排列初 始字元必須為左邊終端點之相連區塊 B,而字元 A 為獨立字元,相連區塊 B 經過 1 次字首反轉連接到字元 A,所以 Subcase 1 只需要 1 次字首反轉的動 作,若排列π非此 Subcase 繼續判斷 Subcase 2;Subcase 2 其排列初始字元

(48)

必須為左邊終端點之相連區塊 B,而字元 A 為左邊終端點之相連區塊,相 連區塊 B 經過 1 次字首反轉連接到相連區塊 A,所以 Subcase 2 只需要 1 次 字首反轉的動作,若排列π非此 Subcase 則判斷 Case 4。

4. 判斷排列π是否為 Case 4,首要判斷之條件為初始字元是否相連區塊,若初 始字元為相連區塊,再依其排列判斷為哪一個 Subcase。Subcase 1 其排列初 始字元必須為左右終端點之相連區塊 B ~ Z,而字元 A 為右邊終端點之相 連區塊,相連區塊 B ~ Z 經過 3 次字首反轉連接到相連區塊 A,所以 Subcase 1 需要 3 次字首反轉的動作,若排列π非此 Subcase 繼續判斷 Subcase 2;

Subcase 2 其排列初始字元必須為左右終端點之相連區塊 B ~ C,而字元 D 為右邊終端點之相連區塊,相連區塊 B ~ C 經過 2 次字首反轉連接到相連 區塊 D,所以 Subcase 2 需要 2 次字首反轉的動作,若排列π非此 Subcase 繼續判斷 Subcase 3;Subcase 3 其排列初始字元必須為左右終端點之相連區 塊 B ~ C,而字元 D 為獨立字元,相連區塊 B ~ C 經過 2 次字首反轉連 接到字元 D,所以 Subcase 3 需要 2 次字首反轉的動作,若排列π非此 Subcase 繼續判斷 Subcase 4;Subcase 4 其排列初始字元必須為左右終端點之相連區 塊 B ~ C,而字元 D 為左邊終端點之相連區塊,相連區塊 B ~ C 經過 2 次字首反轉連接到相連區塊 D,所以 Subcase 4 需要 2 次字首反轉的動作。

(49)

表 4.1 : 我們的演算法之四大條件情況

圖 4.1 中根據我們的演算法並且舉例來佐證四大條件:

Case 1 圖 4.1-(1)初始排列π=(8, 5, 4, 1, 2, 3, 6, 7),其初始字元為 8,此字元 為未排序之字元中最大字元,而字元 7 為未排序之字元中最右邊的字 元,經過 1 次字首反轉,形成排列π=(7, 6, 3, 2, 1, 4, 5, 8)。

(50)

Case 2-1 圖 4.1-(2-1)初始排列π=(3, 5, 6, 2, 4, 1, 7, 8),其初始字元為 3,而 3 連接到 2,經過 1 次字首反轉,形成排列π=(6, 5, 3, 2, 4, 1, 7, 8)。

Case 2-2 圖 4.1-(2-2)初始排列π=(3, 6, 5, 4, 2, 1, 7, 8),其初始字元為 3,而 3 連接到 2,經過 1 次字首反轉,形成排列π=(4, 5, 6, 3, 2, 1, 7, 8)。

Case 2-3 圖 4.1-(2-3)初始排列π=(3, 6, 7, 8, 1, 2, 5, 4),其初始字元為 3,而 3 連接到 2,經過 2 次字首反轉,形成排列π=(6, 7, 8, 1, 2, 3, 5, 4)。

Case 3-1 圖 4.1-(3-1)初始排列π=(4, 3, 6, 7, 1, 2, 5, 8),其初始字元為 4,而 4 連接到 5,經過 1 次字首反轉,形成排列π=(2, 1, 7, 6, 3, 4, 5, 8)。

Case 3-2 圖 4.1-(3-2)初始排列π=(4, 3, 7, 1, 2, 5, 6, 8),其初始字元為 4,而 4 連接到 5,經過 1 次字首反轉,形成排列π=(2, 1, 7, 3, 4, 5, 6, 8)。

Case 4-1 圖 4.1-(4-1)初始排列π=(6, 7, 8, 2, 1, 4, 5, 3),其初始字元為 6,而 6 連接到 5,經過 3 次字首反轉,形成排列π=(2, 1, 4, 5, 6, 7, 8, 3)。

Case 4-2 圖 4.1-(4-2)初始排列π=(5, 4, 3, 7, 6, 1, 2, 8),其初始字元為 5,而 3 連接到 2,經過 2 次字首反轉,形成排列π=(7, 6, 1, 2, 3, 4, 5, 8)。

Case 4-3 圖 4.1-(4-3)初始排列π=(5, 4, 3, 7, 6, 2, 8, 1),其初始字元為 5,而 3 連接到 2,經過 2 次字首反轉,形成排列π=(6, 7, 5, 4, 3, 2, 8, 1)。

Case 4-4 圖 4.1-(4-4)初始排列π=(5, 4, 3, 7, 6, 2, 1, 8),其初始字元為 5,而 3 連接到 2,經過 2 次字首反轉,形成排列π=(6, 7, 5, 4, 3, 2, 1, 8)。

(51)

圖 4.1 : 我們的演算法之範例

(52)

4.3 執行結果

圖 4.2 中根據我們的演算法以範例來做字首反轉排序:

‹ 首先給定一段排列π=(5, 1, 7, 4, 10, 8, 3, 2, 6, 9),其初始字元為獨立字元 5,將 5 連接到 4,此字首反轉為演算法之 Case 2-1,形成排列π=(7, 1, 5, 4, 10, 8, 3, 2, 6, 9)。

‹ 排列π=(7, 1, 5, 4, 10, 8, 3, 2, 6, 9),初始字元為獨立字元 7,將 7 連接到 6,

此字首反轉為演算法之 Case 2-1,形成排列π=(2, 3, 8, 10, 4, 5, 1, 7, 6, 9)。

‹ 排列π=(2, 3, 8, 10, 4, 5, 1, 7, 6, 9),初始字元為相連區塊(2, 3),將 2 連 接到 1,此字首反轉為演算法之 Case 3-1,形成排列π=(5, 4, 10, 8, 3, 2, 1, 7, 6, 9)。

‹ 排列π=(5, 4, 10, 8, 3, 2, 1, 7, 6, 9),初始字元為相連區塊(5, 4),將 4 連 接到 3,此字首反轉為演算法之 Case 4-4,形成排列π=(8, 10, 5, 4, 3, 2, 1, 7, 6, 9)。

‹ 排列π=(8, 10, 5, 4, 3, 2, 1, 7, 6, 9),初始字元為獨立字元 8,將 8 連接到 7,

此字首反轉為演算法之 Case 2-2,形成排列π=(1, 2, 3, 4, 5, 10, 8, 7, 6, 9)。

‹ 排列π=(1, 2, 3, 4, 5, 10, 8, 7, 6, 9),初始字元為相連區塊(1, 2, 3, 4, 5),

將 5 連接到 6,此字首反轉為演算法之 Case 4-2,形成排列π=(10, 8, 7, 6, 5, 4, 3, 2, 1, 9)。

‹ 排列π=(10, 8, 7, 6, 5, 4, 3, 2, 1, 9),初始字元為獨立字元 10,將 10 反轉 至最右邊形成已排序字元,此字首反轉為演算法之 Case 1,形成排列π=(9, 1, 2, 3, 4, 5, 6, 7, 8, 10)。

‹ 排列π=(9, 1, 2, 3, 4, 5, 6, 7, 8, 10),初始字元為獨立字元 9,將 9 反轉至 未排序字元的最右側,此字首反轉為演算法之 Case 1,形成排列π=(8, 7, 6, 5, 4, 3, 2, 1, 9, 10)。

‹ 排列π=(8, 7, 6, 5, 4, 3, 2, 1, 9, 10),初始字元為獨立字元 8,將 8 反轉至

(53)

未排序字元的最右側,此字首反轉為演算法之 Case 1,形成排列π=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)。

圖 4.2 : 我們的演算法之字首反轉排序

(54)

4.4 三個演算法比較分析

先前學者所提出來的序列長度(N)14 以下可以被利用在普通個人電腦來計 算,接著 2005 年 Kounoike 和 Kaneko 和 Shinano 提出序列長度 14 以上需利用平 行電腦來處理,直到 2006 年,利用平行電腦來處理並且已找出序列長度 17 的最 佳解,而 18 以上的最佳解目前為止專家學者還沒有找出。

目前已知序列長度 17 以下的最佳解,比較分析我們的演算法和最佳解、Gates 及 Papadimitriou 演算法、Fischer 及 Ginzinger 演算法之差異。表 4.2 提供排列,

其中序列長度含有 15、16、以及 17 之排列。表 4.2 中利用字首反轉排序得到四 種結果:最佳解、Gates 及 Papadimitriou 演算法、Fischer 及 Ginzinger 演算法、

和我們的演算法之反轉次數。

表 4.2 中,序列長度為 15,其排列π=(1 7 3 6 4 2 8 14 12 10 13 9 11 15 5),

利用字首反轉排序求得最佳解之反轉次數為 17 次;Gates 及 Papadimitriou 演算 法求得 23 次;Fischer 及 Ginzinger 演算法則為 21 次;最後利用我們的演算法可 以得到 18 次。僅僅和最佳解差距為 1;而最佳解和 Gates 及 Papadimitriou 演算 法相差了 5 次;最後最佳解和 Fischer 及 Ginzinger 演算法相差 3 次。在其它排列 中,我們的演算法執行字首反轉所得到的反轉次數,和最佳解差異不大,而 Gates 及 Papadimitriou 演算法、Fischer 及 Ginzinger 演算法差異較大。

(55)

表 4.2 : 三種演算法與最佳解之比較表

我們以亂數來取排列π,接著利用字首反轉來排序。圖 4.3 中我們分別利用 序列長度為 20、50、100,以亂數方式重複取 100 次的排列再執行字首反轉排序,

接著再算其平均數。序列長度為 20 時,Gates 及 Papadimitriou 演算法、Fischer 及 Ginzinger 演算法和我們的演算法分別以亂數方式取 100 次的排列,之後形成 100 段不同的亂數排列再執行字首反轉排序,接著將其 100 段排列之反轉次數累 加,最後再算其平均數,分別得到 25、24、22 之平均數。序列長度為 50 時,分 別得到 62、62、59 之平均數。序列長度為 100 時,則分別得到 125、123、120 之平均數。由此可說明利用我們的演算法執行字首反轉排序所得到之反轉次數平 均數會比前二者少。

(56)

圖 4.3 : 序列長度為 20、50、100 之亂數排列

我們以獨立字元來取排列π,接著再利用字首反轉來排序。圖 4.4 中我們分 別利用序列長度為 20、50、100,以獨立字元方式重複取 100 組的排列再執行字 首反轉排序,接著再算其平均數。序列長度為 20 時,Gates 及 Papadimitriou 演 算法、Fischer 及 Ginzinger 演算法和我們的演算法分別以獨立字元方式取 100 組 的排列,之後形成 100 組不同的亂數獨立字元排列再執行字首反轉排序,接著將 其 100 段排列之反轉次數累加,最後再算其平均數,分別得到 27、26、25 之平 均數。序列長度為 50 時,分別得到 65、64、61 之平均數。序列長度為 100 時,

則分別得到 128、125、122 之平均數。由此可說明利用我們的演算法執行字首反 轉排序所得到之反轉次數平均數會比前二者少。

(57)

圖 4.4 : 序列長度為 20、50、100 之獨立字元排列

我們以亂數來取排列π,接著利用字首反轉來排序。圖 4.5 中我們分別利用 序列長度 100、200、500、1000,以亂數方式重複取 100 組的排列再執行字首反 轉排序,接著再算其平均數。序列長度為 100 時,Gates 及 Papadimitriou 演算法、

Fischer 及 Ginzinger 演算法和我們的演算法分別以亂數方式取 100 組的排列,之 後形成 100 組不同的亂數排列再執行字首反轉排序,接著將其 100 組排列之反轉 次數累加,最後再算其平均數,分別得到 125、123、120 之平均數。序列長度為 200 時,分別得到 252、246、242 之平均數。序列長度為 500 時,則分別得到 627、

612、607 之平均數。序列長度為 1000 時,則分別得到 1251、1219、1215 之平 均數。由此可說明利用我們的演算法執行字首反轉排序所得到之反轉次數平均數 會比前二者少。

(58)

圖 4.5 : 序列長度為 100、200、500、1000 亂數排列

我們以獨立字元來取排列π,接著再利用字首反轉來排序。圖 4.6 中我們分 別利用序列長度 100、200、500、1000,重複取 100 組的排列再執行字首反轉排 序,接著再算其平均數。序列長度為 100 時,Gates 及 Papadimitriou 演算法、Fischer 及 Ginzinger 演算法和我們的演算法分別以獨立字元方式取 100 組的排列,之後 再執行字首反轉排序,接著將其 100 段排列之反轉次數累加,最後再算其平均 數,分別得到 128、125、122 之平均數。序列長度為 200 時,分別得到 251、248、

244 之平均數。序列長度為 500 時,則分別得到 629、613、608 之平均數。序列 數為 1000 時,則分別得到 1257、1223、1219 之平均數。由此可說明利用我們的 演算法執行字首反轉排序所得到之反轉次數平均數會比前二者少。

(59)

圖 4.6 : 序列長度為 100、200、500、1000 獨立字元排列

在表 4.3 中,提供三種演算法以亂數和獨立字元取排列之平均反轉次數,以 我們的演算法為基準,分別標示出較多於我們的演算法平均反轉次數:

表 4.3 : 三種演算法平均反轉次數之比較表

(60)

表 4.4 提供三種演算法以亂數和獨立字元取排列之執行時間,由此表可知序 列數(N)越小,其執行時間皆為相同,一直到序列長度為 500 時,其執行時間 有了些微的差距,但差距不大。當序列長度為 1000 時, Gates 及 Papadimitriou 演算法、Fischer 及 Ginzinger 演算法和我們的演算法有明顯差距。而亂數排列與 獨立字元排列間,執行時間也有些微差距,其中以執行獨立字元排列則需較多的 執行時間。

表 4.4 : 演算法之執行時間

(61)

4.5 演算法最佳解之上限值

假設煎餅數目為 n,Gates 及 Papadimitriou[11]首先於 1979 年提出上限值為

n

n

1.6667 3

5⎟ ≈

⎜ ⎞

⎛ 。最近 Chitturi 等[6]學者於 2009 年設計採計分數的趨勢函數,推

導出

n

1.6363

n

11

18⎟ ≈

⎜ ⎞

⎛ 上限值,但是極為複雜及不易懂。針對此問題,吳及張[23]

利用線性規劃方法針對 Chitturi 等人演算法,簡易且有效率地同樣推導出

n

n

1.6363 11

18⎟ ≈

⎜ ⎞

⎛ 上限值。

我們的演算法利用線性規劃方法推導出 2n - 3 上限值。首先設計線性規劃的 目標函數(Objective Function),針對我們的演算法四大類字首反轉情形,分別給 予變數並乘上其反轉次數 f,累加後取最大值形成目標函數。式(4.1)為目標函數:

‹ Maximize

obj: X1 + X2 + 2X3 + X4 + X5 + X6 + 3X7 + 2X8 + 2X9 + 2X10 ---(4.1)

接著設計線性規劃限制式(Constraints),共有三條。式(4.2)為考慮相鄰點 a 變化,最後為 n-1;式(4.3)為考慮獨立字元 s 變化,最後為 0;式(4.4)為考慮相鄰 點 a 及獨立字元 s 關係,得到 s + 2a > n。

‹ Subject to

cl: a + X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 = n - 1 ---(4.2)

c2: s - 2X1 - X2 - X3 - X4 - X5 - X8 = 0 ---(4.3)

c3: s + 2a > n ---(4.4) 最後執行結果為式(4.5)至式(4.9):

(62)

X1 = n / 2 ---(4.5)

X7 = (n / 2) - 1 ---(4.6)

s = n ---(4.7)

Other variables are all zero ---(4.8)

obj = 2n - 3 ---(4.9)

根據結果可知利用字首反轉方式,最少反轉次數上限值為 2n - 3。其中起始 狀態相鄰點 a 為 0,獨立字元 s 為 n。字首反轉四大類中, X1 執行次數為 n / 2 以及 X7 執行次數為(n / 2) - 1,其餘皆為 0。

(63)

第五章 結論

基因重組問題為給定兩個不同物種,擁有相同基因卻有不同的基因排列順 序,研究如何經由反轉排序彼此轉換。其中字首反轉排序問題,目的為利用字首 反轉方式,找出最少反轉次數。目前相關研究,在基因序列長度 17 以下已找出 最佳解,但長度 18 以上最佳解仍未知。

目前已被提出的啟發式演算法主要有兩個: Gates 及 Papadimitriou 演算法,

以及 Fischer 及

Ginzinger

演算法。本論文針對此問題,提出一個有效率地啟發式 演算法。實驗結果說明我們所提出的演算法,在長度 17 以下,最少反轉次數接 近最佳解。

我們針對序列長度 18 以上最佳解未知、Gates 及 Papadimitriou 的啟發式演 算法的環狀結構,以及 Fischer 及 Ginzinger 的啟發式演算法的獨特循環結構,提 出我們的啟發式演算法,利用字首反轉排序找出最少反轉次數,實驗結果說明我 們的演算法明顯優於上述兩個主要啟發式演算法。

(64)

5.1 研究成果

本篇論文中,首先介紹何謂基因重組,其中基因重組為針對具有相同基因組 之兩種不同物種,利用反轉方式進行演化過程。接著第二章説明 Gates 及 Papadimitriou 的啟發式演算法並利用範例來執行字首反轉排序,並將排列反轉成 環狀結構,為了將此環狀結構反轉成完全排列,需要加上額外的反轉次數;第三 章中說明 Fischer 及 Ginzinger 的啟發式演算法並利用範例來執行字首反轉排序,

其排列可能會反轉成獨特循環結構,為了將此獨特循環結構反轉成完全排列,需 要加上額外的反轉次數。

針對 Gates 及 Papadimitriou 演算法中產生出來的環狀結構和 Fischer 及 Ginzinger 演算法中產生出來的獨特循環結構,最後提出我們設計出來的啟發式 演算法,利用無向字首反轉排序,非但沒有形成環狀結構也沒有獨特循環結構,

經過比較分析後,我們提出來的演算法,執行字首反轉排序所得到的反轉次數平 均數較少於前二者。

討論三種演算法之執行結果,接著比較分析字首反轉排序問題。首先針對此 問題我們利用序列長度 15、16、以及 17,在最糟情況來執行字首反轉排序,經 過比較分析三種演算法之後,我們的演算法執行字首反轉所得到的反轉次數,和 最佳解差異不大,而 Gates 及 Papadimitriou 演算法、Fischer 及 Ginzinger 演算法 所得到的反轉次數和最佳解以及我們的演算法差異較大。接著我們以序列長度為 20、50、100、200、500、1000 來比較分析演算法執行之差異,而我們的演算法 執行字首反轉排序所得到之反轉次數平均數會比前二者少,最後比較分析其演算 法執行時間之差異,序列數越大其執行時間之差異度越大。

(65)

5.2 未來研究方向

本論文研究主題為基因重組之無向字首反轉排序問題,目前為止此問題最佳 解仍然為 Open problem,首先針對此問題,研究是否為 NP 或者 P 問題,並提出 證明;若基因重組之無向字首反轉排序最佳解為 NP 問題,進一步提出更有效地 啟發式演算法;擴大研究基因重組之有向字首反轉排序。

(66)

參考文獻

[1] S. Asai, Y. Kounoike, Y. Shinano, and K. Kaneko, “Computing the Diameter of 17-Pancake Graph Using a PC Cluster”, Lecture Notes in Computer Science, Vol.

4128, pp. 1114–1124, 2006.

[2] V. Bafna and P. Pevzner, “Genome rearrangements and sorting by reversals”, SIAM J. on Computing, Vol. 25, pp. 272-289, 1996.

[3] D. Bass and I. Sudborough, “Pancake problems with restricted prefix reversals and some corresponding cayley networks”, Journal of Parallel and Distributed Computing archive, Vol. 63, pp. 327-336, 2003.

[4] P. Berman, S. Hannenhalli and M. Karpinski, “1.375-approximation algorithm for sorting by reversals”, Lecture Notes in Computer Science, Vol. 2461, pp.

200-210, 2002.

[5] A. Caprara, “Sorting by reversals is difficult”, Proc. of 1st ACM Conference on Research in Computational Molecular Biology, pp. 75-83, 1997.

[6] B. Chitturi, et al., “An (18/11)n upper bound for sorting by prefix reversals”, Theoretical Computer Science, Vol. 410, pp.3372-3390, 2008.

[7] D. Christie, “A 3/2 Approximation algorithm for sorting by reversals”, Proc. of 9th ACM-SIAM SODA, pp. 244-252, 1998.

[8] D. Clark and L. Russell, “Molecular Biology Made Simple and Fun”, Cache River Press, 1997.

[9] H. Dweighter, “Stack of Pancakes”, Amer. Math. Monthly, Vol. 82, pp. 1010, 1975.

[10] J. Fischer and S. Ginzinger, “A 2-approximation algorithm for sorting by prefix reversals”, Proc. of ESA: 13th Annual European Symposium, pp. 415-425, 2005.

[11] W. Gates and C. Papadimitriou, “Bounds for sorting by prefix reversals”,

(67)

Discrete Mathematics, Vol. 27, pp. 47-57, 1979.

[12] S. Hannenhalli and P. Pevzner, “Transforming men into mice (polynomial algorithm for genomic distance problem)”, Proc. of the 36th Annual IEEE Symposium on Foundations of Computer Science, pp. 581-592, 1995.

[13] S. Hannenhalli and P. Pevzner, “Transforming cabbage into turnip: polynomial algorithm for sorting signed permutations by reversals”, J. of ACM, Vol. 46, pp.

1-27, 1999.

[14] M. Heydari and I. Sudborough, “Sorting by prefix reversals is NP-complete”, to be submitted, 1993.

[15] M. Heydari and I. Sudborough, “On the diameter of the pancake network”, J.

Algorithms, Vol. 25, pp. 67-94, 1997.

[16] N. Jones and P. Pevzner, “An introduction to bioinformatics algorithms”, MIT Press, Cambridge, 2004.

[17] J. Kececioglu and D. Sankoff, “Exact and approximation algorithms for the inversion distance between two permutations”, Algorithmica, Vol. 13, pp.

180-210, 1995.

[18] Y. Kounoike, K. Kaneko, and Y. Shinano, “Computing the diameters of 14 and 15 pancake graphs”, Proceedings of the International Symposium on Parallel Architectures, Algorithms and Networks, pp. 490–495, 2005.

[19] C. Makaroff a nd J. Palmer, “Mitochondrial DNA rearrangements and transcriptional alterations in the male sterile cytoplasm of Ogura radish”, Mol.

Cell. Biol., Vol. 8, pp. 1474-1480, 1988.

[20] J. Palmer and L. Herbon, “Plant mitochondrial DNA evolves rapidly in structure, but slowly in sequence”, J. Mol. Evolut, Vol. 27, pp. 87-97, 1988.

[21] P. Pevzner, “Computational molecular biology: an algorithmic approach”, MIT

(68)

Press, Cambridge, 2000.

[22] H. Sturtevant and T. Dobzhansky, “Inversions in the third chromosome of wild races of Drosophila pseudoobscura, and their use in the study of the history of the species”, Proc. of the National Academy of Sciences of the United States of America, Vol. 22, pp. 448-450, 1936.

[23] 吳哲賢和張正佳, “基因重組之字首反轉排序最佳解上限值問題”,二十七屆 組合數學與計算理論研討會, pp. 68, 2010.

[24] https://www.chu.edu.tw/~m09720004/index.php.

參考文獻

相關文件

我們一般所探究的不僅是科學及其經驗 方式的問題―我們所探究的是人的世

形成 形成 形成 研究問題 研究問題 研究問題 研究問題 形成問題 形成問題 形成問題 形成問題 的步驟及 的步驟及 的步驟及 的步驟及 注意事項 注意事項 注意事項

課輔師資人力的不足,往往也成為學童持續學習的重大問題。也因此我們長

近年,各地政府都不斷提出相同問題:究竟資訊科技教育的投資能否真正 改善學生的學習成果?這個問題引發很多研究,嘗試評估資訊科技對學習成果 的影響,歐盟執行委員會聘請顧問撰寫的

回應電子平台問題 自主探索 考察點額外講解 支援學生.

問題類型 非結構化問題 結構化問題 結構化問題 結構化問題 學習能力 不具學習能力 不具學習能力 自錯誤中學習 自錯誤中學習 學習能力 不具學習能力 不具學習能力

在選擇合 適的策略 解決 數學問題 時,能與 別人溝通 、磋商及 作出 協調(例 如在解決 幾何問題 時在演繹 法或 分析法之 間進行選 擇,以及 與小組成 員商 討統計研

工作紙 合作學習 同質分組 腦基礎 電子學習 自主學習 異質分組 翻轉教室 生活應用 提問技巧 探究式..