999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于hash表的華容道算法研究

2023-05-30 12:21:30周揚陳伊琳韋妮君周一諾
計算機應用文摘 2023年1期

周揚 陳伊琳 韋妮君 周一諾

關鍵詞:華容道;時間復雜度;hash表

1引言

目前對華容道算法的優化主要集中在改進搜索策略和減少搜索狀態[1-2],即基于深度優先或廣度優先的改進。這兩種算法的時間復雜度都為O(V+E)[3],其中V為頂點數,E為邊數。對于華容道游戲,可以將棋盤上的每個狀態看作一個頂點,最小正方形棋子的大小視為1*1,則棋盤的大小為4*5,共20個位置。為了估算不考慮棋子重合情況,所有狀態數就是在20個位置上放10個棋子的排列,共A=670442572800種狀態,即便除去棋子重合的非法情況,也有65 880種狀態。保守估算1個狀態對應2條邊,則對于華容道游戲頂點和邊總數約為65880*3=197640。深度優先和廣度優先算法本質是在以萬為數量級的狀態中找到最優解。實際情況是,幾個經典開局都要搜索約2萬個狀態,效率較低。

鑒于此,可以考慮:(1)能否求出華容道一共幾種狀態?(2)是否能將所有狀態枚舉出來?(3)存儲所有狀態和對應最優解所需的內存空間能否接受?如果這3個問題都是肯定回答,那么就可以提前將狀態和對應的最優解存人hash表。下文將分析這3個問題。

2基本定義

定義1狀態:10個棋子在棋盤的排列方式。

定義2棋盤坐標系:棋盤左上角為坐標原點D(0,0);從坐標原點出發,水平向右為x軸正方向,長度為4;垂直向下為y軸正方向,長度為5,x與y為整數。

定義6狀態坐標:是一個長度為10的數組。第0~3個元素分別為趙云,馬超,張飛,黃忠;第4~7個元素分別為兵1,兵2,兵3,兵4;第8個元素為關羽;第9個元素是曹操。

定義7

基本狀態坐標:是一個長度為10的數組。第O—3個元素分別為4個1*2型棋子的坐標,順序記為AIA2A3A4;第4~7個元素分別為4個1*1型棋子的坐標,按順序記為BIB28384。其中,1*2型和1*1型棋子坐標按y從小到大的順序排列,若y相等,則再按x從小到大的順序排列。第8個元素為2*1型棋子的坐標,記為C:第9個元素是2*2型棋子的坐標,記為D。

圖1和圖2是兩個不同狀態,有不同的狀態坐標,但有相同的基本狀態坐標。

定義8

基本狀態:基本狀態坐標對應的狀態定義為基本狀態。

3枚舉所有合法狀態

3.1位置排列轉化為一維狀態坐標

根據一維棋子坐標的定義,d=0,20)。根據文獻[4]排列的定義及計算方法,從整數[0,20)取10個整數的排列共有P(20,10)種。每一種排列都是一個長度為10的數組,若將該種數組當作一個基本狀態坐標(數組中的每個數值對應一個一維棋子坐標),不考慮棋子重合的非法狀態,理論上共有P(20,10)=670442572800種狀態。

3.2合法狀態篩選

算法1

驗證狀態坐標是否合法

產生不合法狀態的原因是排列組合算法沒有考慮棋盤的形狀和棋子的形狀。比如,某個1*2型的棋子的坐標是(0,4),棋子就會超出棋盤范圍;若某個1*2型的棋子的坐標是(0,0),另外一個1*1型棋子的坐標是(1,0),這就會造成棋子重合。篩選合法狀態本質上是從所有狀態中去除超出棋盤范圍和棋子重合的情況,具體步驟如算法1所示。

4壓縮存儲

根據定義6和定義7.對于任意一個狀態坐標,都能求得其對應的基本狀態坐標。比如,記下“張飛”對應A1,那么可由基本狀態坐標還原成狀態坐標。基于這個事實,可以只存儲基本狀態坐標和其對應的最優解。對于基本狀態坐標,有A1~A4,B1~B4,C,D共10種棋子(圖3)。根據定義2,x軸的值為[0,4)的整數,y軸的值為[0,5)的整數,所以保存x軸的坐標需要2bit,保存v軸坐標需要3bit,保存一個棋子的坐標共需要5bit,10個棋子共需要50bit(圖4),即7個字節即可保存一個基本狀態坐標。但是,考慮到實際程序實現方便,用64位的整數(8字節)存儲基本狀態坐標。根據算法1,求得65880種合法狀態,對應65880個基本狀態坐標。

