2012-03-09 3 views
1

インターネット上でサンプルコードを検索しようとしていますが、これはできません。私がしようとしているのは、コースに適合するルームセットがある部屋とコースをマッチングさせることです。エドモンズの最大マッチングアルゴリズム

例:コースAは、部屋X、Y、Z、コースBの部屋PとQctで教えられます。

各コースは、特定のタイムスロット内のちょうど1つの部屋に一致させることができます。私は部屋とコースのこれらの2つのセットを受け入れ、最大一致を出力する関数を作成する必要があります。誰もが私のことを始めることができるPHPでソースコードを提供することはできますか?私は前にマッチングのためのアルゴリズムを構築したことがなく、実際にどこから始めるべきか分からない。

+0

データ(コース、部屋)をどのように保存/取得していますか?それとも、あなたはまだその点にいますか? –

+0

擬似コードはウィキペディアhttp://en.wikipedia.org/wiki/Edmonds's_matching_algorithmにあります。おそらくそこから開始できますか? –

+0

あなたが説明している設定は** bipartite graph **です。また、Edmondsのアルゴリズムよりもはるかに高速な2つのグラフで最大のマッチングを見つけるためのアルゴリズムがあります。ほとんどの場合、これらのアルゴリズムの1つを見つけて実装する方が幸いです。 – templatetypedef

答えて

2

のIgor Navernioukのlibraryコードを試してみることができます。 C++で書かれていますが、簡単にPHPに変換できます。

+0

ありがとう、これは間違いなく私にとって正しい方向へのスタートです。しかし、私はまだ入力行列の形式についてはわかりません。さらに読むと、PHPが行列を2次元配列として使うことが分かりました。このコードを動作させるには、入力がm x n行列でなければなりません。この行列は、一致がある場合は値1を、一致しない場合は0を持ちます。 $ matrix ['course_name'] ['room_name'] = 1とマッチするか、0とマッチしないか、各コース名と部屋名に一意の番号を割り当てて配列のインデックス? – user1258469

+0

私は、各コースと部屋(1からnまで)に一意の番号(1からmまでの増分)を割り当てるべきだと思います。もちろん、名前をインデックスとして使用するようにコードを変更することは可能ですが、これは少し遅いと思います。 –

+0

ありがとうございました。あなたの答えはとても役に立ちました。 – user1258469

関連する問題