別のリストで定義された注文に従ってリストを並べ替えます

StackOverflow https://stackoverflow.com/questions/3466961

  •  28-09-2019
  •  | 
  •  

質問

リストの要素を並べ替えるにはどうすればよいですか a 彼らが別の(スーパーセット)リストの注文に従うように b?複製がないと仮定します。

例えば a 8 2 5 1]を含む可能性があります b 5 6 9 8 7 4 1 2 3]が含まれている可能性があるので、整理したい a 5 8 1 2]になる

これを効率的に行う方法に興味があり、ランタイムの複雑さが良好です。

役に立ちましたか?

解決

もしも b のスーパーセットです a, 、私はただダンプします a ハッシュテーブル、スキャンに b そして、すべての要素を挿入する新しいリストを作成します b ハッシュテーブルに含まれています。 O(a)余分なメモリとO(b)ランタイムを使用します。

他のヒント

ここにいくつかのアイデアがあります:

(与えられた時間の複雑さでは、 n のサイズです am のサイズです b. 。時間の複雑さは単純化されていません。)

  • 各要素に対して b, 、線形検索を行います a その要素がその中に存在するかどうかを確認します。もしそうなら、最初の要素と交換してください a それはまだ所定の位置に置かれていません。 時間の複雑さ:o(nm)
  • 上記と同じですが、最初にの内容を置きます a 線形検索を回避するための効率的なルックアップ構造に。 時間の複雑さ:O(1)ルックアップを仮定するO(n + m)
  • 選別 b. 。次に、各要素に対して a, 、そのインデックス(存在することが保証されている)を見つけます b バイナリ検索の使用。このインデックスを同じサイズの補助配列に記録します a. 。その一連のインデックスを、ソートするコンパレータへの入力として使用します a. 時間の複雑さ:o((m log m) +(n log n) +(n log n))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top