贪婪算法-集合覆盖

248 阅读1分钟
#!/usr/bin/env python2.7
# -*- conding: utf-8 -*-
# @Time : 2020/11/6 11:36
# @Author : ada
# @Project: python-script 

states_needed = set(["mt","wa","or","id","nv","ut","ca","az"])

stations = {}
stations["kone"] = set(["id", "nv", "ut"])
stations["ktwo"] = set(["wa", "id", "mt"])
stations["kthree"] = set(["or", "nv", "ca"])
stations["kfour"] = set(["nv", "ut"])
stations["kfive"] = set(["ca", "az"])
final_stations = set()

while states_needed:
    best_station = None
    states_covered = set()
    for station, states in stations.items():
        #print station
        #print states
        covered = states_needed & states
        #print 'covered'
        print covered
        if len(covered) > len(states_covered):
            best_station = station
            #print 'station'
            #print station
            states_covered = covered

    states_needed -= states_covered
    final_stations.add(best_station)
    print states_needed
    print final_stations
    
    
'''
先求最大交集,再减。再次同样的步骤,直到states_needed全集为空
'''