• 沒有找到結果。

三個演算法比較分析

在文檔中 中 華 大 學 (頁 54-61)

第四章 我們的演算法

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 演算法差異較大。

表 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 之平均數。由此可說明利用我們的演算法執行字首反轉排序所得到之反轉次數平 均數會比前二者少。

圖 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 之平均數。由此可說明利用我們的演算法執行字首反 轉排序所得到之反轉次數平均數會比前二者少。

圖 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 之平 均數。由此可說明利用我們的演算法執行字首反轉排序所得到之反轉次數平均數 會比前二者少。

圖 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 之平均數。由此可說明利用我們的 演算法執行字首反轉排序所得到之反轉次數平均數會比前二者少。

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

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

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

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

表 4.4 : 演算法之執行時間

在文檔中 中 華 大 學 (頁 54-61)

相關文件