tło
Załóżmy, że są 2*nludzie do zawarcia małżeństwa, i przypuśćmy ponadto, że każda osoba jest pociągana do dokładnie ninnych osób pod ograniczeniami, które:
- Przyciąganie jest symetryczne ; tzn. jeśli dana osoba
Ajest pociągana do osobyB, to osobaBjest pociągana do osobyA. - Przyciąganie jest nieprzechodnie ; tj. jeśli osoba
Ai osobaBsą przyciągane do siebieC, wówczas osobaAi osobaBnie są przyciągane do siebie.
W ten sposób sieć atrakcji tworzy (nieukierowany) kompletny dwustronny wykres Kn,n . Zakładamy również, że każda osoba uszeregowała osoby, które ich pociągają. Mogą być one przedstawione na wykresie jako grubości krawędzi.
Małżeństwo jest parowanie (A,B)gdzie Ai Bprzyciąga do siebie. Małżeństwo jest niestabilne, jeśli istnieje inne małżeństwo, w którym jedna osoba z każdego małżeństwa mogłaby rozwieść się ze swoim partnerem i poślubić się nawzajem oraz oboje skończyć z kimś, którego zajęli wyżej niż dawny partner.
Cel
Twoim zadaniem jest napisanie pełnego programu lub funkcji, które przyjmują preferencje każdej osoby jako dane wejściowe i generują małżeństwo dla każdej osoby, tak aby każde małżeństwo było stabilne.
Wejście
Dane wejściowe mogą być w dowolnym dogodnym formacie; np. wykres ważony, uporządkowana lista preferencji, słownik / przypisanie itp. Opcjonalnie możesz wziąć całkowitą liczbę osób jako dane wejściowe, ale żadne inne dane nie są dozwolone.
Wynik
Dane wyjściowe mogą być również w dowolnym dogodnym formacie; np. lista krotek, minimalne pokrycie krawędzi , funkcja, która kojarzy się każdej osobie z partnerem, itd. Należy pamiętać, że jedynym ograniczeniem jest to, że każde małżeństwo jest stabilne, nie ma innych wymagań dotyczących optymalności.
Notatki
- Możesz znaleźć więcej informacji i
O(n^2)algorytm, aby rozwiązać ten problem na Wikipedii lub w tym filmie Numberphile . Możesz jednak użyć dowolnego algorytmu. - Standardowe luki są zabronione.
- To jest golf golfowy . Najkrótsza odpowiedź (w bajtach) wygrywa.

