• 沒有找到結果。

啟發式演算法

在文檔中 中 華 大 學 (頁 47-52)

第四章 我們的演算法

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 其排列初始字元

必須為左邊終端點之相連區塊 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 次字首反轉的動作。

表 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)。

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)。

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

在文檔中 中 華 大 學 (頁 47-52)

相關文件