一、贪心算法

定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化。

二、区间调度问题

1. 问题:我们有一组需求{1,2,3,......,N},第i个需求与一个开始时间s(i),结束时间f(i)相对应。如果没有两个需求在时间上重叠,我们就说需求的子集是相容的。

2. 目标:寻找一个最大的相容子集O.

3. 算法:

初始令R是所有需求的集合,设A为空

While ( |R| > 0 )

选择一个最早结束的需求

把i加入到A中

在R中删除所有与i不相容的需求

End

返回集合A作为被接受的需求的集合

算法规则:该贪心算法的规则是,每一步选择一个最早结束的需求,尽快释放资源。

4. 证明算法的正确性:

假设O是最优解,由于最优解可能有多个,所以,我们只需要证明|A|=|O|,既证明集合A与集合O包含的需求个数相等。显然,A,O都是相容的,既A,O中的任意两个需要都不会重叠。

算法思想:该证明主要是想找出这样一种认识,我们的贪心算法“领先”于这个最优解O. 我们把贪心算法构造的部分解与最优解O初始的一段进行比较,并且证明贪心算法以一步接一步的方式做的更好。

假设,A = { i1,i2,......,ik}, O = { j1,j2,......,jm} ,既我们要证明k=m;同时,我们假设,A中的需求按照加入到A的顺序排序,O中的需求也按照对应区间的自然顺序排序。既有:

对任意的i,有 f(ir) <= s(ir+1)

对任意的j,有 f(jr) <= s(jr+1)

现用数学归纳法证明k=m

1)r=1 ,  显然有f(i1) <= f(j1)

因为,贪心算法每一步骤都是选择最早结束的区间,故而有f(i1) <= f(j1)

2)假设第r-1步有,f(ir-1) <= f(jr-1)

3)第r步,证明f(ir-1) <= f(jr-1)

因为O是相容的,故而有:f(jr-1) <= s(jr)

又因为:f(ir-1) <= f(jr-1)

所以:f(ir-1) <= f(jr-1) <= s(jr)

既:f(ir-1) <= s(jr)

根据以上贪心算法知,在第r步区间jr还在R中,而贪心算法的第r步是要在R中选择一个最早结束的区间ir,所以有:f(ir) <= f(jr)

总结: 对任意的r,都有f(ir) <= f(jr)

现在用反证法证明m=k,既A是最优解:

假设A不是最优解,既O中存在一个需求jk+1,该需求在jk 结束之后开始,又因为f(ik) <= f(jk),故而在需求也在ik 结束之后开始,故而jk+1与 i1,i2,......,ik相容,所以jk+1在R中;而由贪心算法知,该算法结束时R为空,故而矛盾。所以A是其中一个最优解。

java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)相关推荐

  1. java文字手写识别_【手写文字识别】-JavaAPI示例代码

    手写文字识别-JavaAPI示例代码 不知不觉手写文字识别百度已经开始邀测了.需要的小伙伴去申请了哦.申请方式加入文字识别群找PM.或者工单提交申请.都要说明自己的APPID哦. 接口地址:https ...

  2. java实现登陆面试题_【Javaweb】笔面试题 ---(1)(示例代码)

    Javaweb 面试题:理解才是最重要的,而不是原封不动的背下来 一.请简述doget和dopost它们的区别 1) get是从服务器上获取数据,post是向服务器传送数据. 2) 在客户端,Get方 ...

  3. java加权区间调度_区间调度问题详解

    今天给大家介绍一下区间调度问题.区间调度是一类难度比较大,但同时应用比较广的问题,经常会在面试中以各种形式出现.本文将会介绍区间调度的各种变形,希望能使大家在面临区间调度问题时得心应手,并可以在实际工 ...

  4. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...

    这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类变量(static) 类变量是该类的所有对象共 ...

  5. java区间合并_贪心算法:合并区间

    ❝ 最近文章阅读量少了很多啊打卡也少了, 是不是年底了很多录友在忙期末考试啊,哈哈. 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: intervals = [[1,3],[2,6], ...

  6. labuladong 的算法小抄_关于算法笔试的几个套路,一点就透

    以下文章来源于labuladong ,作者labuladong 我知道各位是被标题吸引进来的,那就不废话,先说几个算法笔试的硬核套路,再说说语言选择和做题复习的策略. 避实就虚 大家也知道,大部分笔试 ...

  7. 算法的优缺点_机器学习算法优缺点 amp; 如何选择

    (点击上方公众号,可快速关注) 转自: 算法与数学之美 主要回顾下几个常用算法的适应场景及其优缺点! 机器学习算法太多了,分类.回归.聚类.推荐.图像识别领域等等,要想找到一个合适算法真的不容易,所以 ...

  8. 银行家算法例题讲解_银行家算法

    死锁常见的题目 定义 所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面.死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用, ...

  9. java人体识别_【人体分析-人像分割】JavaAPI示例代码

    接口能力: 对于输入的一张图片(可正常解码,且长宽比适宜),识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换.照片合成.身体特效等场景.输入正常人像图片,返回分割后的二值结果图和分割类型(目前仅 ...

最新文章

  1. RDKit | 基于神经网络的溶解度预测和回归分析
  2. mysql中describe怎么用_MySQL中describe命令的使用方法小结
  3. Windows 8 :妥协的产物
  4. xcode4 语法高亮和自动补全失效的解决办法
  5. Linux命令行模式下的复制和粘贴以及停止命令刷新
  6. QT学习:多线程运用
  7. 利用Excel VBA批量计算长时间序列植被物候动态阈值(逐像元)
  8. hive udf 分组取top1_Hive中分组取前N个值的实现-row_number()
  9. WebBrowser的Cookie操作
  10. python中dir用法_Python dir() 函数
  11. 家庭网络,怎么给每个房间装一个无线路由器?
  12. python yield理解_python教程:迭代器,生成器与for循环机制
  13. 安卓设备数据转移到ios设备
  14. 自动对焦模块理论基础及其硬件实现浅析(四)
  15. 2-直观体验OAuth2
  16. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)
  17. 解决区块链三大问题的利器
  18. 东华OJ进阶题47 最少拦截系统
  19. java的行业认证_Sun认证Java程序员考试介绍
  20. node16新版本安装node-sass报错

热门文章

  1. You must restart adb and Eclipse问题的解决
  2. CentOS 8 已是绝版?还有后续么?
  3. drep:微生物基因组快速去冗余-文章解读+帮助文档+实战教程
  4. MPB:西农焦硕组-​土壤微生物响应环境变化的系统发育保守性和环境阈值
  5. 面对万亿级测序市场,纳米孔测序技术何去何从?
  6. Cell子刊:中科院遗传发育所周俭民组发现特异靶向病原菌致病力的植物天然产物并阐明作用机制
  7. Nature:拟南芥微生物组功能研究0概述
  8. R语言e1071包中的支持向量机:仿真数据(螺旋线性不可分数据集)、简单线性核的支持向量机SVM(模型在测试集上的表现、可视化模型预测的结果、添加超平面区域与原始数据标签进行对比分析)、如何改进核函数
  9. R语言删除ggplot可视化图中的所有x轴轴标签实战:ggplot可视化默认包含所有x轴轴标签、删除ggplot可视化图中的所有x轴轴标签实战
  10. Pandas把dataframe中的整数数值(integer)转化为时间(日期、时间)信息实战