用改進的深度優先算法[5],可得到53954種基本狀態有解。一個狀態占用8字節,存儲53954種約占421KB。由實驗結果可知.53954種有解的基本狀態中,最優解最多為126步,1字節就能表示。共有10個不同棋子,需要4bit表示,移動方向有上下左右4種,要2bit表示。因此,表示移動一步要用6bit。實驗部分為了實現方便,用1字節表示移動一步。如圖5所示,0—7個字節為基本狀態坐標。第8個字節為該基本狀態坐標的最優解有幾步。假定第8個字節為116,那么之后的116個字節表示116步具體內容。116個字節之后的8個字節又是下個基本狀態坐標,以此類推。如圖6所示。

5實驗

上文已經討論過華容道游戲共有P(20,10)種狀態,執行算法1后,得到65880種合法狀態。再執行文獻[5]的算法求得53954種基本狀態有解。用Python實現該過程,把基本狀態坐標及對應的最優解保存成第4節討論的二進制文件。結果表明,該文件僅2.8 MB。將該文件存人Python的字典(相當于hash表),用于求解最優解步數最多的8個狀態(圖6)。得到的結果如表1。表1第1列為基本狀態坐標,每個棋子的坐標用一維棋子坐標表示。第2列和第3列為運行時間對比。時間保留4位小數,單位是ms。文獻[5]是用C#實現的算法,C#是編譯型靜態語言。Python是動態語言,對于執行CPU密集型的算法,C#程序的效率要明顯高于Python。但是,同樣用Python實現文獻[5]和本文算法,在同樣的硬件上運行,在語言和硬件層面,兩個算法是公平的。由表1可知,基于hash表的算法尋找最優解的時間較短,個別小于0.001ms。從理論上分析,時間復雜度0(1)要低于0(V+E),所以表1的時間從理論上分析也是合理的。

6結束語

針對目前華容道算法的效率問題,利用排列算法求得華容道游戲所有可能的狀態,刪除不合法的狀態后,對每一種狀態求解,將每種狀態及最優解保存在hash表中。本質是將圖的遍歷算法轉化成查詢hash表,將時間復雜度由0(V+E)降為接近0(1)。理論分析和實驗結果表明,利用hash表解決華容道問題可以減少找到最優解的時間。

主站蜘蛛池模板: 欧美爱爱网| 午夜视频在线观看区二区| 精品久久久无码专区中文字幕| 重口调教一区二区视频| 久久91精品牛牛| 日本五区在线不卡精品| 国产第一页屁屁影院| 亚洲第一成年免费网站| 色婷婷电影网| 久久青草视频| 午夜a视频| 国产JIZzJIzz视频全部免费| 婷婷午夜影院| 国产呦精品一区二区三区下载| 欧美日本激情| 色婷婷成人网| 成AV人片一区二区三区久久| 国产va在线观看免费| a级毛片免费播放| 欧美亚洲一区二区三区导航| 久久综合久久鬼| 亚洲小视频网站| 国产玖玖视频| 日本不卡在线播放| 亚洲黄色激情网站| 十八禁美女裸体网站| 在线免费观看a视频| 国产91小视频在线观看| 日本一区二区三区精品视频| 国产女人在线视频| 伊人网址在线| 任我操在线视频| 日韩毛片基地| 欧美日韩一区二区三| 极品国产一区二区三区| 谁有在线观看日韩亚洲最新视频| 伊人精品视频免费在线| 亚洲综合在线最大成人| 欧美精品二区| 国产日韩AV高潮在线| 2021国产精品自产拍在线| 国产福利观看| 四虎在线高清无码| 国产精品免费露脸视频| 青青草欧美| 久久精品中文字幕免费| 亚洲人成亚洲精品| 亚洲网综合| 黄色网站在线观看无码| 欧美在线视频a| 91福利一区二区三区| 国产第二十一页| 亚洲成人网在线播放| 日韩毛片在线视频| 91亚洲精选| 尤物国产在线| 狠狠v日韩v欧美v| 国产成人一级| 亚洲一区第一页| 久久久久久尹人网香蕉| 欧美精品啪啪| 国产女人18水真多毛片18精品| 亚洲综合精品香蕉久久网| 亚洲成年人片| 亚洲区第一页| 九九视频在线免费观看| 国产呦精品一区二区三区下载| 亚洲综合欧美在线一区在线播放| 啪啪永久免费av| 波多野结衣一级毛片| 久久美女精品| 就去吻亚洲精品国产欧美| 五月天在线网站| 国产青青草视频| 日韩少妇激情一区二区| 亚洲国产无码有码| 91区国产福利在线观看午夜| 亚洲福利网址| 91网址在线播放| 99久久无色码中文字幕| 精品無碼一區在線觀看 | 亚洲福利网址|