五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第 73 講:計算機算法

2021-11-02 01:20 作者:SunnieShine  | 我要投稿

今天我們來介紹一些基本的計算機編程算法。它對于計算機的解題來說也是相當重要,但由于它的算法也顯得很暴力,所以這一類算法也被數(shù)獨界稱為Brute Force。我們來看一下。

不過教程為了面向廣大讀者,我們不會詳細給出每一種思路的算法的源代碼。

Part 1?特雷伯爾表

這一種方法名字比較多,考慮到直譯“強制網(wǎng)”會和網(wǎng)技巧名稱產生沖突,所以沒有使用這個翻譯模式,它的英文名有Forcing Net、Trebor's Tables和Tabling三種,都是等價的意思,而在編程里,它更靠近表格存儲的運算,所以這里我們采用的是表格的名稱的直譯,即特雷伯爾表。你可以把這個技巧被理解為動態(tài)強制鏈組,即在強制鏈組內包含動態(tài)分支的現(xiàn)象,甚至在分支上還帶有分支的情況。

這一類的算法通常復雜度都相當大。如圖所示。

這樣的算法包含兩種計算思維:矛盾型(Contradiction)和驗證型(Verity)。由于顯得比較暴力,所以這一點這里提一下即可。

此時請參考如下的在GitHub上的Hodoku代碼的倉庫:

https://github.com/Sunnie-Shine/Hodoku,

并找到上述兩個文件即可。

Part 2?回溯

回溯是一種比較死板的思維。它嘗試為r1c1的第一個候選數(shù)(r1c1(1))假設為真,然后嘗試以這個填法來嘗試r1c1所在的行列宮是否存在重復。如果重復了,就說明了數(shù)字填錯了,我們就可以反推出r1c1(1)是錯誤的;然后我們再次嘗試r1c1 = 2,然后依然看r1c1的所在行列宮里是否存在重復。如果不重復的話,我們就繼續(xù)假設r1c2的填數(shù)(從1開始)。

以這樣的形式,直至得到整個盤面,所以這個算法是顯得很暴力的,但它作為數(shù)獨的基本算法之一,需要編程學習的朋友們記住和靈活使用,我們將代碼列到了本教程的附錄之中。

Part 3?舞蹈鏈

舞蹈鏈(Dancing Links for Sudoku,簡稱DLX,取Dancing的D、Links的L和[ks]組合的發(fā)音X),是一種算法,同時也可以看作是一種數(shù)據(jù)結構,因為它在計算過程之中,使用到的是一種特殊的鏈表結構——雙向循環(huán)十字鏈表(Bidirectional Orthogonal Linked List)。它為普通鏈表的使用增加了更加有趣的使用:雙向和十字。它不僅僅可以完美解決數(shù)獨的“行列宮不重復”的情況,還能解決類似于這樣的其他類型的謎題,例如八皇后問題(Eight-queen Puzzle)等。不過八皇后問題依然可以通過回溯得到解。不過,這個算法的實現(xiàn)原理比較復雜,和之前的Forcing Net一樣,我們將不在此作出探討,不過我們會在附錄里列出舞蹈鏈解決數(shù)獨問題的算法代碼(C#語言版本,熟悉Java的可以類比,并給出Java和C#不同的地方,方便你進行轉換)。

Part 4?Linq算法

在C#語言里,我們擁有一種特殊的語法和函數(shù)庫:Linq。Linq是Language Integrated Query,即語言集成查詢的縮寫,取了L、in、q三部分湊起來的,讀作/l??k/(讀音類似于單詞link)。

從名字上可以看出,它實際上在編程語言的層面上實現(xiàn)了SQL那一套的查詢操作,不過是輕量級的;而本質上,Linq提供的是可使用foreach循環(huán)的IEnumerable<T>和IEnumerable對象的一些擴展方法,用于遍歷集合,以完成類似于SQL的增、刪、改、查的操作。因此在C#里,我們將使用Linq函數(shù)庫來操作程序變量的行為為Linq to Objects,即應用于對象的Linq。

數(shù)獨里,我們可以使用Linq算法,即采用Linq的查詢修改功能來為一個盤面的信息進行修改和查詢。它的大體思路是,逐個查詢盤面表示的信息為空的單元格,并嘗試使用單元格的所有候選數(shù)挨個替換它,然后迭代執(zhí)行的一種思維方式。

至此,整個教程就全部結束了。后面的附錄給出了教程的一些附帶內容。


第 73 講:計算機算法的評論 (共 條)

分享到微博請遵守國家法律
嫩江县| 绥江县| 元氏县| 镇赉县| 分宜县| 太保市| 景宁| 贡嘎县| 巫溪县| 贞丰县| 云南省| 小金县| 清水河县| 丹凤县| 团风县| 墨竹工卡县| 郓城县| 珲春市| 温州市| 汝城县| 陈巴尔虎旗| 砀山县| 双峰县| 遵化市| 浙江省| 麻城市| 福清市| 嘉荫县| 石家庄市| 恩平市| 英德市| 广南县| 姜堰市| 承德市| 浏阳市| 华亭县| 铁岭县| 周口市| 永善县| 大足县| 韩城市|