zoukankan      html  css  js  c++  java
  • 算法第四章作业

    算法第四章作业

    组员:高珞洋,何汶珊

    对贪心算法的理解

    贪心算法来源于动态规划,都是要求得全局最优解。他们都是选择性算法,从一个集合种选择适当的元素加入解集合。

    在动态规划中,难点在于找到递推公式,并在代码中利用递推公式进行求解。尝试每种可能的情况并选择最优的情况。
    动态规划的选择策略是试探性的,每一步要试探所有的可行解并将结果保存起来,便于试探结束后进行回溯;或者每次试探都进行比较,保存最优解。

    与其相比,贪心算法在编程过程中会简单很多,因为它在每次选择的时候考虑的是局部最优解。
    这就要求问题的局部最优解的集合是全局最优解,即证明贪心策略,这也是贪心算法的难点所在,通常用反证法求解。
    贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关
    当证明贪心算法后,算法设计的关键是贪心策略的选择,即明确每次贪心选择的依据。如在非0-1背包的问题中,选择的依据是物品单位重量的价值,而非单纯的重量或者价值。

    事实上,既然贪心算法来源于动态规划,理论上能用贪心算法解决的问题都能用动态规划解决。但是贪心算法能比动态规划具有更低的时间和空间复杂度,代码编写也更加简单。

    说明汽车加油问题的贪心选择性质

    汽车加油问题

    一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。
    输入格式:
    第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n公里,且旅途中有 k个加油站。 第二行有 k+1 个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油。 第 k+1 个加油站表示目的地。
    输出格式:
    输出最少加油次数。如果无法到达目的地,则输出“No Solution!”。

    贪心选择性质

    以能到达为前提,假设最少加油次数为x
    设在加满油后可行使N千米,这N千米内有两个及以上个加油站,任取两个A,B;A距起始点的距离为m,B距起始点的距离为n
    则若在B加油不能到达终点,那么在A加油必不能到达终点;若在B点加油,则比在A点加油可行驶的路程多n-m
    于是有两种情况,一是终点距离A点小于N,二是终点距离A点大于N小于N+n-m

    第一种情况下在A点加油和在B点加油都能到达终点,结果是一样的。
    而在第二种情况下在A点加油不能到达终点,而要在B点再加一次油;而在B点加油能直接到终点。

    于是有以下策略:

    1. 在油耗尽前能到达最远的加油站加油
    2. 非1策略

    由上述分析可得,选择策略1的结果≤选择策略2的结果。即可选择策略1作为最优策略
    因此可证明其贪心选择性质

    结对编程情况

    结对编程呢不全是优点,比如在编程的时候,两个人的意见相左,就会对编程产生不利影响。
    本周编程做实践题的时候,第二题卡题了。我选择往下打第三题,而同伴则在纠结第二题错在哪里。
    这就导致我敲完第三题后给她讲解的时候她会有点心不在焉的迹象。
    不过她也能理解啦,无伤大雅。而且有时候两人分工也能加快解题速度。

  • 相关阅读:
    PHP+MySQL
    Appstore排名前十的程序员应用软件
    架构师的平凡之路
    程序员,如何三十而立?
    不懂技术也可以轻松开发一款APP
    php语法学习:轻松看懂PHP语言
    你真的了解软件测试行业吗?
    十个程序员必备的网站推荐
    从更高点看软件开发的侧重点
    php如何实现文件下载
  • 原文地址:https://www.cnblogs.com/luoyang0515/p/11907916.html
Copyright © 2011-2022 走看看