• 沒有找到結果。

實作方法

在文檔中 數獨之最少提示數研究 (頁 28-0)

第三章、 候選個數解題法

3.3. 實作方法

解說完候選個數解題法後,下一個問題就是該如何實作它?藉由集合的 定義,以位元(bits mask)代表集合的元素,集合的聯集可以透過位元的 OR 運算來達成,以下介紹實作的方法及技巧。

 以一個 16 位元代表一格中的候選數,位元 m 對應候選數(m+1),當計算多 個格子的聯集時,只需要將這些變數做 OR 運算即可。例如候選數 2、7、9 聯集候選數 1、2,對應到位元運算,可以表示為 0x142 OR 0x3 = 0x143,

可以再對應回候選數 1、2、7、9。

 9 個候選數有 512 種組合,以陣列存放這些組合的候選個數,當需要計算候 選個數時,就可以直接查表得知,如圖 16 (a)。

 搜尋 Naked N 時,只需要搜尋候選個數小於等於 N 的格子,如圖 16 (b):

當 N=2 時,需要考慮的對象只有第 1、3、4 格。

 OR 運算的過程中,若個數已經超過 N,則中斷放棄這個組合,如圖 16 (c):

當 N=3 時,考慮對象為第 3、6、9 時,當計算到第 6 格時,候選個數早已 超過 3,這時就可以停止這個組合的運算。

圖 16 Naked N 小技巧

1 1

7 8 9

2 3 2 3 2 3

7 8 9

4 5 6 4 5 6 4 5 6 4 5 6 7 8 9

1 1

7 8 9

2 3 2 3 2 3

7 8 9

4 5 6 4 5 6 4 5 6 4 5 6 7 8 9

(a)

(b) (c)

候選數 1 2 1,2 3 1,3 2,3 1,2,3 4 1,4

16位元值 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9

候選個數 1 1 2 1 2 2 3 1 2

21

22

第四章 第四章 第四章

第四章、 、 、 、改良基因重整繁衍法 改良基因重整繁衍法 改良基因重整繁衍法 改良基因重整繁衍法

為了改善之前基因重整繁衍法[1]的缺點,避免產生過多與規則衝突、

無解、多重解的盤面,本章將利用候選數提出改良方式,步驟有(1)排除規 則牴觸盤面、(2)排除多重解盤面、(3)藉由尋找盤面的特徵,找出重複盤 面的代表,加速重複盤面的檢查。

圖 18 改良基因重整繁衍法

4.1. 排除規則牴觸盤面

本研究先以候選個數解題法排除不可能的候選數,僅留下可能的候選數,

如圖 19。經過解題法的分析後,大約會剩下 1/3 的候選數,再使用迴圈逐 一測試每種可能的組合。

以候選個數解題法 過濾不可能的候選數

根據候選數產生新盤面

分析是否有多重解並略過

以盤面特徵式快速比對 或減少需要比對的數量

問題二 1/3 具有多重解 問題一 2/3 規則衝突

問題三 重複盤面驗證不嚴謹 刪除一個提示數字

23

24

(a)

(b) (c)

圖 20 多重解範例

4.3. 驗證重複盤面

由於任一數獨盤面擁有 1218998108160 個重複盤面[3],本章節會提出 盤面特徵式來代表這個盤面的特徵,即使是重複但不完全相同的兩個盤面,

25

的數字個數,共計 3x9 = 27 個數字作為特徵式,如圖 21 上方的數字列,

共分為 Digit Pattern、Column Pattern、Row Pattern。由於提示數字有 17 個,所以這三個 Pattern 內的數字和都是 17。

圖 21 盤面特徵式

根據重複盤面的定義,當發生區域對調時,對特徵式的影響僅順序上發 生改變,如圖 22。利用這個特性排序特徵式(由左至右,從大到小),作 為這個盤面的代表。先以這個特徵式與其他盤面的特徵式進行比對,如果 不相同,就表示這個盤面是新盤面。

圖 22 具有代表性的特徵式

0 2 2 3 2 2 2 2 2 1 2 2 1 2 2 2 3 2 2 1 3 2 0 2 1 1 5

