From e36f91c0945ca0d6fed92a3cc0203c4c2522f2f0 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sat, 13 Jan 2024 17:31:56 +0000 Subject: [PATCH] add greedy --- chapter10/greedy.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 chapter10/greedy.py diff --git a/chapter10/greedy.py b/chapter10/greedy.py new file mode 100644 index 0000000..6f2f245 --- /dev/null +++ b/chapter10/greedy.py @@ -0,0 +1,44 @@ +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 greedy(): + def fget(): + needed = set() + for states in stations.values(): + needed |= states + return needed + + 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}")