如何编写一个Java代码,通过使用贪婪算法设计解决这个问题?
问题是: 你要去长途旅行。你从0英里处开始上路。沿途有n家酒店,编号为1家≤ 我≤ n、 在英里标杆a 1 有人知道我如何编写Java代码,通过使用贪婪算法来解决这个问题吗 我已经知道的是:如何编写一个Java代码,通过使用贪婪算法设计解决这个问题?,java,algorithm,greedy,Java,Algorithm,Greedy,问题是: 你要去长途旅行。你从0英里处开始上路。沿途有n家酒店,编号为1家≤ 我≤ n、 在英里标杆a 1之间。现在,由于我们正在考虑一种贪婪的方法,您需要选择该酒店并将其保存在您的访问列表中 现在,从那里往前走,选择距离在a(i)和a(i)-200之间的下一家酒店,依此类推,直到到达起点 我没有写任何代码,因为我认为这是家庭作业。不过,我想你明白了。希望有帮助!祝你好运。不要操之过急,马上开始编码:从分析任务开始 贪婪意味着采取尽可能最好的下一步(永远不要回顾过去;展望未来是有限的或不允许的)
public static void greedy(int[] a) {
int[] hotel = a;
int[] cost = new int[hotel.length];
int[] stop = new int[hotel.length];
int dist = 0;
for (int i = 0; i < hotel.length - 1; i++) {
dist = a[i + 1] - a[i];
cost[i] = (int) (Math.pow((200 - hotel[i]), 2));
stop[i] = 0;
}
}
publicstaticvoid贪婪(int[]a){
国际[]酒店=a;
整数[]成本=新整数[酒店长度];
int[]站=新int[酒店长度];
int-dist=0;
对于(int i=0;i
但是我不知道从这里到哪里去 据我所知,您需要覆盖的总距离是
a(n)
。因为我们必须住在最后一家酒店,所以我想提出一个相反模式的贪婪解决方案
如果a(n)-a(n-1)
不能大于200
英里。所以我想选择一个酒店<代码>(i)<代码>,它位于<代码> A(n)< /代码>和<代码> A(n)- 200 < /代码>之间。现在,由于我们正在考虑一种贪婪的方法,您需要选择该酒店并将其保存在您的访问列表中
现在,从那里往前走,选择距离在a(i)
和a(i)-200
之间的下一家酒店,依此类推,直到到达起点
我没有写任何代码,因为我认为这是家庭作业。不过,我想你明白了。希望有帮助!祝你好运。据我所知,你需要走的总距离是
a(n)
。因为我们必须住在最后一家酒店,所以我想提出一个相反模式的贪婪解决方案
如果a(n)-a(n-1)
不能大于200
英里。所以我想选择一个酒店<代码>(i)<代码>,它位于<代码> A(n)< /代码>和<代码> A(n)- 200 < /代码>之间。现在,由于我们正在考虑一种贪婪的方法,您需要选择该酒店并将其保存在您的访问列表中
现在,从那里往前走,选择距离在a(i)
和a(i)-200
之间的下一家酒店,依此类推,直到到达起点
我没有写任何代码,因为我认为这是家庭作业。不过,我想你明白了。希望有帮助!祝你好运。不要操之过急,马上开始编码:从分析任务开始
贪婪意味着采取尽可能最好的下一步(永远不要回顾过去;展望未来是有限的或不允许的)。让dₓ 是第x天的距离,看看150200250英里的酒店:
-如果成本是200-dₓ,
总成本为150,第一距离为200,第二距离为150
-如果成本为(200-dₓ)²,
总成本为22500,第一距离为200,只有12500,第一距离为150:
您最好将每个绝对差异尽可能接近所有其他差异
- 如果没有(全面)的前瞻,您就不知道剩下的一切:
下一个差异尽可能接近预期平均剩余值
- 在所有其他条件相同的情况下,减少一日游比增加一日游更好
-展望未来1,单日旅行费用为50美元和2500美元成为一种选择
如何编写解决此问题的Java代码
?再次访问贪婪,并考虑一(多)个示例(与往常一样):
- 不要写下算法(现在):
- 认真思考测试解决方案
若不是在分析中,这就是任务定义的问题必然变得明显的地方:是吗 <代码>200 英里数上限?(允许我切换方向吗?
编写测试代码,使其检查示例任务和结果。使其标记错误结果(,仅) - 然后才开始绘制解决方案。
我习惯于在这里绕道/走捷径:
我启动一个源文件(或继续测试),并使用所选编程工具的文档约定(即Java)对要完成的任务进行描述。
我以易于拆分的形式(Java:
行注释)将解决方案以语法形式绘制为注释/
- 检查所绘制的解决方案:是否有任何简化建议?
如果看起来很复杂:是否可以取消限制以允许更简单的方法得到相同的结果?
即使重新访问取消的限制导致拒绝将其作为解决方案,最终也可以节省时间,首先实施该方法。
(这里,如果您的方法看起来更复杂,那么值得一试。) - 通过对如何操作的可维护描述,您就可以编写代码了
让dₓ 是第x天的距离,看看150200250英里的酒店:
-如果成本是200-dₓ,
总成本为150,第一距离为200,第二距离为150
-如果成本为(200-dₓ)²,
总费用为22500美元