Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写一个Java代码,通过使用贪婪算法设计解决这个问题?_Java_Algorithm_Greedy - Fatal编程技术网

如何编写一个Java代码,通过使用贪婪算法设计解决这个问题?

如何编写一个Java代码,通过使用贪婪算法设计解决这个问题?,java,algorithm,greedy,Java,Algorithm,Greedy,问题是: 你要去长途旅行。你从0英里处开始上路。沿途有n家酒店,编号为1家≤ 我≤ n、 在英里标杆a 1之间。现在,由于我们正在考虑一种贪婪的方法,您需要选择该酒店并将其保存在您的访问列表中 现在,从那里往前走,选择距离在a(i)和a(i)-200之间的下一家酒店,依此类推,直到到达起点 我没有写任何代码,因为我认为这是家庭作业。不过,我想你明白了。希望有帮助!祝你好运。不要操之过急,马上开始编码:从分析任务开始 贪婪意味着采取尽可能最好的下一步(永远不要回顾过去;展望未来是有限的或不允许的)

问题是:

你要去长途旅行。你从0英里处开始上路。沿途有n家酒店,编号为1家≤ 我≤ n、 在英里标杆a 1 有人知道我如何编写Java代码,通过使用贪婪算法来解决这个问题吗

我已经知道的是:

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美元