状态树搜索算法-------------抽象问题与建模思想(三只水桶分水问题)

本文探讨了如何使用状态树搜索算法解决三只水桶(8L, 5L, 3L)分8升水的问题。通过定义问题的解、分析解空间和状态树结构,建立了数学模型并设计了深度优先搜索策略。在搜索过程中,利用备忘录避免状态重复和循环,最终得出16种解决方案。" 47782659,2245081,Redis集群管理:节点移除与迁移,"['Redis', '集群', '数据迁移']
摘要由CSDN通过智能技术生成

今天看《算法的乐趣》第五章,作者提出问题:把三桶个水桶等分8升水的问题,有8,5,3L的水桶分8升水,最后的结果要在8L水桶和5L水桶中分别有4L水。

首先要定义问题的解,并分析解空间范围和拓扑结构,然后根据解空间的范围和拓扑结构设计遍历搜索算法。



建立数学模型,根节点为初始状态,叶子节点可能是最终状态,也可能是某个无法转换的最终中间状态,有多少个最终状态叶子节点就要多少种答案。



状态的数学模型与状态树:状态的数学模型可以用一个一维数组存放,状态树就是建立起节点与节点之间的联系。

倒水动作的数学模型:合法的倒水动作包含3个要素:倒出水的桶、接收水的桶、倒水的体积。{from,to,water}


搜索算法:确定状态树模型后,第二个重要的问题是:状态树的搜索算法。

可用深度优先也可以广度优先,我写的是深度优先。

状态树的搜索就是对整个树进行遍历,其中还暗含了状态的生产。


状态树的剪枝和重复状态的判断

为了避免状态树的重复和环形死循环,一定要有备忘录。

我就是在处理备忘录的时候没有理解作者的思想,所以出了bug。

后来我用往前遍历,终于成功解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值