Skip to content

Commit ea67a47

Browse files
committed
fix ruff and add documentation
1 parent d1a0367 commit ea67a47

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

greedy_methods/gale_shapley_stable_matching.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,40 +59,45 @@ def find_matches(
5959
... {1: [4, 3, 2, 1], 2: [1, 2, 3, 4], 3: [2, 3, 4, 1], 4: [3, 4, 1, 2]})
6060
{1: 2, 2: 3, 3: 4, 4: 1}
6161
>>> gs.find_matches(
62-
... {1: [2, 3, 4, 5, 6, 1], 2: [2, 4, 5, 6, 1, 3], 3: [4, 5, 6, 1, 2, 3], 4: [5, 6, 1, 2, 3, 4], 5: [2, 1, 6, 3, 4, 5], 6: [1, 2, 3, 4, 5, 6]},
63-
... {1: [6, 1, 2, 3, 4, 5], 2: [1, 2, 3, 4, 5, 6], 3: [2, 3, 4, 5, 6, 1], 4: [3, 4, 5, 6, 1, 2], 5: [4, 5, 6, 1, 2, 3], 6: [5, 6, 1, 2, 3, 4]})
62+
... {1: [2, 3, 4, 5, 6, 1], 2: [2, 4, 5, 6, 1, 3], 3: [4, 5, 6, 1, 2, 3],
63+
... 4: [5, 6, 1, 2, 3, 4], 5: [2, 1, 6, 3, 4, 5], 6: [1, 2, 3, 4, 5, 6]},
64+
... {1: [6, 1, 2, 3, 4, 5], 2: [1, 2, 3, 4, 5, 6], 3: [2, 3, 4, 5, 6, 1],
65+
... 4: [3, 4, 5, 6, 1, 2], 5: [4, 5, 6, 1, 2, 3], 6: [5, 6, 1, 2, 3, 4]})
6466
{1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 1}
6567
"""
6668

67-
matches = {key: -1 for key in proposers_preferences.keys()}
68-
69+
matches = dict.fromkeys(proposers_preferences.keys(), -1)
70+
tested_matches = dict.fromkeys(proposers_preferences.keys(), 0)
6971
free_proposers = list(proposers_preferences.keys())
70-
tested_matches = {key: 0 for key in proposers_preferences.keys()}
7172

7273
while free_proposers:
7374
proposer = free_proposers[0]
7475

76+
# continue if all options for proposer have been exhausted
7577
if tested_matches[proposer] == len(proposers_preferences[proposer]):
7678
free_proposers.remove(proposer)
7779
continue
7880

7981
receiver = proposers_preferences[proposer][tested_matches[proposer]]
8082
tested_matches[proposer] += 1
8183

84+
# set receiver as match if not previously matched
8285
if receiver not in matches.values():
8386
matches[proposer] = receiver
8487
free_proposers.remove(proposer)
8588
continue
8689
cur_proposer = next(
8790
prop for prop, rec in matches.items() if rec == receiver
8891
)
92+
93+
# give receiver new proposer match only if it preferes new over old
8994
if receivers_preferences[receiver].index(proposer) < receivers_preferences[
9095
receiver
9196
].index(cur_proposer):
92-
matches[cur_proposer] = -1
93-
matches[proposer] = receiver
9497
free_proposers.remove(proposer)
9598
free_proposers.append(cur_proposer)
99+
matches[cur_proposer] = -1
100+
matches[proposer] = receiver
96101

97102
return matches
98103

0 commit comments

Comments
 (0)