import logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) stations = { "kone": set(["id", "nv", "ut"]), "ktwo": set(["wa", "id", "mt"]), "kthree": set(["or", "nv", "ca"]), "kfour": set(["nv", "ut"]), "kfive": set(["ca", "az"]), } def fget(): needed = set() for states in stations.values(): needed |= states return needed def greedy(): states_needed = fget() logger.debug(states_needed) final_stations = set() while states_needed: best_station = None states_covered = set() for station, states in stations.items(): covered = states_needed & states if len(covered) > len(states_covered): best_station = station states_covered = covered states_needed -= states_covered final_stations.add(best_station) return final_stations final_stations = greedy() print(f"final stations greedy approximation: {final_stations}")