【算法设计与分析】(四)贪心_更新中:硬币找零、区间调度、区间划分、最小延迟调度、Dijkstra、最小生成树Prim Kruskal。苏大计科院研一期末复习笔记

写在前面

分治
动态规划
贪心 本篇,还差后三个
网络流

首先,怕误人子弟必须声明一下本人很菜(越复习越觉得完蛋了 作为一个科班研究生算法学成这样非常惭愧(跪 ,可能写的都不是很懂,很多内容打算背过去了。因为我发现好像真的有人看所以多提醒一句。。(大家就只食用目录吧

其次,本文只也许够应付考试,个人使用。而且其实就是ppt内容只是我自己喜欢这样整理。虽然全力理解内容且认真书写但也可能存在错误,如有发现麻烦指正,谢谢🌹

最后,因为不知道考试怎么考,本人的复习方式是照着目录讲一遍自己的理解+写伪代码(如果来的及会再做一个综合纯享版),再做一下上课讲过的例题和作业(印象里只有主定理、FFT、网络流上课练习+分治和动规两次作业)。

文章持续更新中,或许考前能发完也可能发不完。

祝我们好运🌹

硬币找零

1.贪心

  • 当前硬币体系:{1,5,10,25,100},需要找零x
  • 直接贪心:给面额排序;开集合保存已经找零的集合;每次找不大于x的最大的面额c,如果没有则无解,有就x-c,把c加入集合然后继续
  • 伪代码:
    在这里插入图片描述

2.证明最优

贪心在特定的面额体系下是最优的,现表示第k个硬币的面额为Ck,数目为Nk
证明步骤如下:

  • 特定的面额体系下一定满足一系列性质,比如当前面额下:
    Ck = 1 :Nk<=4
    Ck = 5 :Nk<=1
    Ck1 = 10 & Ck2=5 :N(k1+k2)<=2(25=10+10+5)
    Ck = 25 :Nk<=3

  • 考虑当x在Ck到Ck+1之间,如果用贪心法一定拿k

  • 现要根据性质证明拿k一定最优:
    如果不拿k,那就只能拿C1 … Ck-1
    但是这不满足列出的性质

  • 故只剩下了贪心的选项,而当x - Ck是同理的。
    在这里插入图片描述

  • 可以试试{1,10,25}的硬币体系。

区间调度(选子集)

问题就是一组有开始结束时间的任务,选出一组不冲突的包含任务最多的子集。
在这里插入图片描述

1.排序后贪心

  1. 需要考虑以什么为标准排序:最早开始时间?最早结束时间?最短?可以画一下:
    在这里插入图片描述
  2. 思路:以最早结束时间为基准排序,之后直接贪心。每次选择结束时间最早+开始时间晚于集合最后一个元素的结束时间的放入集合,直到遍历完。
  3. 伪代码:在这里插入图片描述

2.证明最优

以下是我粗浅的理解。

  1. 思路:反证法。主要是如何定义
  2. 假设贪心法取出来的任务是i1 i2 … ir … ik
  3. 而有一个额外的最优算法取出来的任务是j1 j2 … jr … jm
  4. 设这个r是i和j取出来最后一个一样的(我的理解是也可以没有一样的),那么对于下一个r+1(这个是一定存在的因为假设m>k),i取的一定比j取的结束时间早。而对于同是只取一个任务显然i的取法更好所以j不是最优即不存在另外的最优算法。
  5. 在这里插入图片描述

区间划分(调度所有)

问题可以说成一堆课怎么排教室让教室数最少。
在这里插入图片描述

1.排序后贪心

  1. 仍然要考虑按照什么排序:还是最早开始时间最晚结束时间最短时间三个选项:这次选最早开始的。
  2. 思路:每一个新开的教室都要单独存储一个集合,用教室数保存下标。每一个任务需要依次判断已经有的教室是否能塞下,能塞则更新这个教室,不能塞要新开。
  3. 伪代码:
  4. 在这里插入图片描述

2.一些结论

  1. 时间复杂度:O(nlogn)
  2. 一个结论:定义depth深度是 在任意时间点包含的最大任务数的数量,而最小教室数 = depth
  3. 在这里插入图片描述
    我放弃看证明了。

最小延迟调度Scheduling to Minimize Lateness

Dijkstra单源最短路径

1.问题定义

  1. 一对儿点s-t的最短路径(单源到单点):找一条路minimize cost
  2. 单源最短:一个源点到所有点的最短:dijkstra
    在这里插入图片描述

2.思路

最短路径问题—Dijkstra算法详解

  • 记录两个数据:源点到所有点的最短距离 & 已经找到了最短路径的顶点集合

先歇会儿

3. 伪代码

在这里插入图片描述

最小生成树

1.一些定义

都是我的理解 非常不严谨

  1. 路:图里的一些节点,边联通
  2. 环:路的基础上封闭
  3. cut 割:把图中的节点分为两个部分
  4. cutset 割集:边的两个顶点分别在两个部分的边的集合
  5. 如果C是一个环,D是一个割集,那么C和D会重合偶数条边(可证)
  6. 生成树:图中的所有点,边连通且无环
  7. 生成树满足的一些性质:
    存在V-1条边,v是顶点数量
    减一条边变成割,加一条边存在环
    红蓝定理

Prim Kruskal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值