背包相关问题。
1. 给出n 个物品,第i 个物体的重量为
按照物品重量从到小排序
2. 部分背包问题。有
按照“价值除以重量的值”排序
- 乘船问题。 有
n 个人,第i 个人的重量为wi ,每艘船的最大载重量均为C , 且最多只能乘两个人。用最少地船装载所有人。
从两个极端考虑。
先按重量从小到大排序看看。
3.1先考虑最重的人。最重的人贪心选择能和他一起坐船中人的集合中最轻的人。
3.2 先考虑最轻的ren。 最轻的人贪心选择能和他一起坐船的人中最重的人。
双指针,一首一尾,遍历一遍即可。
4.区间相关问题。
4.1 选择不相交的区间。数轴上有
区间按照
4.1.1
4.1.2
选择区间1 后,需要把所有和区间1相交的区间排除在外,需要记录上一个被选择的区间编号。从头到尾扫描一遍可完成贪心过程,得到正确结果。
4.2 区间选点问题。数轴上有
把所有的区间按
4.3 区间覆盖问题。数轴上有
先进行一次预处理。每个区间在
把各区间按照
- 哈夫曼编码问题
原理和性质:贪心策略和最优子结构
程序实现:
5.1 按照频率把所有的字符排序成表P,算法复杂度O(nlogn) 。
5.2 新开辟一个节点队列Q, 其目的装放哈夫曼树合并的父节点。
5.3 从P或Q 选取两个频率最小的节点合并成一个父节点,放父节点放入Q中,由于后合并的父节点频率比先合并的频率大,因此Q内的元素是有序的。
5.4 重复5.3 直到P 和 Q为空。时间复杂度O(n)