分割可能なスタック


22

次の2つの操作の対象となる一連のアイテムを維持できるデータ構造について、何が知られていますか?

  • Push(x):シーケンスの最後にxを追加し、シーケンス内の位置の識別子を返します
  • Extract(S):順序付けられていない識別子のセットを指定し、それらの位置のアイテムをシーケンスから削除し、削除されたアイテムのリストをシーケンス順に返します

必要に応じて、これを2つのスタックに分割する分割操作を備えたスタックまたはキューと考えることができます。抽出操作を使用してポップまたはデキュー操作を実装でき、抽出されたアイテムのシーケンスも配置できます別のスタックまたはキューに再び戻ります。

既に知っていること:シーケンスを二重リンクリストとして維持できます。各識別子はリンクリストノードへのポインタであり、各ノードには2つの無関係な要素の位置をすばやく比較できる位置番号も格納されます。シーケンス内。データ構造が進行するにつれて位置番号を更新することは難しくありません。すべて最大値正の整数になります。ここで、nはリスト内の現在のアイテム数です。このデータ構造では、抽出操作の唯一の難しい部分は、抽出されたアイテムを位置番号でソートすることです。抽出k個のアイテムがかかりO kはO(n)nkたとえば、FOCS 2002のHanとThorupの整数ソートアルゴリズムを使用してランダム化された時間を予想し、プッシュ操作には一定の時間がかかります。O(kloglogk)

私が知らないこと:時間で抽出を処理し、一定時間でプッシュすることは可能ですか?この問題に関する文献はありますか?整数ソートと同じくらい難しいですか?O(k)

動機:これは、グラフ描画にも応用できるCoffman-Grahamスケジューリングアルゴリズムでアイテムを注文するために必要な基本ステップです。Coffman-Grahamの難しい部分は、辞書式トポロジカル順序です。これは、異なる次数ごとに、残りの頂点によって誘導されたサブグラフ内のその次数を持つ頂点のシーケンスを維持することによって実行できます。次に、ゼロ次の頂点のシーケンスから最初の頂点繰り返し削除し、トポロジカル順序に追加します。以前に属していた次数からvの近傍を抽出し、次に小さい次数のシーケンスにプッシュします。したがって、O k vvO(k) このデータ構造の抽出操作の時間は、Coffman-Grahamアルゴリズムの線形時間実装につながります。

もともとこれを尋ねて以来、1976年にSethiがCoffman–Grahamアルゴリズムを線形時間で実装できる論文を見つけそれをWikipediaのCoffman–Grahamアルゴリズムに関する記事に含めました。しかし、答えが何であるかはまだ知りたいです。


挿入がシーケンスの最後でのみ発生する場合は、アイテムの位置の二重リンクリストとハッシュテーブルの両方を保持できます。挿入:償却O(1)(最後の項目へのポインターを保持するだけです)。k個のアイテムの抽出:償却O(k)(Sの各要素について、ポインターを取得してハッシュテーブルから削除し、リストからアイテムを取得して削除し、抽出結果に追加します)。
マルツィオデビアシ

3
リストからアイテムを抽出するのに時間がかかるのではなく、引数のソートされていない順序から抽出して正しいシーケンスの順序に並べ替えます。
デビッドエップシュタイン

回答:


1

私は、これは、少なくとも整数の集合ソートのような硬いようだと思うでサイズの多項式の「ランダムなアドバイス」をn個。ランダムなアドバイスでは、任意のnに対して、サイズpoly(n)の文字列上に固定分布D nnのみに依存)があり、アルゴリズム(RAMマシンでモデル化)がDからの単一サンプルへのランダムアクセスを与えられることを意味しますn個D nは、[ n ]をプッシュした後の(ランダム化された)データ構造ですS[n]nnDnnnDnDn[n]順番に、予想される時間で整数を識別子にマップするハッシュテーブルと一緒に。O(1)

インスタンスのためにその設定、所与整数ソート問題が、我々は、抽出物(発行できS)(実際には、我々はの識別子必要Sをこのマッピングはで行うことができるO 1 ハッシュを使用してアイテムごとの時間をアドバイスの一部であるテーブル)および入力は、抽出の実行にかかる時間でソートされます。S[n]SSO(1)

したがって、メッセージは、整数の上限のみに依存する「無料の」サイド情報が整数のソートを容易にすることができない限り、抽出は整数のソートと同じくらい難しいということです。

これは、奇妙なモデルのない2つの問題の関係を暗示していますか?ランダムアドバイスのこの概念は何か知られていますか?これは、MAプロトコルのようなものですが、Merlinのメッセージは入力に依存することは許可されておらず、Arthurの実行時間が重要です。


[n]DnΩ(n)DnΩ(n)k[n]O(n+k)O(k)
デイブ

Ω(n)DnkO(k)Dn

ここに、この答えが完全に納得できないと思う理由があります。ソートする整数のセットSが1つしかない場合、すべてが線形時間です(O(n + k)でソートをカウントするだけです)。ただし、このデータ構造を使用して多くの小さな並べ替えのシーケンスをシミュレートしようとすると(したがって、並べ替えのカウントでは十分ではありません)、これらの小さな並べ替えの最初の1つだけが完全に制約されません:その後、いくつかを削除しました[n]の要素のうち、並べ替える各シーケンスは、前のシーケンスと切り離されている必要があります。そのため、ソート作業を減らすことは難しいようです。
デビッドエップシュタイン

O(k)O(n+k)

Ω(n)DnO(k)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.