这个想法是将所有正确的元素向左和向左移动到右边,中间有一个空白区域。元素可以跳过一个或两个部分进入空白区域。
LLL[ ]RRR
我正在尝试为这项任务考虑一种启发式方法。启发式是否有助于找到可能的解决方案,或实际上返回一些移动作为解决方案?我该如何表达这样的启发式?
答案 0 :(得分:8)
听起来你对启发式是什么感到有些困惑。
粗略定义是“简化假设”或“体面猜测”
例如,假设您必须组建一个篮球队,并且您有关于想要列出其联系信息,出生日期和身高的人的情况说明书。您可以在测试每个候选人的特定技能时进行试训;但是,这需要引入所有候选人,这可能需要很长时间。你使用启发式来缩小搜索范围 - 只调用至少6英尺2英寸高的人。这可能会忽略一些伟大的篮球运动员,但这是一个相当不错的猜测。
启发式的另一个例子:您正在尝试使用最少数量的硬币来支付账单。启发式(简化方法)是首先选择具有最大值(小于剩余账单)的硬币,从账单中减去该值,然后重复。这并不能保证每次都能正常工作,但它会让你在大多数时间都能到达正确的社区。 p>
你的问题的启发式可能是“永远不要向右移动Ls,永远不要向左移动Rs” - 它通过从一开始就消除一些可能性来缩小所有可能移动的“搜索空间”。 / p>
答案 1 :(得分:1)
您在寻找启发式还是算法?启发式可能会或可能不会解决给定的问题。它实际上只是为了指出解决方案可能存在的方向。算法确实应该解决给定的问题。
答案 2 :(得分:0)
启发式通常是一种“提示”,通常(但并非总是)会指导您的程序指向正确的方向。使用启发式扫描可以加快您的程序(您的算法),通常,但并非总是如此。这就像对算法的“建议”,这种建议通常是正确的。
我不确定你在寻找什么,因为描述有点模糊。如果你想要算法,你将需要研究特定动作对当前情况会产生什么影响,以及每次所有可能的动作向前迈进的方法,实际上是遍历状态树(即状态树将会发展的状态)你做了一个特定的动作序列。)
您还可以看到,当前位置与您想要达到的目标(您想要的最终位置)的关系有多接近。因此,不要计算从初始状态到所有可能路径的所有路径。如果找到最终状态,您可以根据启发式“当前状态与所需状态的接近程度”来指导算法,并且只遍历树的一部分。