まず、これらの基準に従って男性と女性の優先順位を設定し、Stable marriage problemアルゴリズムを適用して、最大のペアリングを可能にします。
各男性については、上記の基準に従って別のソート済みリスト(優先リスト)を作成し、その逆も同様です。これはカスタムコンパレータで男性と女性の配列を何度もソートすることです。
今、男性と女性のそれぞれについて優先リストを用意していますので、最大限のペアを得るために安定した結婚アルゴリズムを実行する準備は整っています。安定結婚問題の共通の擬似コードは次のようになります。あなたが適切なアルゴリズムを実装する場合
function stableMatching {
Initialize all m ∈ M and w ∈ W to free
while ∃ free man m who still has a woman w to propose to {
w = first woman on m’s list to whom m has not yet proposed
if w is free
(m, w) become engaged
else some pair (m', w) already exists
if w prefers m to m'
m' becomes free
(m, w) become engaged
else
(m', w) remain engaged
}
}
、時間の複雑さは、平均的なケースと最悪のケースでO(n^2)
にO(nlogn)
になります。
この問題は具体的に説明されていません。年齢は厳しい制限として与えられます。これは問題ありません。あなたは2つの他の基準(レースと共通の利益)を与えますが、2つの相対的な重みを指定したり、マッチングが受け入れられる最小値を与えたりしません。 マッチを安定させる必要がある場合は、安定した結婚がここに適用されることがあります。そうでない場合は、割り当て問題のバージョンがありますが、重み関数を指定していません。 – tjhighley
年齢のみが厳しい制限です。他の要因については、彼らはより一般的な要因がペアリングのために良いことを意味する同じ重量を持っています。レースが異なり、共通の関心事を持たない場合でもまだ問題はないが、ペアリングの最後の選択肢でなければならない。 –