以第一步检查对子为例,1手牌,对子最多出现7对,也就是C(14,2)最多有7种情况进入到下一步的检查,其他的都被裁剪掉了,计算复杂度更改为:
第二检查3个是否是1副牌,12张牌,最多有XX(10>=XX>=8)副牌的可能性,也就是C(12,3)最多有XX种情况进入到下一步检查,其他的都被裁减掉了,计算复杂度更改为:
1W次的判断,对于CPU来说,可以在万分之一秒中解决,也就是1秒中最差可以完成1W次以上的胡牌检查,这个数据看起来已经很好了,还有优化的必要吗?
手里如果有3个赖子,3个赖子可以有34*34*34种组合,每种组合放入现有的手牌中后,需要再*14,50W左右的组合需要进行检查,嗯,看起来,5秒可以搞定,对于客户端来说可以通过分步处理来解决,但体验会打个折扣,对服务器来说,压力就有点大了
AI在考虑打牌时,会模拟打牌,然后再计算手中新牌的胡牌概率,要算手中牌胡牌概率,首先要进行听牌检查,这是一个不断模拟和检查是否听牌的过程,以模拟打出3张牌为例,胡牌检查的数量,就是跟3个赖子的胡牌检查数量是一样的,AI要聪明,我们想模拟打出的牌越多,对胡牌的概率估算也就越精确,所以检查胡牌的算法需要越快越好
第二个方法目前游戏中有使用,问题主要是第一次检查还是需要时间的,另外就是缓存的数量的问题,太多会占用较多内存
4 * 10M = 40M,这仅仅是键的存储,hash表的存储效率50%左右,这样算>100M是肯定的,对于客户端程序来说,这个开销是有点大,还没有算上值的开销