最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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 講:計算機算法的評論 (共 條)

分享到微博請遵守國家法律
滦平县| 平顶山市| 南和县| 沅陵县| 呼和浩特市| 福鼎市| 荔波县| 突泉县| 行唐县| 东方市| 铜山县| 临桂县| 开远市| 屏东市| 大安市| 新田县| 九寨沟县| 东乡县| 确山县| 吴桥县| 新昌县| 茂名市| 安丘市| 鲜城| 五家渠市| 辽中县| 舟山市| 扬中市| 木兰县| 建昌县| 虎林市| 井研县| 柳河县| 永定县| 宁远县| 离岛区| 黔西县| 巨野县| 临泉县| 伊川县| 花莲市|