def:贪心算法是一种以局部最优最优选择以期求得全局最优解得算法。
16.1活动选择问题
求一个活动选择问题的域中求最大兼容活动子集。
活动选择问题具有最优子结构:解中若包含活动ak,s.t. S[...k]和S[k+1...]都为最大兼容活动子集
若用c[i,j]来表示S[i...j]的大小则有递归公式:
由此可以通过动态规划方法求解活动选择问题的最优解。
若注意到此问题的一个性质,则可以只需要遍历一遍所有活动采用贪心选择而求得最优解。
贪心选择的是S中结束时间最早的活动。实现如下:
"""
因为 f由小到大排序,所以必然包含第一个活动
"""
def RECURSIVE_ACTIVITY_SELECTOR(s, f, k, n):
m = k + 1
while m < n and s[m] < f[k]:
m = m + 1
if m < n:
ai = [m]
a = RECURSIVE_ACTIVITY_SELECTOR(s, f, m, n)
if a != None:
ai.extend(RECURSIVE_ACTIVITY_