2011-09-15 2 views
11

私たちにはアイテムのリストがあり、各アイテムは(未知の)属性の数を持っています。単一属性によるソートは単純なソートアルゴリズムです。 質問は、すべての属性で同じリストの並べ替えを並べ替える方法ですか? 各属性には重みがありますので、まず重要度の低い属性を最初にソートし、次により安定性の高いソートアルゴリズムなどを使用してより重要な属性で並べ替えることができますが、これは明らかに効率的ではありません。どのマルチ評価基準ソートアルゴリズムを使用するのですか?

ありがとうございました。

答えて

5

関数f:A1xA2x ..-> R [すなわち、優先度と属性に基づいて各要素に値を与える]。関数は属性に非常に依存しています(たとえば、属性値が0,9の場合、値はシンプルです):Sigma[val(i)*10^prio(i)] for each attribute i

リストを反復し、関数値を計算し、この関数結果をキャッシュし、それに従ってソートします。複雑さはO(nk + nlogn)となります。ここで、kは属性の数、nは要素の数です。

+2

比較されているとは何'prio(i)'ですか? – Dima

+1

'prio(i)'はi番目の属性の優先順位です。この例ではi = 0が最も重要ではありません。 – amit

+1

ちょっと!私はちょうどあなたの答えを見ました(2年後...)..そして私はそれを約2日間理解しようとしています..あなたはアルゴリズムを説明しようとするか、 –

1

ほとんどのソートアルゴリズムは、複数のソート基準を組み合わせることができる1つの比較関数を入力として使用できます。

結局、すべての要素を並べ替えることができるようにするには、すべての要素の間に順序関係がなければなりません(例えば、Aは要素Bの前にあります。推移的/対称的/再帰的な性質を満たさなければならない)ので、これは、有効な比較関数があれば、ソートアルゴリズムの1回のパスでソートすることが可能でなければならないことを意味する。

ソート内部のあなたの比較意志
+1

これはまた、各比較でk個の要素をチェックする必要があるので、これはO(k * n * logn)最悪の場合です。[kは属性の数で、nは要素の数です]安定したアルゴリズムでk回ソートするのと同じ境界。 – amit

+1

はい、ただし、安定した並べ替えを使用する必要はありません。 –

+1

真であり、すべての要素に対してすべてのk個の比較を必要としないので、パフォーマンスはおそらくより良くなるでしょう。漸近的に同じであることを指し示しています[少なくとも最悪の場合は] – amit

10
SORT BY A,B,C 

: A、B、C、最高である最低prioerity

  • が大きいか小さい場合は要素2と要素1のAは、
    • です比較します返品結果
    • さもなければ比較B
      • 大きいか小さいリターン結果
      • さもなければ
      • 比較Cリターン結果
    • 場合

これは、単純なループでA..n基準に外挿することができます。基準のリスト中の各基準の

    • は、Element 2の持つ要素1の基準を比較
      • 大きいか小さいリターン結果
    の場合012

両以上

  • 戻り等しい明確にするためエルス
      • 続け//あなたの比較機能(要素1、エレメント2)

  • +1

    これはO(k * n * logn)。ここで、kは属性の数であり、nは要素の数であり、単純にk回ソートするのと同じです。 – amit

    +0

    この問題は、1つの基準Aが他のすべてよりも無限に大きな重みを持つということです。学生は数学に優れており、私のロボットチームに誰かを参加させたいと考えています。しかし、学生は、倫理、プロフェッショナル、コーディング、薬物問題などを抱えていますが、数学は重要な要素を開始しているので、最高の生徒は少なくともこれが最高の生徒になると提唱します。 –

    +1

    @MuhammadUmer - アルゴリズムではなく*ソート*アルゴリズム。だから、あなたが賞賛すると思うものに基づいて各生徒のスコアを生成したいと思うでしょうし、そのスコアだけでソートします。 –

    関連する問題