needed = set(["a", "b", "c", "d"]) # 传入一个数组,被转换为集合
knum = {}
knum["k1"] = set(["a", "b"])
knum["k2"] = set(["b", "c"])
knum["k3"] = set(["c", "d"])
knum["k4"] = set(["a", "b","c"])
final = set() # 使用一个集合来存储最终选择的方案
while needed:
best = None # 将覆盖了最多的needed的方案存储进去
max_covered = set() # 一个集合,包含该次循环中覆盖的最多needed
for k, value in knum.items(): # 循环迭代每个方案并确定它是否是最佳的方案
covered = needed & value # 计算交集
if len(covered) > len(max_covered): # 检查该方案的覆盖范围是否比上一个多
best = k # 如果多,就将该方案设置为best
max_covered = covered
# 在for循环遍历完所有方案以后,找到本次best
needed -= max_covered # 更新needed
final.add(best) # 在for循环结束后将best添加到最终的广播台列表中
print(final) # 每次for循环结束打印本轮final方案