Digit Pattern Column Pattern Row Pattern

1111 2222 2222 1111 2222 2222 2222 3333 2222

2222 9 2

1111 3

3333 6 5 4

2222 2 7

0000

2222 5 4

1111 4

1111 8

5555 8 7 3 6 9

Column Pattern

Row Pattern Digit Pattern

1 : 0 2 : 2 3 : 2 4 : 3 5 : 2 6 : 2 7 : 2 8 : 2 9 : 2

3 2 2 2 2 2 2 2 0

7 6 4 7 5 5

5 1 1 3 2 1 2 2 0 3 2 2 2 2 1 2 2 1

Digit Pattern Column Pattern Row Pattern

0 2 2 3 2 2 2 2 2

5 5 7 6 4 7

1 2 2 1 2 2 2 3 2 2 1 3 2 0 2 1 1 5

Digit Pattern Column Pattern Row Pattern

26

如果特徵式相同,就根據內容找出所有符合特徵式的盤面,再進行比對。

以圖 23 為例,在不影響特徵式的前提下,建立如表 3 的巢狀迴圈來執行 相互對調,進而產生 7! x (2!)6 ,共 322560 個重複盤面。

圖 23 以特徵式產生迴圈

表 3 迴圈產生範例 迴圈

迴圈迴圈

迴圈 相互對調動作相互對調動作相互對調動作相互對調動作 組合個數組合個數 組合個數組合個數 Loop 1 數字 2~8 相互對調 7!

Loop 2 行 2 / 3 相互對調 2!

Loop 3 行 7 / 8 相互對調 2!

Loop 4 列 2 / 3 相互對調 2!

Loop 5 列 4 / 5 相互對調 2!

Loop 6 列 7 / 8 相互對調 2!

Loop 7 列 456 / 列 789 相互對調 2!

5040 = 1! * (1 * 5040 * 1)

1 5040 = 7! 1

3 2 2 2 2 2 2 2 0

64 = 1! * (4 * 16)

4 = 1! * (2 * 1 * 2) 16 = 2! * (2 * 2 * 2)

2 = 2! 1 = 1! 2 = 2! 2 = 2! 2 = 2! 2 = 2!

5 1 1 3 2 1 2 2 0 3 2 2 2 2 1 2 2 1

Digit Pattern Column Pattern Row Pattern

27

第五章 第五章 第五章

第五章、 、 、 、實驗結果 實驗結果 實驗結果 實驗結果

本研究之實驗環境軟、硬體規格如下:

表 4 系統規格

以 36628 個提示數 17 盤面為測試對象,及根據一般候選數解題法所建 立的解題器,全部解題後產生如表 5(a)的數據。再根據候選個數解題法,

產生相對的集合架構,並搭配位元運算的技巧,最後產生如表 5 (b)的數 據。其中。大部分的解題法都集中在 Naked 1 及 Hidden 1,使用率上差異 不大,但受到新的架構及位元運算的影響,整體的計算速度仍有提昇。由 於其中 Naked 3 出現比率很低且耗時,所以如果略過這個解題程序,平均 解題時間會從原本的 0.767 ms 增快至 0.576 ms。

項次 規格名稱 規格描述

1 程式開發語言 Visual C++ 6.0

2 作業系統 Windows XP Professional (Service Pack 2) 3 主機 CPU Pentium-4(3GHz)

4 記憶體 RAM 512 MB RAM 5 硬碟容量 80 GB

6 測試盤面 36628個提示數17盤面

7 取得來源 2006年,取自於Gordon的Minimum Sudoku網頁

28

表 5 候選數解題法 比較表

(a) 候選數解題法

(b) 候選個數解題法

在實驗改良基因重整繁衍法時,可以利用分散式運算的方式,增加整體 處理的速度,例如多核 PC 或是多部 PC,系統架構如圖 24。以下利用多部 PC,分別針對改變提示數字個數 1 及 2 進行實驗,結果如表 6、表 7。

項目名稱 項目描述

1. 總共時間 38.5692 秒 2. 平均時間 1.053 毫秒 3. 解題法平均使用率

