Hintergrund
Angenommen, es gibt 2*n
Menschen, die verheiratet werden müssen, und es wird weiterhin angenommen, dass sich jede Person von genau n
anderen Menschen unter den folgenden Bedingungen angezogen fühlt :
- Anziehung ist symmetrisch ; dh wenn eine Person
A
von einer Person angezogen wird, wird eine Person von einerB
PersonB
angezogenA
. - Anziehung ist antitransitiv ; dh wenn sich Person
A
und PersonB
jeweils zu Person hingezogen fühlenC
, dann fühlen sich PersonA
und PersonB
nicht zueinander hingezogen.
Das Netzwerk der Attraktionen bildet somit den (ungerichteten) vollständigen zweigliedrigen Graphen Kn,n
. Wir gehen auch davon aus, dass jede Person die Personen eingestuft hat, zu denen sie hingezogen sind. Diese können im Diagramm als Kantengewichte dargestellt werden.
Eine Ehe ist eine Paarung, (A,B)
in der A
und B
von einander angezogen werden. Die Ehe ist instabil, wenn es eine andere Ehe gibt, in der eine Person aus jeder Ehe ihren Partner scheiden und sich heiraten könnte und beide mit jemandem enden, den sie höher eingestuft haben als ihr früherer Partner.
Tor
Ihre Aufgabe ist es, ein komplettes Programm oder eine Funktion zu schreiben, die die Vorlieben jeder Person als Eingabe verwendet und eine Ehe für jede Person ausgibt, so dass jede Ehe stabil ist.
Eingang
Die Eingabe kann in einem beliebigen Format erfolgen. Beispiel: gewichteter Graph, geordnete Präferenzliste, Wörterbuch / Zuordnung usw. Sie können optional die Gesamtzahl der Personen als Eingabe verwenden, aber keine andere Eingabe ist zulässig.
Ausgabe
Die Ausgabe kann auch in einem beliebigen Format erfolgen. zB Liste der Tupel, minimale Randbedeckung , eine Funktion, die jeder Person ihren Partner zuordnet usw. Beachten Sie, dass die einzige Einschränkung darin besteht, dass jede Ehe stabil ist und es keine anderen Optimalitätsanforderungen gibt.
Anmerkungen
- Weitere Informationen und einen
O(n^2)
Algorithmus zur Lösung dieses Problems finden Sie auf Wikipedia oder in diesem Numberphile-Video . Es steht Ihnen jedoch frei, einen beliebigen Algorithmus zu verwenden. - Standardlücken sind verboten.
- Das ist Code-Golf . Kürzeste Antwort (in Bytes) gewinnt.
quelle
Antworten:
Mathematica, 28 Bytes
Ich würde denken, das ist Betrug. Ich für mich selbst mag das:
(Ja
Combinatorica
ist veraltet, kostet aber weniger Bytes alsFindIndependentEdgeSet
)Beispiel (GoT-like): (Um fair zu sein - ich habe die Gewichte erraten ... aber ich bin in Ordnung mit den Ergebnissen)
quelle