中国象棋局面总数粗略计算

将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, 连开局库都算不上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值