Volgende probleem probeer ik uit te werken als oefening en voor de lol:
Er zijn 2 groepen van n objecten ("mensen" als je het makkelijker wilt maken om er over na te denken), groep A (kiezers/mannen) en groep B (gekozenen/vrouwen). Elk object uit groep A maakt een top-m (bijv. top 10) lijstje met wie zei graag gematched willen worden, naar volgorde van voorkeur.
Opdracht: maak een algoritme dat een zo goed mogelijke matching vormd. "goed mogelijk" heb ik niet gedefiniëerd, maar wel geldt dat een matching van A naar B die buiten A's top m staat zeer onwenselijk is.
Natuurlijk is er geen garantie dat dat altijd kan (tenzij m=n), maar gevallen die je in overweging kunt nemen zijn "gelijk verdeelt" (er is dus een stable matching), "populair" (1/2 n van B is populair en staat dus vaak in de top m) en "strict populair" (alle A's hebben dezelfde lijst)
De opdracht is geen huiswerk o.i.d., ik heb hem zelf verzonnen.
Mijn voorlopige idee staat hieronder
Ik ben benieuwd of er mensen met ideeën komen
Er zijn 2 groepen van n objecten ("mensen" als je het makkelijker wilt maken om er over na te denken), groep A (kiezers/mannen) en groep B (gekozenen/vrouwen). Elk object uit groep A maakt een top-m (bijv. top 10) lijstje met wie zei graag gematched willen worden, naar volgorde van voorkeur.
Opdracht: maak een algoritme dat een zo goed mogelijke matching vormd. "goed mogelijk" heb ik niet gedefiniëerd, maar wel geldt dat een matching van A naar B die buiten A's top m staat zeer onwenselijk is.
Natuurlijk is er geen garantie dat dat altijd kan (tenzij m=n), maar gevallen die je in overweging kunt nemen zijn "gelijk verdeelt" (er is dus een stable matching), "populair" (1/2 n van B is populair en staat dus vaak in de top m) en "strict populair" (alle A's hebben dezelfde lijst)
De opdracht is geen huiswerk o.i.d., ik heb hem zelf verzonnen.
Mijn voorlopige idee staat hieronder
spoiler:
GS-algorithm gaat niet werken (onaangepast), tenzij n=m. Als voorkeur-lijst voor B zou je de "inverse" voorkeur kunnen gebruiken van groep A als geheel: object uit B prefereert dus alle object uit A waar het op de eerste plaatst staat, daarna alle objecten uit A waar het op de tweede plaatst staat enz.
Ben nu bezig het ook echt te implementeren en kijken of ik ergens vastloop.
Een redelijk "dom" algoritme, wat daarentegen wel heel effectief zou kunnen zijn, is om een score toe te kennen aan elke set van matches en ze domweg allen te berekenen en de beste te kiezen. Je zou bijv. kunnen zeggen m punten voor een A-B match waarbij B op de eerste plaats stond, m-1 punten voor een A-B match waarbij B op de tweede plaats stond enzovoort. Omdat je wil voorkomen dat A-B matches er komen die ongewenst zijn zou je daar strafpunten voor kunnen geven, bijvoorbeeld -2m punten.
Nadeel is dat dit algoritme zeer inefficiënt zou zijn, aangezien er n! verschillende matches zijn en O(n!) zo'n beetje de slechtste looptijd is die je kunt hebben. Maar misschien dus wel effectief bij kleinere n. Voordeel is wel dat als dit een echte situatie zou zijn je de paar beste oplossingen zou kunnen geven waarna iemand op andere overwegingen de uiteindelijke keuze kan maken.
Ben nu bezig het ook echt te implementeren en kijken of ik ergens vastloop.
Een redelijk "dom" algoritme, wat daarentegen wel heel effectief zou kunnen zijn, is om een score toe te kennen aan elke set van matches en ze domweg allen te berekenen en de beste te kiezen. Je zou bijv. kunnen zeggen m punten voor een A-B match waarbij B op de eerste plaats stond, m-1 punten voor een A-B match waarbij B op de tweede plaats stond enzovoort. Omdat je wil voorkomen dat A-B matches er komen die ongewenst zijn zou je daar strafpunten voor kunnen geven, bijvoorbeeld -2m punten.
Nadeel is dat dit algoritme zeer inefficiënt zou zijn, aangezien er n! verschillende matches zijn en O(n!) zo'n beetje de slechtste looptijd is die je kunt hebben. Maar misschien dus wel effectief bij kleinere n. Voordeel is wel dat als dit een echte situatie zou zijn je de paar beste oplossingen zou kunnen geven waarna iemand op andere overwegingen de uiteindelijke keuze kan maken.
Ik ben benieuwd of er mensen met ideeën komen