贪心算法 笔记

背包相关问题。
1. 给出n 个物品,第i 个物体的重量为wi, 选择尽量多的物体,使得总重量不超过C.
按照物品重量从到小排序
2. 部分背包问题。有n 个物体,第i 个物体的重量为wi,价值为vi,在总重量超过C的情况下让总价值尽量高。
按照“价值除以重量的值”排序

  1. 乘船问题。 有n 个人,第i 个人的重量为wi,每艘船的最大载重量均为C, 且最多只能乘两个人。用最少地船装载所有人。
    从两个极端考虑。
    先按重量从小到大排序看看。
    3.1先考虑最重的人。最重的人贪心选择能和他一起坐船中人的集合中最轻的人。
    3.2 先考虑最轻的ren。 最轻的人贪心选择能和他一起坐船的人中最重的人。
    双指针,一首一尾,遍历一遍即可。

4.区间相关问题。
4.1 选择不相交的区间。数轴上有n 个开区间(ai,bi),选择尽量多个区间,使得这些区间两两没有公共点。
区间按照 b1b2b3排序。
4.1.1 a1>a2 选择区间1
4.1.2 a1a2 选择区间1
选择区间1 后,需要把所有和区间1相交的区间排除在外,需要记录上一个被选择的区间编号。从头到尾扫描一遍可完成贪心过程,得到正确结果。

4.2 区间选点问题。数轴上有n 个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点。
把所有的区间按b 从小到大排序(b相同时,安装a从大到小排序),贪心策略选择第一个区间的最后一个点。

4.3 区间覆盖问题。数轴上有n 个闭区间[ai,bi]。选择尽量少地区间覆盖一条指定线段[s,t]

先进行一次预处理。每个区间在[s,t] 外的部分都应该预先被切掉。
把各区间按照a从小到大排序。如果区间1的起点不是s,无解。否则选择起点在s的最长区间。选择此区间[ai,bi] 后,新的起点应该设置为bi,并且忽略所有区间在bi之前的部分。

  1. 哈夫曼编码问题
    原理和性质:贪心策略和最优子结构
    程序实现:
    5.1 按照频率把所有的字符排序成表P,算法复杂度O(nlogn)
    5.2 新开辟一个节点队列Q, 其目的装放哈夫曼树合并的父节点。
    5.3 从P或Q 选取两个频率最小的节点合并成一个父节点,放父节点放入Q中,由于后合并的父节点频率比先合并的频率大,因此Q内的元素是有序的。
    5.4 重复5.3 直到P 和 Q为空。时间复杂度O(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值