Arka fon
Evlenecek 2*n
insanlar olduğunu varsayalım ve her bireyin aşağıdaki n
kısıtlamalar altında tam olarak diğer insanlara çekildiğini varsayalım :
- Cazibe simetrik ; yani kişi kişiye
A
çekilirse, kişiB
kişiyeB
çekilirA
. - Cazibe antitransistir ; yani kişi
A
ve kişininB
her biri kişiye ilgi duyuyorsaC
, kişiA
ve kişiB
birbirine çekilmez.
Böylece çekim ağı (yönlendirilmemiş) tam iki taraflı grafiği oluşturur Kn,n
. Ayrıca, her bir kişinin ilgilendiği insanları sıraladığını varsayıyoruz. Bunlar grafikte kenar ağırlıkları olarak gösterilebilir.
Bir evlilik bir eşleştirme olduğunu ve birbirlerine çekti. Her evlilikten bir kişinin eşinden boşanabileceği ve birbirleriyle evlenebileceği ve her ikisinin de eski eşlerinden daha üst sıralarda yer aldığı biriyle sonuçlanabileceği başka bir evlilik varsa evlilik kararsızdır .(A,B)
A
B
Hedef
Göreviniz, her bir kişinin tercihlerini girdi olarak alan ve her bir evliliğin sabit olacağı şekilde her bir kişi için bir evlilik çıkaran eksiksiz bir program veya işlev yazmaktır.
Giriş
Giriş herhangi bir uygun biçimde olabilir; örneğin, ağırlıklı grafik, sıralı tercih listesi, sözlük / dernek, vb. İsteğe bağlı olarak toplam kişi sayısını girdi olarak alabilirsiniz, ancak başka girdiye izin verilmez.
Çıktı
Çıktı ayrıca herhangi bir uygun formatta olabilir; örneğin, tuples listesi, minimal kenar örtüsü , her bir kişiyle partnerini ilişkilendiren bir işlev, vb.
notlar
O(n^2)
Bu sorunu Wikipedia veya bu Numberphile videosunda çözmek için daha fazla bilgi ve bir algoritma bulabilirsiniz . Ancak, herhangi bir algoritmayı kullanmakta özgürsünüz.- Standart boşluklar yasaktır.
- Bu kod golfü . En kısa cevap (bayt cinsinden) kazanır.