時間と空間の特定の数の決定(最悪の場合)


10

と仮定する整数であるようにすべてに対して、それぞれの出現特定の数を除く数は奇数です。発生が偶数である番号を見つけてください。A[1..n]0A[k]m1knA[1..n]

あり私たちはソート:アルゴリズムに、ブレーク要素の値がある多くの部分、には、同じため、各要素の出現回数を数えることができます。Θ(nlogn)A[1..n]B[1..n]B[1..n]

最悪の場合 -time-and- -spaceアルゴリズムを見つけたい。O(n)O(n)

するとおよび、したがって、基数ソート許容されません。 ように、バイナリビット演算がます。m=Ω(n1+ϵ)ϵ>0A[1]xorA[2]


以下のAryabhataの答えは、一般的なケースは適切ではないことを示していますが、おそらく、さらに制限を利用できますか?単純な(しかし大きな)制限は、配列内のすべてのエントリのサイズがであることを強制することです。これはかなり簡単な線形アルゴリズムを提供します。O(n)
ルークマシソン

1
@LukeMathieson:私が引用た論文が変更なしで機能することまだ確信しいないため、私はその答えを削除しました。さらに、OPは均一コストのRAMモデルのみに関心があるようです。
Aryabhata

@Aryabhata:へへ、まあ、そこにはない答え!興味深く、おそらくフランクにとって有用であると思いますが、論文の結果を適合させることの問題は何だと思いましたか?簡単なスキムがそれを適用することを提案しましたが、私は明らかにそれを読みませんでした。
ルークマシソン

@LukeMathieson:他の要素が現在の問題で奇数回出現する必要があるという事実。それ以来、私も証明をすくい取りました...
Aryabhata

理論的な結果や実用的な解決策に興味があれば興味深いでしょう。理論的な観点から、私の最初の素早い応答は、整数のリストをよりも速くソートできることです。時間で実行されるHanによる決定論的アルゴリズムがあり。ランダム化されたアルゴリズムの場合、さらに良い結果が得られます。たとえば、HanとThorupは予想時間アルゴリズムを見つけました。しかし、あなたの問題はソートを必要とすべきではないと私は思います。O(nlogn)O(loglogn)O(nloglogn)
A.Schulz

回答:


2

ここに単純なアルゴリズムのアイデアがあります。すべての発生を数えるだけです!

  1. 検索。-時間m=maxAΘ(n)
  2. 「割り当て」配列。-時間 ¹C[0..m]O(1)
  3. が見つかったら、を反復処理し、を1つ増やします。が場合、線形リストを追加します。-時間AC[x]A[_]=xC[x]0xLΘ(n)
  4. を反復し、偶数の要素を見つけます。-時間。LxeC[xe]O(n)
  5. 返し。xe

全体として、これは(割り当てという意味で)大量のメモリを使用する線形時間アルゴリズムを提供します。ここは、とは無関係に一定の時間でにランダムアクセスできることが重要です。Cm

このアプローチでは、空間にバインドされた追加のはより困難になります。時間ルックアップを提供する辞書のデータ構造は知りません。予想ルックアップ時間(テーブルのサイズ、は格納されている要素の数)を使用した実装であるハッシュテーブルを使用できるので、予想どおり線形空間で任意に取得できます。すべての値が同じハッシュ値にマッピングされている場合は、失敗しています。O(n)O(1)O(1+k/n) nkA


  1. RAMでは、これは暗黙的に行われます。必要なのは開始位置と終了位置だけです。

0

ほとんど平凡な解決策-スペースを使用しますが、ハッシュマップを使用することです。ハッシュマップには、要素を追加および検索するためのランタイムが償却されていることを思い出してください。Θ(n)O(1)

したがって、次のアルゴリズムを使用できます。

  1. ハッシュマップ割り当てます。反復します。各要素、表示される出現回数、つまり増やし。HAiAH(i)++

  2. ハッシュマップのキーセットを反復処理し、どのキーに出現回数が偶数かを確認します。

これは、大きなトリックをまったく使用しない単純なアルゴリズムですが、これで十分な場合もあります。そうでない場合は、どのスペース制限を課すかを指定することをお勧めします。


多項式空間を使用したランダム化されていない時間アルゴリズムがある場合、私はまだ知りたいです。特に、偶数のみのアイテムを見つけることが奇数のみのアイテムを見つけるよりも難しいという理論的な証拠はありますか?O(n)
A.Schulz

@ A.Schulz ハッシュテーブルを使用した -expected-timeアルゴリズムだと思います。誰かがアルゴリズム(または、特別なケースでは、奇数= 1と偶数= 2)をスタックで多分教えてくれたことを覚えていますが、思い出せません。O(n)O(n)
Yai0Phah

すべてのハッシュテーブル実装にこの特性があるわけではありません。通常、ルックアップはではなく、償却もされていません(afaik)。実際、以前の説明では、一定の時間ルックアップを行う実装は得られていません。より具体的にできますか?O(1)
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.