



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Project2:Sudoku實驗報告一、 算法描述求解Sudoku讓人最容易想到的方法是窮舉每個方格可能的值,如果符合條件,則得到解,不符合條件則進(jìn)行回溯。通過遞歸的方法,顯然可以得到數(shù)獨的解。我想到的簡單的遞歸方法,是每一行從左到右,試驗每一個方格可能的數(shù)字,進(jìn)行遞歸。這種方法看似非常麻煩,實際上對于一般的數(shù)獨題,速度是非常快的,思想比較簡單,寫出來的代碼也非常簡單、易懂。算法1:簡單遞歸方法從第一個格開始,從1到9試驗,是否滿足行、列、九宮格互不相同的條件。若滿足條件,則填入該數(shù)字,再試驗下一個格。當(dāng)一個格子出現(xiàn)沒有數(shù)字能填的情況時,說明已經(jīng)填的數(shù)字有誤,回溯,再進(jìn)行遞歸。算法2:優(yōu)化的遞歸算法先遍歷所有格子,統(tǒng)計每種格子可能出現(xiàn)數(shù)字的個數(shù)。每次挑選可能出現(xiàn)數(shù)字個數(shù)最少的格子來進(jìn)行遞歸。設(shè)置三維數(shù)組possijk來存儲可能出現(xiàn)數(shù)字的信息。possij0記錄i行j列的格子可能出現(xiàn)數(shù)字的個數(shù),possijk(1=k=9) 若possijk=1,表示k可能在(i,j)格出現(xiàn)。若possijk=0,表示k不可能在(i,j)格中出現(xiàn)。每次找possij0最小的格子,來進(jìn)行下一個遞歸。算法3:生成數(shù)獨棋盤的算法我最開始的想法是窮舉法,隨機(jī)生成滿足行各不相同的9行,再判斷9宮格、每列是否符合要求,符合條件時,隨機(jī)生成停止。然而,這種算法的當(dāng)然時間復(fù)雜度顯然是過高。第一步的隨機(jī)生成的次數(shù)是9*99/P99=9608。隨機(jī)生成一組棋盤耗時就非常大。后來,我從求解的個數(shù)的程序獲得啟發(fā)。算法二對于1000多組解的數(shù)獨棋盤,解起來也很快。隨機(jī)生成填9個方格,再用算法一的方法解出來,取第一組正確的解作為棋盤即可生成填好的棋盤。再把一定數(shù)量的格子的數(shù)字隨機(jī)刪除,計算解的個數(shù)。如果解唯一,就得到了棋盤。二、 數(shù)據(jù)結(jié)構(gòu)這兩種算法的數(shù)據(jù)結(jié)構(gòu)不是非常復(fù)雜,只是普通的數(shù)組。算法一:數(shù)組aij算法二:數(shù)組aij和possijk算法三:數(shù)組aij和possijk三、 時間效率分析算法1:這種算法在tsinsen系統(tǒng)上只用了15ms得到全部答案。雖然這種算法在tsinsen系統(tǒng)的測試中有很好的表現(xiàn),但是我試了試在幾道骨灰級難度的題,發(fā)現(xiàn)這種算法可能會用到10秒以上的時間,并且測試數(shù)據(jù)不同,時間差異非常大。 我認(rèn)為,這種算法的漏洞在于,如果開始的格子可能出現(xiàn)的數(shù)字非常多,遞歸樹開始的枝會非常多。并且,我們一般做數(shù)獨題,都會先挑可能出現(xiàn)數(shù)字個數(shù)最少的格子來填,充分利用了已知條件。然而,這種算法只按格子的行列順序來試驗,顯然非常傻。于是,我想出了第二種算法。 算法2:非常令人失望的是,雖然它能在短時間內(nèi)解出骨灰級題目,但是,和上一個算法相比,對于簡單的題目,它比較耗時。在tsinsen系統(tǒng)中測試的時間是91ms。它的缺陷在于,每次遞歸都必須更新(i,j)格子所在的行、列、九宮格所有的元素。每次要求20個數(shù)的possij?;厮萃瑯右隆2⑶仪髉ossij的函數(shù)時間復(fù)雜度是O(n)。每一步所耗時間比上一種算法多很多。但是,總的試驗的步數(shù)能顯著減少。所以,這種算法適用于數(shù)獨解題的動畫演示和解極難題目。四、 程序結(jié)構(gòu)算法一:算法二:五、 運(yùn)行結(jié)果 五、總結(jié)和反思后來老師提高了難度,要求程序能求出多解數(shù)獨題的解的個數(shù)。幾千個解的數(shù)據(jù)都能迅速得出答案,但是幾萬個解的數(shù)據(jù),需要很長時間,更別提幾百萬的數(shù)據(jù)。這兩種遞歸的算法都有問題,優(yōu)化的空間也有限,需要更強(qiáng)大、高效的算法。這次Project讓我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酶標(biāo)儀使用方法
- 幼兒園班主任發(fā)言稿模版
- 新質(zhì)生產(chǎn)力講座大學(xué)
- 局限性胸膜間皮瘤的臨床護(hù)理
- 江西省九江市九江有色金屬冶煉廠職工子弟學(xué)校2025屆七年級數(shù)學(xué)第二學(xué)期期末復(fù)習(xí)檢測試題含解析
- 先天性馬蹄內(nèi)翻足健康宣講課件
- 手部先天性畸形的臨床護(hù)理
- 山東省平原縣2025屆數(shù)學(xué)七下期末復(fù)習(xí)檢測模擬試題含解析
- 潰瘍基因轉(zhuǎn)錄分析
- 開展2023愚人節(jié)創(chuàng)意活動方案大全
- 國開2025年《中華民族共同體概論》形考作業(yè)1-4終考答案
- 2025貴州省專業(yè)技術(shù)人員繼續(xù)教育公需科目考試題庫(2025公需課課程)
- 物業(yè)工程體系文件規(guī)范
- 2023年高考英語試卷(新課標(biāo)Ⅰ卷)含答案解析
- 大學(xué)生積極心理健康教育知到智慧樹章節(jié)測試課后答案2024年秋運(yùn)城職業(yè)技術(shù)大學(xué)
- 道路路面恢復(fù)施工方案
- 二年級下冊三位數(shù)列豎式計算(一千道)
- 業(yè)主大會表決票(示范文本)
- (獵頭)采納獵頭服務(wù)方案
- 完整的寒蔥溝水庫溢洪道設(shè)計計算說明書韓光波
- 中南林業(yè)科技大學(xué)封面空白頁
評論
0/150
提交評論