天天看点

算法导论,贪心算法 —— 活动选择问题(python示例)

# coding=utf-8
# 迭代贪心算法  最大活动兼容子集
def greedActSel(s,f):
    n = len(s)
    A = [1]
    k = 1
    for m in range(2, n):
        if s[m] >= f[k]:
            A.append(m)
            k = m
    return A


s = [0, 1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12, ]
f = [0, 4, 5, 6, 7, 9, 9, 10, 11, 12, 14, 16, ]
print("======== 迭代方法 =======")
print(greedActSel(s, f))


# 递归贪心算法
def recuActSel(s, f, k, n):
    m = k + 1
    while m < n and s[m] < f[k]:
        m = m + 1
    if m < n:
        A.append(m)
        recuActSel(s, f, m, n)
    else:
        return


A = []
recuActSel(s, f, 0, len(s))
print("======== 递归方法 =======")
print(A)      

转载于:https://my.oschina.net/xiaohuoer1995/blog/1600194