3.1 Naked 1 51.617 % 3.2 Hidden 1 45.376 % 3.3 Locked 2.569 % 3.4 Naked 2 0.192 % 3.5 Hidden 2 0.119 % 3.6 Naked 3 0.005 % 3.7 Hidden 3 0.002 % 3.8 X-Wing 2 0.003 % 3.9 X-Wing 3 0.003 % 3.10 Guess 0.113 %

項目名稱 項目描述

1. 總共時間 28.0945 秒 2. 平均時間 0.767 毫秒 3. 解題法平均使用率

3.1 Naked 1 96.297 % 3.2 Naked 2 2.097 % 3.3 Naked 3 0.105 % 3.4 Locked 1.389 % 3.5 Guess 0.112 %

29

當改變數字個數為 1 時,共花了 3.5 天的時間處理 36628 個盤面,雖然 產生了第一代新生子 74271 個,但經過重複盤面的檢驗後,僅 9 個是不重 複的新生提示數 17 盤面。如果以 2008 年取得的 47386 個盤面重新測試,

產生的新生盤面都是重複的,若要增加新生盤面的差異性,就要增加改變 數字個數,產生更大量且差異更大的盤面。

然而,當改變數字個數為 2 時,因為大量的多重解發生,使檢驗所需時 間大幅增加,用兩週的時間也僅能完成前 26 個盤面的統計數據,雖然單一 母體產生的唯一解盤面數量大增,但都是重複盤面。

圖 24 分散式系統架構

36628個原始盤面

PC1 產生新盤面 檢驗是否唯一解

PC n 產生新盤面 檢驗是否唯一解

PC 檢驗是否重複

資料庫 新盤面

36628個代表性盤 面,含特徵式

30

表 6 改良基因重整繁衍法之實驗結果 1

表 7 改良基因重整繁衍法之實驗結果 2

項目名稱 項目描述 (針對單一盤面)

1. 改變的數字個數 1

2. 處理所需時間 8.346 秒 3. 新生盤面 個數 9928 3.1 預先排除 個數 5993 3.2 多重解 個數 3909 3.3 無解 個數 24 3.4 唯一解 個數 2

預先排除 多重解 無解 唯一解

項目名稱 項目描述 (針對36628個盤面)

1. 總共所需時間 3.5 天 2. 唯一解盤面 總數 74271

3. 新生盤面 總數 9(以2008年的47386個盤面重測,新生數 0)

項目名稱 項目描述 (針對單一盤面)

1. 改變的數字個數 2

2. 處理所需時間 40261.71 秒 (11.18 小時) 3. 新生盤面 個數 23470336

3.1 預先排除 個數 17799881 3.2 多重解 個數 5221630 3.3 無解 個數 448814 3.4 唯一解 個數 11

項目名稱 項目描述 (針對26個盤面)

1. 總共所需時間 12.1 天 (36628個盤面約需17068天 ≒ 47年) 2. 唯一解盤面 總數 286

3. 新生盤面 總數 0

預先排除 多重解 無解 唯一解

31

第六章 第六章 第六章

第六章、 、 、 、結論與未來展望 結論與未來展望 結論與未來展望 結論與未來展望

本章綜合研究結果,針對兩個研究問題:(1)提出新的數獨解題法,使 其能在更短時間內求解,並驗證是否具備唯一解;(2)改善以前的基因演算 法,使有效且快速的產生提示數 17 的題目,並驗證是否重複,研究結果整 理如下。

新的候選個數解題法幾乎僅用Naked 1 就完成解題,解題所需時間較 傳統的候選數解題法更少。實作上也只需要製作一套解題法、一個統一的 架構,避開發生錯誤時,必須在不同的解題法間相互偵錯的困難。

改良後的基因重整繁衍法,除了應用候選個數解題法,預先過濾掉大量 規則抵觸的盤面,也可以濾掉部分具有多重解的盤面,大幅減少需要考慮 的盤面個數。在重複盤面的驗證上,也有了快速且完整的檢驗。

