中國象棋局面總數粗略計算

將9=C(9,1)
士5=C(5,2)+C(5,1)+1(無士)=16
象7=C(7,2)+C(7,1)+1(無象)=29
兵55=C(50,5)+..+1(無兵)=3478761+341055+26235+1485+55+1=3847592
車90=C(90,2)+C(90,1)+1(無車)=4005+90+1=4096
馬90=C(90,2)+C(90,1)+1(無馬)=4005+90+1=4096
炮90=C(90,2)+C(90,1)+1(無炮)=4005+90+1=4096

3847592*4096*4096*4096*29*16*9=122683692145199546368*9=1104153229306795917312(1GT=1ZB=十萬億億)

>> 由於互相佔位, 實際數量要比這個數小得多:

將不在士位: 4 此時士爲16種
將在士位: 5 此時士只有C(4,2)+C(4,1)+1=11

那麼將士總數爲: 16*4+5*11=119 < 16*9=144

同樣, 佔份額最大的兵也可以大幅度降低, 如兵的可選位置數量爲45-1-對方未過河棋子數

還要減去己方已過河棋子數量, 減一是對方將帥必定佔去一格, 加上未過河的10個位置

要精確分析會很複雜, 但結果的局面數會更小, 那是才能論證需要多少存儲空間, 多少運算量, 等等


局面的存儲最節省空間的就是求餘, 以上計算就能用70個比特存儲(僅其中一方)

實際上, 當局面數量達到32位(40億時)就可以涵蓋絕大多數情況, 用軟件去對人時基本無敵了
若每個局面使用一個32位哈希主鍵, 外加2字節走法, 那麼佔用的空間僅爲: 6*4G=24G字節
可以輕鬆的保存U盤或者固態硬盤中

將局面140位最多18字節再加進來, 佔用空間僅爲: 24*4G=96G, 可以輕鬆存在128G固態硬盤裏
設想走法的橫縱分別不大於9和10, 也就是可以餘9爲列, 除9餘10爲行, 那麼8100(13位)就能存儲着法
則存儲兩個着法外加6位棋子總數和鍵值, 就能保存到64位結構體中, 大小爲32G

16位,24位的數量分別爲64K和16M就更小, 如64K每個6字節才384K, 連開局庫都算不上

發佈了285 篇原創文章 · 獲贊 747 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章