• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      隨機化算法在N皇后問題中的應(yīng)用

      2014-09-17 14:40:02陳曉梅胡春花
      電腦知識與技術(shù) 2014年22期

      陳曉梅 胡春花

      摘要:回溯法是用于求解N后問題的常用算法。典型的回溯算法在N后問題的解空間中,用于判斷合法子樹的剪枝函數(shù)的時間效率較低。對于N后問題的任何一個解而言,每個皇后在棋盤上的位置無任何規(guī)律,更像是隨機放置的。因此在回溯算法中引入隨機化方法來解決N后問題,能獲得很好的時間效率。

      關(guān)鍵詞:回溯法;隨機化算法;時間效率

      中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2014)22-5325-03

      在 n行n列的棋盤上需要放置n 個皇后,規(guī)定任何 2 個皇后不能放在同一行或同一列或同一斜線上。N皇后問題就是求滿足條件的可行布局數(shù)量,或求出其中一個可行布局。該文討論求N皇后問題的一個可行布局。

      回溯法是求解N皇后問題的典型算法。以當(dāng)前普通配置的計算機的運行速度而言,在n值小于28時,典型的回溯法能夠在兩秒鐘之內(nèi)獲得其中一個可行布局。在n值大于100時,由于運行時間過長,無法獲得結(jié)果。引入隨機化算法,將之與典型回溯法結(jié)合,可以有效地提高算法的時間效率。

      1 求解N皇后問題的典型回溯算法

      用典型回溯法解這個問題的思路是,以完全n叉樹來表示該問題的解空間,樹中根節(jié)點設(shè)為第0層,第i層的節(jié)點表示棋盤在第i行的待選列。算法從n叉樹的根節(jié)點開始,采用深度優(yōu)先的方式進行搜索。對于當(dāng)前的搜索到的某個節(jié)點,算法判斷該節(jié)點是否同時滿足約束條件①和②,若滿足,繼續(xù)按深度優(yōu)先的方式進行搜索;否則,跳過對以該節(jié)點為根的子樹的搜索,回溯至當(dāng)前節(jié)點的父節(jié)點,繼續(xù)按深度優(yōu)先方式進行搜索。當(dāng)搜索至葉子節(jié)點,判斷該節(jié)點滿足約束條件,若滿足,則獲得了關(guān)于該問題的一個合理布局。

      在算法中,使用Place函數(shù)作為剪枝函數(shù),對當(dāng)前節(jié)點使用Place函數(shù)進行合法判斷,跳過不滿足約束條件的子樹,以提高時間效率。Place函數(shù)使用前面的條件①和②作為判斷條件。

      典型回溯法求N后問題的一個可行布局的算法如下:

      2 使用隨機化算法與回溯法結(jié)合求解N皇后問題

      其基本思想是,使用隨機化算法獲得前t行的合理布局,再使用回溯算法獲得后面行的合理布局。函數(shù)Random(n)用于返回0~n-1之間的隨機整數(shù)。函數(shù)QueensLV(t)用于隨機生成棋盤前t 行的一個布局,其返回值為布爾型,表示本次調(diào)用獲取隨機布局成功或失敗。Backtrack(t)是一個遞歸函數(shù),其根據(jù)前t-1行的確定布局,獲取第t~n行的一個合理布局。其返回值為布爾型,表示本次遞歸獲取第t~n行布局成功或失敗。

      3 實驗結(jié)果及分析

      使用Dev- C++分別編寫了關(guān)于求N皇后問題的一個合理布局的典型回溯法程序和隨機算法結(jié)合回溯法的程序,在CPU為Core2 Duo 2.10 GHz,操作系統(tǒng)為Windows 7的計算上運行,它們的運行時間如表1所示:

      從表1和表2可以看出,使用回溯法與隨機化算法結(jié)合比單純使用回溯法能更快地獲得其中一個可行布局,其程序運行時間明顯優(yōu)于典型回溯法,當(dāng)n為30 時,后者需要接近3分鐘的時間才能獲得一個可行布局,而前者使用4毫秒即可。當(dāng)n值增加到200時,后者可以1秒內(nèi)獲得答案,這是前者所望塵莫及的。分析其原因,是因為對于N后問題的任何一個解而言,每個皇后在棋盤上的位置無任何規(guī)律,更像是隨機放置的。因此在回溯算法中引入隨機方法來求解N后問題的一個可行解,能獲得很好的時間效率。

      參考文獻:

      [1] 王曉東.計算機算法設(shè)計與分析[M]. 4版.北京:電子工業(yè)出版社,2012.

      莒南县| 新野县| 舒城县| 靖州| 沂源县| 岗巴县| 普陀区| 射洪县| 镇沅| 绥滨县| 玉门市| 泰州市| 安岳县| 吴忠市| 邯郸县| 喀什市| 万全县| 吴忠市| 辰溪县| 思茅市| 玛纳斯县| 夏津县| 肃宁县| 肥东县| 永城市| 进贤县| 于都县| 屏南县| 安庆市| 衢州市| 容城县| 台东县| 安国市| 酒泉市| 厦门市| 平遥县| 青海省| 石门县| 闽清县| 巴南区| 沾益县|