1.设计思想
设计思想 :每一步做出局部最优选择,每一步都选择当前可用的最优选项,以期达到全局最优。
2. 基本要素
- 最优子结构 --> 一个问题的解包含子问题的最优解
- 贪心选择性质 --> 问题的最优解可以通过局部问题的最优解得到
最佳量度标准:贪心每一步用作决策依据的选择
3.一般背包问题(题目中所说的背包问题)
说明:每个商品可以被分成无限小份放入背包中。
最佳量度标准:权重比 --> pi/wi
做法:每次选择权重比最大的放入背包中。
4.哈夫曼树 (最优归并模式)
说明:出现次数为权重 (节点的数值)
最佳量度标准:带权外路径长度最小,即为权重*路径长
做法:
- 把出现次数按小到到排序,每次取两个最小的值,作为新生成节点的左右节点,然后将新节点的值放入队列中,直到队列为空。
- 将左边标为0,右边标为1,既可以得到哈夫曼编码。
- 叶子节点的值*(根结点到叶子结点的距离) 相加后得到的就是wpl
5.最小生成树
1.prim算法
说明:s集合是已经加到树上的点,v-s集合是没有添加的
最佳量度标准:s集合到v-s点的最短路径
做法:找里s集合最近的点加入集合中
伪代码:
2.Kruskal算法
最佳量度标准:边权最小
做法:将边权排序,然后将两点和边加入树中,注意:不要形成闭环
伪代码:
6.单源多汇点Dijkstra算法
说明:S集合包含已求出的最短路径的点(以及相应的最短长度),V-S集合包含未求出最短路径的点(以及A到该点的路径,注意A->C由于没有直接相连 初始时为∞)
dist[i] 数组是记录s到i的最短路径
L[i] 数组是记录s到i最短路径上,i点的上一个节点的标志
最佳量度标准:从u集合中找到路径最短的路径,加入s集合中
做法:通过新加入的节点不断更新u集合,直到u为空。
伪代码: