データ構造を夢見ましたが、存在しますか?


27

このデータ構造を見つけることができませんでしたが、私はこの分野の専門家ではありません。

構造体はセットを実装し、基本的には不変量を持つ比較可能な要素の配列です。不変式は次のとおりです(再帰的に定義されます)。

長さ1の配列はマージ配列です。

長さが2 ^ nの配列(n> 0の場合)は、マージ配列です。

  • 前半はマージ配列で、後半は空または
  • 最初の配列はいっぱいでソートされており、後半はマージ配列です。

配列がいっぱいの場合、並べ替えられることに注意してください。

要素を挿入するには、2つのケースがあります。

  • 前半がいっぱいでない場合は、前半に再帰的に挿入します。
  • 前半がいっぱいの場合、後半に再帰的に挿入します。
  • 再帰的なステップの後、配列全体がいっぱいになった場合、(ソートされた)半分をマージし、元の長さの2倍にサイズ変更します。

要素を見つけるには、配列がいっぱいになったときにバイナリ検索を使用して、両方の部分で再帰します。(昇順フラグメントが最大であるため、これは効率的です)。O(log(n))

この構造は、マージソートの静的バージョンと考えることができます。

要素を消去するために何をすべきかは明確ではありません。

編集:構造の理解を向上させた後。


5
定義したため、存在します。ただし、いくつかのポイントを平滑化する必要があると思います。最初に、不変式#2は、中間状態に説明するように適用されないように見えるので、私を混乱させます。第二に、要素が削除されたらどうしますか?
ラファエル

7
あなたは夢見アップそれを夢見ていないデータ構造、...
アンドレイ・バウアー

@Raphaelコメントありがとうございます。あなたの考えに従って定義を改善しました。削除のアルゴリズムについては考えていませんでしたが、この構造が文献にあるかどうかを確認してから、さらに時間を費やしました(そしてGoogleで何も見つかりませんでした)。最初の文で、神を定義できますが、それは存在しますか?:)
プバレン

@Andrejありがとう、英語は私の母国語ではありません。(私もそれはあなたのものではないと思います:)
pbaren

3
@Andrej:もともと「夢見ていたOP ほぼ確実に意図されたではないものです」、。「up」ではなく「of」に変更しました。両方とも文法的に正しいですが、両方とも意味を変えます。「うち」...もっと面白い響きのオプションだった
アンドラス・サラモン

回答:


31

あなたは静的なソートされた配列に適用される古典的なBentley-Saxe対数法を説明しています。同じアイデアを使用して、分解可能な検索問題の静的データ構造への挿入(挿入または削除なし)のサポートを追加できます。(集合および回答から任意の共用体の回答を簡単に計算できる場合、検索問題は分解可能です。)変換により、償却されたクエリ時間が倍に増加します(ただし、多項式よりもすでに大きかったA B O ログN NABABO(logn)n)、ただし、一定の係数だけスペースを増やします。はい、Overmarsとvan Leeuwenのおかげで償却できますが、必要のない場合はそれをしたくありません。

これらのメモは基本をカバーしています。

キャッシュを忘れた先読み配列は、Bentley-Saxeとvan Emde Boasの木のステロイドの変異子孫です。


4
それらは美しく書かれ、図解されたメモであり、私はそれらを何度も参照として使用しました。それらを利用可能にしてくれてありがとう!
-jbapple

キャッシュオブリビアスルックアヘッドアレイを紹介する論文の前半の)シャトルツリーがvEBツリーとどのように関連しているのかわかりましたが、COLAとvEBツリーの関係は何ですか?
jbapple

2
おかげで、この資料はアイデアの非常に興味深い一般化のようです。データ構造は凍結されたアルゴリズムであり、ステップごとに実行できると常に考えていましたが、その直感の有用な形式化を見つけたことがありませんでした。
プバレン

最初のリンクは他の誰かのために機能しましたか?
AT

はい、試しました。(残念ながら、エルゼビアのペイウォールに行きます;ごめんなさい!)
ジェフ

11

これは、ログ構造のマージツリーまたはキャッシュ忘却先読み配列(またはCOLA)に似ています。

最も単純なCOLAは、サイズ配列で、の長さ仮想「レベル」が配列内に順番にレイアウトされています。各レベルは完全に空または完全に空であり、各レベルはソートされます。2 I 0 I < K2k12i0i<k

アイテムを挿入するには、レベル0が空の場合、レベル0(長さ)でアイテムを配置します。それ以外の場合は、レベル0のアイテムとマージし、結果の長さ2のリストでレベル1(長さ)を埋めます。レベル1がすでにいっぱいの場合は、再度マージします。繰り返す。2 12021

挿入には、償却/最悪の場合の時間がかかります。ルックアップには時間かかります。より高度なバージョンでは、これらを減らして部分的に償却できます。O n O lg 2 n O(lgn)O(n)O(lg2n)

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