如何编写一个使用贪婪算法设计的Java代码来解决此问题?

时间:2019-02-13 19:16:36

标签: java algorithm greedy

3 个答案:

答案 0 :(得分:0)

这个编程问题看起来像是学校的练习;显然,我们鼓励您自己努力……无论如何,这里有一些提示。


我们首先需要选择一个贪婪算法,即基于某种启发式算法的算法,该算法允许我们基于对下一家酒店的局部最优选择(要执行的选择)来“优化”总成本在每一步中。)

因此,我们需要提供一个适用于每个步骤的规则,使我们能够选择下一家酒店。

作为一种局部最优选择:我们可以选择每天前进,如果从x点开始,我们会停靠到最靠近x+200点的下一家酒店。< / p>

使用某种伪代码:

//start from 0
cost=0
position=0
while(position<end)
    //find the next best hotel h (based on the rule above)
    h=...
    //compute the daily_cost
    daily_cost=(h-position)^2
    //move to the selected hotel
    position=h
    //and increase the total cost:
    total_cost=total_cost+daily_cost

position=end时:我们已经到达,并且我们已经根据该贪婪算法计算了total_cost

答案 1 :(得分:0)

据我所知,您需要覆盖的总距离为a(n)。由于我们必须待在最后的酒店里,所以我想提出一种反向模式的贪婪解决方案。

如果a(n) - a(n-1)不能大于200英里。因此,我想选择一家a(i)a(n)之间的旅馆a(n) - 200。现在,当我们考虑采用贪婪的方法时,您需要选择该酒店并将该酒店保存在您的访问列表中。

现在,从那里向前移动,然后选择距离a(i)a(i) - 200之间的下一家酒店,依此类推,直到到达起点。

我没有编写任何代码,因为我认为这是家庭作业。但是,我认为您明白了。希望有帮助!祝你好运。

答案 2 :(得分:0)

不要向前犁并立即开始编码:首先分析任务

贪婪表示尽可能采取下一步行动从不回头;限制或不允许超前)。
假设dₓ是第x天的距离,然后看一下150、200、250英里处的酒店:
-如果费用为200-dₓ,
总费用为150,第一距离为200以及150
-如果费用为(200-dₓ)²,
总费用为22500(第一距离为200),只有12500(150):
最好使每个绝对差异尽可能接近所有其他差异
-如果没有(完整的)前瞻,则您不知道所有剩余的内容:
下一个差异应尽可能接近预期平均剩余量
-在其他所有条件相同的情况下,一日游的次数要多于一日游的次数
-提前1天,则可以选择费用为50和2500的单日游。


how I can write a Java code that solves this problem
再次访问 greedy 并考虑一个(更多)示例(与往常相同):