質問

いるアルゴリズムを開発できるように走る.単一の数の削減をもたらその後の数が多い。

では、連続セット番号.このソートにまとめました。リスト, 1;2;3;5;6;4 があり、1;2;3 5;6.またこれらに代わる単一の番号、最低なので、を取り除いた後、い.4要素の順列を数1...4.の以上を削減していくのです。最初に実行する1,4変形による2[5;6]に変3、第二基準とします。いうの減.その後の拡大の要素の中からマッピング、ソートの順列によっ同じ結果です。の変換なして行います。

例えば私の運転):

(1;2;3;4;5;6) => 1 //Mappings: 1->1;2;3;4;5;6
(2;3;4);1;(5;6) => 2 1 3 // Mappings: 2->2;3;4, and 3->5;6
(3;4);(1;2);(5;6) => 2 1 3 // Mappings: 2->3;4, and 1->1;2 and 3->5;6

今、私が通過すると、リストやリストのリストは、グルーピングを運行しています。ものであり、これらの難しい部分をクリーン。私のことを考えながらナイーブアプローチ、好奇心だが巧妙な仕掛けだよし、鉱山ださいO(2n+n log n),

  • 交換には、head要素の実行を挿入するデータのハッシュテーブル(回収可能性)
  • 選別地図を作成に欠桁でソートされた。[1;6;5;4]が出力[(1,1);(4,2);(5,3);(6,4)]
  • 置き換えにリストstep1の地図作成され、step2の更新のためのハッシュテーブルです。

実例してもらうことを目的として

step 1: replace runs with the head element of the run and inserting data into a hash table  
    [1;3;4;2;5;6;] -> [1;3;2;5]  
step 2: sort array to create map  
    [1235], so we know that, in the previous array, 1 maps to 1, 2 to 2, 3 to 3, 4 to 5.  
step 3: do above translation on array from step one. 
    [1;3;2;4]

いうこの順列を復元す:[1;2;3;4], 3->3;4 4つき)->5;6取得します, 1;2;3;4;5;6.また全部エクスペディアで。

私が使っているリストで機能的なアプローチが好ましい。バーコードが必要です。すべてのアイデアはもちろん、大歓迎です。

編集:

mweerden:

では明らかでなんからの具体的な状況にマッピング。なぜな認められるというのpermutation[1,2,...,N]のための完N運?しまうというか。を地図で走行の数字できるものとしてこれだけではないですかめることにより自由になるのです。–

ん。プが行番号と見!), が必要な時に保存 ご注文.る.[1;2;3...N] 走行は、このように削減できます。そのため、お客様が所有する情報を取り出すことができます。についても更なる事業別のアルゴリズムが、個々の要素の拡張が可能での救済のpermutation.

役に立ちましたか?

解決

表記:

  • 計測開始1
  • l.i は要素 i リスト l
  • l+m の連結リスト lm
  • 走りは最大のキーキャッシュとリスト [n,n+1,n+2,...,m] 一部の nmn <= m

それが自分たちに与えられた. p のリスト [1,2,...,N].日本国内におけ p アップ運転 r_1,r_2,...,r_M その p = r_1+r_2+...+r_M.私たちは見換 q[1,2,...,M] その r_(q.1)+r_(q.2)+...+r_(q.M) = [1,2,...,N].

例えば、 p = [1,3,4,2,5,6], ていま N=6, M=4, r_1 = [1], r_2 = [3,4], r_3 = [2]r_4 = [5,6].この場合に必要がありま q する [1,3,2,4] として r_1+r_3+r_2+r_4 = [1]+[2]+[3,4]+[5,6] = [1,2,3,4,5,6].

ご注意 q を含めることはできませんの長さにより定義;だから、あ i < Mq.i + 1 = q.(i+1) いたこともあって、sublist r_(q.i)+r_(q.(i+1)) = r_(q.i)+r_(q.i + 1)[1,2,...,N], ものの、 r_(q.i)+r_(q.i + 1) ものsublist p すると矛盾すること r_(q.i)r_(q.i + 1) が運行しています。