實驗的最後結果的確有產生新的提示數 17 盤面,所以證明改良基因重 整繁衍法的確可以產生新的盤面,但數量有限。而新產生的盤面中,依舊 沒有找到提示數 16 的盤面。而且當繼續下一步研究時,增加改變的提示數 字個數為 2 時,因為多重解的情況大量出現,使唯一解的檢查變得相當耗 時。所以,這實驗衍生了一個新的研究方向,那就是「如何快速辨識具有 多重解的盤面?」。

此外,若改以證明提示數 16 盤面不存在為目的,改良基因重整繁衍法 並沒有辦法證明是否能找出全部的提示數 17 盤面,進而證明這些盤面中沒 有提示數 16 盤面的存在。反之,如果先找出所有的數獨的解盤面,進而找 出每個盤面的最少提示數及題目盤面,這是證明最少提示數的另一個研究 方向。

32

參考文獻

[1] 林育匡,「現今最少提示數之數獨盤面產生器研究」,國立臺灣師範 大學,碩士論文,民國 96 年。

[2] Tom Davis, The Mathematics of Sudoku. Retrieved October 2008, from www.geometer.org/mathcircles/sudoku.pdf

[3] Bertram Felgenhauer, Frazer Jarvis, Enumerating possible Sudoku grids. Retrieved June 20, 2005, from

http://www.afjarvis.staff.shef.ac.uk/sudoku/sudoku.pdf

[4] Gordon Royle, Minimum Sudoku. Retrieved June 1, 2006, from

http://www.csse.uwa.edu.au/~gordon/sudokumin.php

[5] Sudoku. (n. d.). Retrieved June 1, 2006, from

http://en.wikipedia.org/wiki/Sudoku

[6] Latin square Wikipedia. Retrieved June 1, 2006, from

http://en.wikipedia.org/wiki/Latin_square

[7] Gary McGuire‘s Minimum Sudoku Page, Sudoku Checker

http://math.ie/checker.html

[8] 尤怪之家. Retrieved June 1, 2006, from

http://oddest.nc.hcc.edu.tw/

附錄

本附錄將以範例說明重複盤面之定義 式,可以得到不同盤面的方法

相同的,所以將透過以下相互對調方式所產生的盤面

 行列對調行列對調行列對調行列對調

座標位置上的行與列相互對調 盤面的翻轉。

 1 x 9 1 x 9 1 x 9 1 x 9 區域間區域間區域間區域間,,,, 第 1 列、第 2 列 第 4 列、第 5 列

8 列、第 9 列,彼此間

行與列相同,所以 調;第 4 行、第 第 8 行、第 9 行等

33

附錄 A 重複盤面之範例說明

以範例說明重複盤面之定義,以下介紹幾種透過相互對調的方 可以得到不同盤面的方法。雖然盤面不相同,但由於盤面的特性都是

所以將透過以下相互對調方式所產生的盤面,都視為重複盤面

座標位置上的行與列相互對調,相當於沿著左上右下的斜線

,,

,彼此相互對調彼此相互對調彼此相互對調 彼此相互對調

列、第 3 列等 1x9 區域彼此間相互對調 列、第 6 列,彼此間可以相互對調;及

彼此間也可以相互對調。

所以第 1 行、第 2 行、第 3 行,彼此間 第 5 行、第 6 行,彼此間可以相互對調 行等 1x9 區域,彼此間可以相互對調。

透過相互對調的方 但由於盤面的特性都是

都視為重複盤面。

相當於沿著左上右下的斜線,做

相互對調。同理,

及第 7 列、第

彼此間可以相互對 相互對調;第 7 行、

 3333 x 9 x 9 x 9 x 9 區域間區域間區域間區域間,,,, 第 1~3 列、第 4~6 互對調。

與列相同,所以第 彼此也可以相互對調

 數字數字數字數字 1~91~91~91~9 相互對調相互對調相互對調相互對調 針對盤面上出現的數字 調。

34

,,,

,彼此相互對調彼此相互對調彼此相互對調 彼此相互對調

4~6 列、第 7~9 列等 3x9 的大區域,彼此間

4~6 列、第 7~9 列等 3x9 的大區域,彼此間

在文檔中 數獨之最少提示數研究 (頁 28-0)

相關文件