| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构算法之贪心算法,贪心算法之区间调度问题 -> 正文阅读 |
|
[数据结构与算法]数据结构算法之贪心算法,贪心算法之区间调度问题 |
什么是贪?算法呢? 贪?算法可以认为是动态规划算法的?个特例, 相?动态规划, 使?贪?算法需要满?更多的条件(贪?选择性质) , 但是效率?动态规划要?。 ?如说?个算法问题使?暴?解法需要指数级时间, 如果能使?动态规划消除重叠?问题, 就可以降到多项式级别的时间, 如果满?贪?选择性质, 那么可以进?步降低时间复杂度, 达到线性级别的。 什么是贪?选择性质呢, 简单说就是: 每?步都做出?个局部最优的选择,最终的结果就是全局最优。 注意哦, 这是?种特殊性质, 其实只有?部分问题拥有这个性质。 ?如你?前放着 100 张??币, 你只能拿?张, 怎么才能拿最多的?额? 显然每次选择剩下钞票中?值最?的?张, 最后你的选择?定是最优的。 然?, ?部分问题明显不具有贪?选择性质。 ?如打?地主, 对?出对?三, 按照贪?策略, 你应该出尽可能?的牌刚好压制住对?, 但现实情况我们甚?可能会出王炸。 这种情况就不能?贪?算法, ?得使?动态规划解决, 参?前?「动态规划解决博弈问题」 。 ?、 问题概述?归正传, 本?解决?个很经典的贪?算法问题 Interval Scheduling(区间调度问题) 。 给你很多形如 [start, end] 的闭区间, 请你设计?个算法,算出这些区间中最多有?个互不相交的区间。
举个例?, intvs = [[1,3], [2,4], [3,6]] , 这些区间最多有 2 个区间互不相交, 即 [[1,3], [3,6]] , 你的算法应该返回 2。 注意边界相同并不算相交。 这个问题在?活中的应??泛, ?如你今天有好?个活动, 每个活动都可以?区间 [start, end] 表?开始和结束的时间, 请问你今天最多能参加?个活动呢? 显然你?个?不能同时参加两个活动, 所以说这个问题就是求这些时间区间的最?不相交?集。 ?、 贪?解法这个问题有许多看起来不错的贪?思路, 却都不能得到正确答案。 ?如说:也许我们可以每次选择可选区间中开始最早的那个? 但是可能存在某些区间开始很早, 但是很?, 使得我们错误地错过了?些短的区间。 或者我们每次选择可选区间中最短的那个? 或者选择出现冲突最少的那个区间? 这些?案都能很容易举出反例, 不是正确的?案。 正确的思路其实很简单, 可以分为以下三步:
把这个思路实现成算法的话, 可以按每个区间的 end 数值升序排序, 因为这样处理之后实现步骤 1 和步骤 2 都?便很多: 【PDF格式?法显?GIF?件 interval/1.gif, 可移步点击数据结构算法 访问学习】 现在来实现算法, 对于步骤 1, 由于我们预先按照 end 排了序, 所以选择x 是很容易的。 关键在于, 如何去除与 x 相交的区间, 选择下?轮循环的 x呢? 由于我们事先排了序, 不难发现所有与 x 相交的区间必然会与 x 的 end 相交; 如果?个区间不想与 x 的 end 相交, 它的 start 必须要?于(或等于) x 的 end : 三、代码实现
四、应?举例下?举例?道LeetCode题?应??下区间调度算法。第435题,?重叠区间: 我们已经会求最多有?个区间不会重叠了,那么剩下的不就是?少需要去除的区间吗?
第452题,?最少的箭头射爆?球: 查看:数据结构与算法 ,查看完整技术文档和完整的数据结构算法视频教程资料,包含左神算法全部系列。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:23:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |