2011-01-22 17 views
3

私は2つの結果を得て、両方の中で最良の「順序」を得るのが好きです。 例:2つの結果の最適な「交差点」のためのアルゴリズム?

1レースでは5人、別のレースでは5人のレースがあります。結果は次のとおりです。 人種1.

1. Karl 
2. Fred 
3. John 
4. Peter 
5. Sid 

人種questinがある2

1. Steven 
2. John 
3. Karl 
4. Peter 
5. Aron 
6. Fred 
7. Kevin 

:いただきましこれらのレースの両方のトップ7?

nr1がこの場合Karlであることは明らかです。彼は1位と3位を保持しているため、Johnsの2位と3位より優れています。しかし、スティーブンも同様に良いかもしれないが、彼は1つのレースにしか参加しておらず、何らかのペナルティを受けるべきである。

この問題の既知のアルゴリズムは何ですか?任意の些細な解決策はありますか?私はそれを理解することができません

+0

興味深い質問ですが、実際のレース時間のデータがあるかどうかは、単純にポジションに頼るのではなく、依存します。 –

+0

本当にあなたの質問は何ですか? 'これらのレースのトップ7は何ですか?'と 'この問題の既知のアルゴリズムは何ですか?些細な解決策はありますか?私にとってはまったく異なる2つの質問のようです。ランキングアルゴリズムのためのGoogle – Haozhun

+0

Google。一般的には難しいですが、2つのレースでは適切なものが見つかるかもしれません。 – marcog

答えて

2

あなたが重みに位置を関連付けることができます(ポイントと考える) 例えば第一の位置については第2は18であり、第3は16などである。
参加ミスは-5の重みに関連する可能性がある。 必要に応じて番号を調整できます。

最終結果を確認するには、全員の重みを加算して数値を比較します。

私はそれが動作するはずだと思う。..

0

純粋な解決策は、すべてのプレイヤーのための何らかの種類のIDを持つことです。両方のリストを通過し、あなたが出会う新しいIDを別のリストに追加します。たとえば、Positionsなどです。これらのIDのすべての値を、レースポジションではない大きな数値に設定します。これをBIG_VAL(例:100)とします。最初のリストを見て、Positionsリストのすべての位置を新しい値としてマークします。これはちょうど最初のレースだったので、ここで特別なものは何もありません。次に、2番目のリストに進み、そのIDの2番目のポジション結果をポジションリストに追加します。発生していないIDの場合は、結果に別のBIG_VALを追加します。リストにはレースポジションが順番に表示され、残っているものは並べ替えるだけです。カールは4になり、ジョンが5になり、フレッドは8なる、というように、このリストにあるでしょう:

http://bit.ly/fvYtal

1

別のアプローチは、以前のレースの順序と一致しているトップノードの順序付けを作成することです。これはmax-flow algorithmを使用して行うことができます。