贪心算法最优性证明
首先我们引入一个问题Interval Scheduling(调度问题)
现在你拥有一个资源,它可能是一间教室、一台计算机等,许多人都要求使用这个资源(计算机),但是这个资源(计算机)同一时间只能被一个人使用,我们想要达成的目标是,从起始时间s开始到结束时间f,我们可以尽可能多的满足使用这个资源的要求。
我们也可以更正式的理解这个问题。
现在我们有一组请求 request = {1, 2, 3, … , n},requesti的开始时间是starti,结束时间是endi,我们的目标是从集合request中选出尽可能多的不重合的request。
贪心算法通常都是很自然的思路,我们可以想到
- 总是选择最先开始的request,这样可以使我们的资源更早的投入使用。
- 总是选择持续时间最短的request,这样可以使我们的资源更快的被释放,这样可以使更多的请求被接受。
- 总是选择冲突最少的request,这样可以使得我们拒绝更少的request。
- 总是选择最先结束的request。
对于每一个贪心策略,我们都需要证明它是否能够一步一步的到达最优解。
- 我们可以首先声明一个最优解O。
- 如果在第一步,可以证明贪心策略不比最优解差。
- 我们假设第k步,贪心策略的选择也不必最优解差。
- 那么我们只要证明第k+1步,贪心策略的选择也可以接受,那么