跑得快算法分析(多叉树深度递归)

由于跑得快牌数量较少,可以考虑使用枚举所有组合,并获取其最大权值出牌

基本思路:

类似于多叉树,每一个数节点为一个出牌组合,例如 3445566778,这种情况下最好的组合为34567 45678 较次一点为 44 55 66 77 3 8

在考虑生成子节点时,考虑 对子 顺子 连对 三带 剩下的则为单张,单张不能与其它牌组合, 由于跑得快第一要点为手上的牌越少越好,因此拿到出牌权限时因该先出派最多的组合。因此如果能建立一颗树,其中树跟到其子节点为出牌组合,选取其中权值最大的组合(即能把牌出的最多),则为最优。

权值:按照跑得快规则 3 4 5 6 ... A 2其值越来越大,按照出牌思路,一般先出小牌,再出大牌。因此权值为 3 4 5 6 7 ... A 2 其权值越来越小,换句话说,如果有 33 55 77,33权值最大 77 权值最小,在相同情况下33优先出。

再将多叉树与权值组合,按照第一个例子 3445566778 ,34567 45678 其权值大于 44556677,在生成树时,单张牌不在生成子节点考虑范围内。

生成多叉树细节:

以3445566778考虑,多叉树至少有四个节点,拆出 对子 顺子 连对 三带 ,以其中顺子为例

首先抽取其中最大的顺子,345678,然后对其排列组合,可以分解成34567 45678 345678

然后再将其抽取的牌从手牌中删除,再对其对子 顺子 连对 三带判断,直至找不到牌为止。

然后再计算根节点到子节点这组合的权值,与全局最大值进行比较,取全局最优,那么理论上这个组合就为当前牌的最优解。

下面为34455667788的多叉树,由于树太大,所以选取其中一种路径

 

由于连对和对子其实为同一种,因此权值考虑时要给予奖励,例如权值(4455) =(权值(44)+权值(55))*1.1

其他也类似

缺点:

计算量较大,需要枚举所有可能性,当手牌数量增加,计算量成指数增长。

总结:

在接近一个月的测试中,三人对战前两名为胜利则平均胜率为65左右。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值