最近开始学习王争老师的《数据结构与算法之美》,通过总结再加上自己的思考的形式记录这门课程,文章主要作为学习历程的记录。
首先来看一个例子,假设我们有一个可以容纳100kg物品的背包
为了使背包中所装物体的总价值最大,如何选择在背包中装哪些豆子?这个问题的解决是将单价从高到低排列,它的本质借助的是贪心算法。
总结一下贪心算法解决问题:
第一步,当我们看到这类问题时,首先要联想到贪心算法。针对一组数据,我们定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大。
第二步,我们尝试看下这个问题是否可以用贪心算法解决。每次选择当前情况下,在对限制值同等贡献量的情况下,对期望值贡献最大的数据。
第三步,我们举几个例子看下贪心算法产生的结果是否是最优的。大部分情况下,举几个例子验证一下就可以了。
实际上,用贪心算法解决问题的思路,并不总能给出最优解。举个例子,在一个有权图中,从顶点S开始,找一条到顶点T的最短路径(路径中边的权值和最小)。贪心算法的解决思路是,每次都选择一条跟当前顶点相连的权最小的边,直到找到顶点T。