回溯法消消乐

本文详细介绍了使用回溯法解决消消乐最大得分问题,并探讨了剪枝设计,包括参数准备、剪枝判断及其优缺点。通过对不同参数的分析,讨论了如何优化剪枝以平衡速度和准确度,最后提出通过拟合小规模参数来预测大规模场景下的参数,以提高方法的可行性。
摘要由CSDN通过智能技术生成

目录

问题描述

一、无剪枝回溯设计

二、剪枝设计

参数准备:

剪枝判断:

三、剪枝设计优缺点分析

缺点:

优点:

四、数据分析

五、剪枝优化:参数可控

六、问题最大规模

七、K、M、N、X分析

K(交换元素的种类):

M、N(数据规模):

X(交换步数):

八、剪枝缺点改进:预测参数


问题描述

1、在消消乐中如何计算出最大得分(假设消掉之后不会再补充)

2、分析K(元素种类)、M(棋盘行数)、N(棋盘列数)、X(交换步数)对计算最大得分的方法的影响

一、无剪枝回溯设计

以棋盘状态作为结点,每一个棋盘状态代表一个结点

以最初始的状态为初始结点,以没有可以消除元素的棋盘为叶子结点

先从左下角开始交换,判断是否可以产生新的结点,如果可以产生新的结点,则继续递归从左下角开始交换,继续判断是否可以产生新的结点,直到没有可以消除的元素时,则返回上一个结点,交换下一个位置的元素,继续判断,直到所有棋盘状态都判断过,则终止

图1

如图1,棋盘初始状态为最初结点

交换位置1和位置2,得到新的棋盘状态,即结点1

结点1没有有效的可交换的元素,返回上一层

交换位置1和4,1和4无法产生新的棋盘状态,跳过

交换位置2和3,产生新的棋盘状态结点2,在结点2中继续交换位置1和2,产生新的棋盘状态结点3

结点3没有有效的可交换元素,返回上一层结点2

结点2没有有效的可交换元素,返回上一层结点1

结点1继续交换位置2和5,得到新的棋盘状态结点4

结点4没有有效的可交换元素,返回上一层结点1

结点1往后都没有有效的可交换元素了,终止

图2

如图2,黄色箭头即为回溯的顺序

二、剪枝设计

参数准备:

在N个测试样本中,用无剪枝回溯计算每个样本的最大得分的平均分a

将无剪枝回溯的递归次数设置为1,计算出N个样本的只交换1步的平均得分b

那么a-b就代表了交换1次后继续交换所能得到的最大平均分

以此类推,可计算出交换1次、2次、3次、4次….. 后继续交换所能得到的最大平均分c1,c2,c3,c4,….cN

剪枝判断:

在新的c1,c2,c3,c4,….cN作为参数

比如说:

在100个随机生成的棋盘样本中,无剪枝回溯得到的平均分是22分,无剪枝回溯只交换1步所得到的平均分是6分,只交换2步所得到的平均分是9分,只交换3步所得到的平均分是11分

则交换1步继续交换下去后可得到的最大平均分是22-6=16分

交换2步继续交换下去后可得到的最大平均分是22-9=13分

交换3步继续交换下去后可得到的最大平均分是22-11=11分

在第k层时先判断当前得分加上此层所对应的参数是否大于当前总分

若大于,代表继续递归仍有较大机会创造出更大的总分,则继续递归

若不大于,代表继续递归能创造出更大的总分的机会比较小,则停止递归,剪掉

图3

如图3,通过参数准备得到1层后可得的最大平均分是14分

当前最大得分是20分

结点1当前得分是7分,7+14>20,那么保存结点1,继续向下递归

到了结点2的时候,结点2当前得分是4分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值