今を探す q 与えられ p, においては、マッピングデータ構造 O(1) に挿入し、ルックアップの数とリスト O(1) を追加するとフォートラバーサルをサポートします。しています。

  • まず最初に構築の一覧 runheads = [r_1.1,r_2.1,...,r_M.1].これを行うtriviallyを横断 p を維持しながら、現在ました。このステップまでの最大数を得るた N の終了をマッピング heads の要素 runheads しています。この段階では明らかに O(n).ではありませんので予めご了承関係の価値 heads のは、いまだ使用実 r_i としての価値のためのキー r_i.1.

  • さて次に対して繰り返し処理を実行から 1 を含む) N 保価値 k 初期値 1.各値 i チェックしていますが iheads.そのような場合にはを追加しました i -> k にマッピング fk.このステップはイメージも明確にしています O(n).ることができるから qp またバナー広告をタップ追加のマッピング revk -> ik -> runheads(i) なbig-Oます。

  • 最後に応用してマッピング f の要素 runheadsq.再 O(n).

例例を見る p = [1,3,4,2,5,6].

  • 最初のステップまで runheads = [1,3,2,5], N=6heads = { 1 -> [1], 3 -> [3,4], 2 -> [2], 5 -> [5,6] }.

  • 第二段階とし場してい: 1, 2, 35.これらの場合におい値 k その 1, 2, 34, ます。すること f ます { 1 -> 1, 2 -> 2, 3 -> 3, 5 -> 4 }.( rev{ 1 -> 1, 2 -> 2, 3 -> 3, 4 -> 5 } または { 1 -> [1], 2 -> [2], 3 -> [3,4], 4 -> [5,6] }, によって何を選びました。)

  • q 計算しました map(f,runheads) である [f(1),f(3),f(2),f(5)] または、同様に、 [1,3,2,4].

くわなかった場合は失敗した場合にはデータ構造を満たす上記の要件を満た、この解決すべき O(n).るということに注意してくださ練習も実際に有用な使用(O(n*log(n)))。ていれば大きな p でも、選別 runheads それを使用すること、それにマッピングがより効率的です。考にして成長したいと思い p においては非常に大きなこと。

他のヒント

編集のためのclarificaton

ステップ1:のアルゴリズムではなく生産で唯一のハッシュテーブルをハッシュテーブル(D1)物価連動により、ヘッドセットのでのマッピング(例えば、[3,4]3)リスト(L1)を設定し、その

[3;4;6;8;1;2]:

   D1              L1

3 -> [3,4]     1 -> [3,4]

6 -> [6]       2 -> [6]

8 -> [8]       3 -> [8]

1 -> [1,2]     4 -> [1,2]

ステップ2:まだコレクションにいてんは、指定されたセットのインデックスをすでにチョークコイルL1)の値です。正しいマップ値の最小の整数としてではない既に使われています。例えば、[3,4]までの値を指定する画面が表示され1、3、1については、対応する値は2になります。ることが考慮されている、D1は物価連動の価値の低価を受けた場合、対応する設定が存在します。の例では、[1,2]マップされ(1)にすると、このキーがすでに"について".そこで擬似コード:

for (int Current = 1; Current  < L1.Length; Current++)
{
  GetHead(L1[Current]);
  Index = Current;
  While Head > Index
  {
    if D1.Empty(Index)
    {
      D1.Add(Index,D2[Current])
      D1.DeleteIfNotEmpty(Head);
    }
    else
      Index++;
  }
}

例えば、

  • また最初の値にチョークコイルL1->[3,4]...
  • のヘッド=3
  • から1を参照D1[1]であるについては、その値が2.
  • 私たちD1[2]が空い割り当てD1[2]=[3,4]削除D[3]

を提供いたしませんO(n)でもO(n+log(n)nのための最初のステップlog(n)の秒)

例えば上記を取得するす:

1 -> [1,2]
2 -> [3,4]
3 -> [6]
4 -> [8]

今の場合[3;4;8;6;1;2], することによ

1 -> [1,2]
2 -> [3,4]
3 -> [8]
4 -> [6]

ですので使用は絶対の順序の配列、ないわからないという場合はすべての権利やしてください6あるインデックス3 8を指数4、その場合はおそらくたねL1に基づき、日本におけるドにお複雑さによるLog(n)

ばねん0(n+ログ^2(n))ではないかと思いつも以下を想定したQuickSortはO(Log n)オーダリングL1ますO(log(log n))

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top