タグ付けされた質問 「ds.data-structures」

スペースの下限、オブジェクトの挿入と削除の時間の複雑さなど、データ構造のプロパティとアプリケーション。

3
データ構造の下限
「あまりにも良い」データ構造の存在を除外する結果が知られていますか? たとえば、注文メンテナンスデータ構造におよび機能を追加し(DietzおよびSleator STOC '87を参照)、時間操作を取得できますか?Sp l i tSpl私tSplitJO I NJo私nJoinO(1)O(1)\mathcal{O}(1) または:整数キーと時間操作を使用して順序付きセットを実装できますか?もちろん、これは少なくとも整数をソートするための線形時間アルゴリズムを発見するのと同じくらい難しいです。O(1)O(1)\mathcal{O}(1) これらの質問のどちらに対しても答えはノーであることが証明されていますか?自然なデータ構造の下限の結果はわかっていますか?


3
連想ハッシュミキシング
純粋に機能的な設定で、一重にリンクされたリストを検討してください。その賞賛は山頂から歌われており、今後も歌われ続けます。ここでは、その多くの長所のうちの1つと、それをツリーに基づく純粋に機能的なシーケンスのより広いクラスに拡張する方法の問題に取り組みます。 問題は次のとおりです。強力なハッシュを使用して、O(1)時間のほぼ一定の構造的同等性をテストする必要があります。ハッシュ関数が構造的に再帰的である場合、つまり、hash(x:xs)= mix x(hash xs)の場合、リストのハッシュ値を透過的にキャッシュし、要素が既存のリストに結合されたときにO(1)でそれらを更新できます。リストをハッシュするためのほとんどのアルゴリズムは構造的に再帰的であるため、このアプローチは実際に非常に有用です。 しかし、一重リンクリストの代わりに、O(log n)時間で長さO(n)の2つのシーケンスの連結をサポートするツリーベースのシーケンスがあるとします。ここでハッシュキャッシングを機能させるには、ツリーが同じ線形シーケンスを表す際に持つ自由度を尊重するために、ハッシュミキシング関数を連想的にする必要があります。ミキサーは、サブツリーのハッシュ値を取得し、ツリー全体のハッシュ値を計算する必要があります。 これは、6か月前、この問題を熟考して調査するのに1日費やした場所です。データ構造に関する文献では注目されていないようです。暗号化からTillich-Zemorハッシュアルゴリズムに出くわしました。これは、ビット0と1がガロア体のエントリを持つ部分代数の2つの生成器に対応する2x2行列乗算(連想)です。 私の質問は、私が逃したものは何ですか?私の検索で見つけられなかった暗号とデータ構造に関する文献の両方に関連性のある論文がなければなりません。この問題についてのコメントと探求する可能性のある場所は大歓迎です。 編集:スペクトルのソフトと暗号の両方の強みに関するこの質問に興味があります。よりソフトな側面では、衝突を回避する必要があるが壊滅的ではないハッシュテーブルに使用できます。強い面では、同等性テストに使用できます。

4
赤と黒の木の部分範囲
ライブラリのバグを修正しようとしていたとき、私は赤と黒の木のサブレンジを見つけることに成功せずに論文を検索しました。私はジッパーと 不変データ構造の削除アルゴリズムで使用される通常の追加操作に似た何かを使用するソリューションを検討していますが、私は見つけることができなかったより良いアプローチ、または最小の複雑さの境界さえあるのだろうかとまだ疑問に思っていますそのような操作で? 明確にするために、赤と黒のツリーと2つの境界が与えられた場合、それらの境界内に属する最初のツリーのすべての要素を含む新しい赤と黒のツリーを生成するアルゴリズムについて説明します。 もちろん、複雑さの上限は、1つのツリーをトラバースし、要素を追加して他のツリーを構築する複雑さです。

1
個別のチェーンにはどの程度の独立性が必要ですか?
ボールがランダムにn個のビンに均等に配置されている場合、最も負荷の高いビンには、O (lg n / lg lg n )ボールが含まれている可能性が高くなります。では、「シンプル集計ハッシュの力」、PătraşcuとThorup言及その「限定された独立したアプリケーションのためのチャーノフ-Hoeffdingは境界」(ミラー)ボールがで配布されている場合は、最も重いロードされたビンの人口にバインドこれも保持していることを示していますΩ (lg n / lg lg n ) -独立したハッシュ関数。nnnnnnO (lgn / lglgn )O(lg⁡n/lg⁡lg⁡n)O(\lg n/\lg \lg n)Ω (lgn / lglgn )Ω(lg⁡n/lg⁡lg⁡n)\Omega(\lg n/\lg \lg n) 「ボールとビン:小さいハッシュ家族と高速評価」、セリスら。ハッシュ関数のファミリーがあるかどうかは知られていないことに注意してください ハッシュ関数はビットのスペースで表すことができますO (lgn )O(lg⁡n)O(\lg n) ハッシュ関数は時間で評価できますO (1 )O(1)O(1) 最大負荷は、高い確率でです。O (lgn / lglgn )O(lg⁡n/lg⁡lg⁡n)O(\lg n / \lg \lg n) 定数がある場合はなどあらゆるもののk#3のために非依存性のファミリーで十分で、それはの多項式建設K非依存性の家族は#1と#2を満たしています。kkkkkkkkk kに依存しないハッシュを使用した最も負荷の大きいビンにはどのような境界がありますか?kkk …

2
間隔の更新とゼロの数のクエリのデータ構造
私は、サイズnの整数テーブルを維持し、時間O (log n )で以下の操作を許可するデータ構造を探しています。tttnnnO(logn)O(log⁡n)O(\log n) 、 t [ a ] 、t [ a + 1 ] 、… 、t [ b ]を増加させます。increase(a,b)increase(a,b)\text{increase}(a,b)t[a],t[a+1],…,t[b]t[a],t[a+1],…,t[b]t[a],t[a+1],\ldots,t[b] 、 t [ a ] 、t [ a + 1 ] 、… 、t [ b ]を減少させます。decrease(a,b)decrease(a,b)\text{decrease}(a,b)t[a],t[a+1],…,t[b]t[a],t[a+1],…,t[b]t[a],t[a+1],\ldots,t[b] 。これは、 t [ i ] ≠ 0となるようなインデックス iの数を返します。support()support()\text{support}()iiit[i]≠0t[i]≠0t[i]\neq 0 同じパラメーター使用して、減少するすべての呼び出しを以前の呼び出しと一致させることができるという約束があります。私が念頭に置いているアプリケーションは、時間O (n log n …

2
関数型プログラミングの違いリスト
質問岡崎以来の純粋に機能的なデータ構造の新機能 (論理プログラミングではなく)、およびjbappleの叙事詩の答えは、私は最近、これが見つけるために私を導いた。に興味を持ってきたものですこれは、関数型プログラミングでは、差分リストを使用して言及した差分リストの Haskellのための実装を。2つの質問があります(StackExchangeで2つの異なる質問をする必要がある場合は、ご容赦ください。)。 簡単な質問は、Haskellライブラリにあるもの以外に、関数型プログラミングや実装の違いリストの学術的検討を知っている人はいますか?jbappleの答えは、差分リストの引用を提供しませんでした(ロジックプログラミングの差分リストは、伝承と、Around Here Somewhere(TM)にあるいくつかのソースにあります)。Haskellの実装を見つける前に、そのアイデアが論理から関数型プログラミングに飛躍したことを知りませんでした。確かに、Haskellの差分リストは高階関数の自然な使用であり、ロジックプログラミングのものとはまったく異なる動作をしますが、インターフェイスは確かに似ています。 私が聞きたかったのは、もっと興味深い(そしてずっと曖昧な)ものは、前述のHaskell差分リストライブラリの主張された漸近的上限かどうかです。正しい/妥当と思われるです。私の混乱は、怠inessな複雑さの推論について明らかなものを見逃しているためかもしれませんが、大きなデータ構造上の置換(またはクロージャー形成、変数ルックアップ、または何か)が常に一定の時間がかかる場合にのみ、主張された境界が意味をなします。または、「キャッチ」とは、単に「ヘッド」と「テール」の実行時間に制限がないということです。これらの操作は、遅延計算/置換の任意の山を耕さなければならないからです。

4
ツリーの回転に関する基本定理の参照
2つの二分探索木は、順番のトラバースで一致する場合、線形的に同等であると言われます。次の定理は、ツリーの回転が非常に基本的な理由を説明しています。 AとBをバイナリ検索ツリーとします。すると、AとBは、ツリー回転のシーケンスによって接続されている場合にのみ線形的に等価です。 私はずっと前にデータ構造について最初に学んでいたときにこの結果に気付き、ツリー回転の特別な状態をより深く理解したかったのです。 証明はシンプルで直感的です:左向きの脊椎に沿って最小の要素をルート位置まで回転させます。順序不変量により、この再配置されたツリーは左のサブツリーを持つことができません。次に、適切なサブツリーで再帰します。結果は、線形等価性をテストするための標準形式です。 それは基本的な定理ですが、私は文学でこれに出くわすことはありません。この結果を次に使用する必要があるときは、参考にしてください。 (ボーナス脳ティーザー:2つの線形に等価なバイナリ検索ツリーを接続するツリー回転の最短シーケンスを見つけるための最良のアルゴリズムは何ですか?)

2
動的メモリ割り当てのデータ構造
セルプローブモデルを考えてください。任意の長さの連続したメモリチャンク(Cのmallocなど)を割り当ててメモリのセグメンテーションを回避しながら解放できるデータ構造があり、最悪の場合の決定論的なO(log n)時間ですべての操作を実行します(nはメモリの合計サイズは? メモリのセグメンテーションを回避することで、空きセルの総数がFである場合、Fセルの連続したセグメントまたは約Fセルを割り当てることができるはずです。

1
分布に依存するdeleteMinを使用した整数の優先度キュー
次の操作でワードのスペースを使用する整数優先度キューにあります。すべてのワーストケースタイムで、ランダム性にアクセスできません。O(n)O(n)O(n) createEmptyQueuein いくつかの定数cに対して。O(lgcU)O(lgcU)O(lg^c U)ccc insertで。O(1)O(1)O(1) deleteMinO(δmin)O(δmin)O(\delta_{\min})δminδmin\delta_{\min} さらに、キーがaの対象になると、それ以降の挿入はすべてます。kkkdeleteMin>k>k> k 関連作業: ボーズらの「バウンドユニバースでの高速ローカル検索と更新」は、必要以上に高速ですdeleteMinが、必要以上に遅くなりますinsert。 Brodnikらの「ワーストケースコンスタントタイムプライオリティキュー」では、エキゾチックな「Yggdrasilメモリ」を使用しています。この質問の目的のために、私はより標準的な整数RAMモデルに興味があります。 Brodnikとカールソンの「マルチプロセス時間キュー」のキーを持つ要素を挿入を制限し、、ここで、k個のminは最小値キーの値です。(k分、k分+ δ分](k分、k分+δ分](k_{\min}, k_{\min} + \delta_{\min}]k分k分k_{\min} これはハッシュテーブルでは非常に簡単ですが、償却とランダム性を使用することに注意してください。 キューは、キーのハッシュテーブルと最小キーのコピーのペアです。 insert キーをハッシュテーブルに追加し、必要に応じて最小キーコピーを更新します。 deleteMinハッシュテーブルで最小キーを検索し、次にを順に検索して、次の最小キーを検索します。k分+ 1 、k分+ 2 、k分+ 3 、…k分+1、k分+2、k分+3、…k_{\min} + 1, k_{\min} +2, k_{\min} + 3, \dots

1
powerset
パワーセット2上の単調な述語を考えます。n | (包含順)。"単調"と私は意味:∀ のx 、yの∈ 2 | n | その結果、X ⊂ Y、もしP (X )、次いでP (Y )。私は、すべての最小限の要素を見つけるためにアルゴリズムを探していますPを、すなわち、X ∈ 2 | n | そのようなP (x )PPP2|n|2|n|2^{|n|}∀x,y∈2|n|∀x,y∈2|n|\forall x, y \in 2^{|n|}x⊂yx⊂yx \subset yP(x)P(x)P(x)P(y)P(y)P(y)PPPx∈2|n|x∈2|n|x \in 2^{|n|}P(x)P(x)P(x)しかし、¬ P (Y )。2の幅| n | は( n∀y⊂x∀y⊂x\forall y \subset x¬P(y)¬P(y)\neg P(y)2|n|2|n|2^{|n|}、指数関数的に多くの最小要素が存在する可能性があるため、そのようなアルゴリズムの実行時間は一般に指数関数的である可能性があります。しかし、出力のサイズが多項式であるこのタスクのアルゴリズムが存在する可能性はありますか?(nn/2)(nn/2)n \choose n/2 [コンテキスト:より一般的な質問が尋ねられましたが、出力のサイズにおけるアルゴリズムの複雑さを評価する試みはありませんでした。たとえば、最小限の要素が1つしかないと仮定すると、この回答に続いてバイナリ検索を実行して見つけることができます。ただし、さらに最小限の要素を探し続けたい場合は、既知の情報に時間を無駄にせずに検索を続行できるように、に関する現在の情報を維持する必要があります。これを行い、出力のサイズの多項式時間ですべての最小要素を見つけることは可能ですか?]PPP 理想的には、これが一般的なDAGで実行できるかどうかを理解したいのですが、。2|n|2|n|2^{|n|}

6
ブルームフィルターのおおよその母集団の計算
サイズNビットのブルームフィルターとK個のハッシュ関数があり、そのうちMビット(M <= N)のフィルターが設定されているとします。 ブルームフィルターに挿入された要素の数を概算することはできますか? 簡単な例 100ビットのBFと、10ビットが設定されている5つのハッシュ関数を想定して、次の例を熟考しています... ベストケースのシナリオ:ハッシュ関数が本当に完璧で、X個の値にビットを一意にマッピングし、10ビットが設定されていると仮定すると、BFに挿入された要素は2つだけであると言えます。 最悪の場合のシナリオ:ハッシュ関数が不良であり、常に同じビットにマップされていると仮定すると(相互に一意である場合)、BFに10個の要素が挿入されたと言えます 範囲は[2,10]のようです。この範囲の約は、おそらくフィルターの偽陽性確率によって決定されます-私はこの時点で立ち往生しています。

2
2つのキューを使用したリストの反転
この質問は、スタック操作ごとに償却時間で2つのキューを使用してスタックをシミュレートできるかどうかに関する既存の質問に触発されています。答えは不明のようです。以下に、より具体的な質問を示します。これは、すべてのPUSH操作が最初に実行され、次にすべてのPOP操作が実行される特殊なケースに対応しています。最初に空の2つのキューを使用して、要素のリストをどれだけ効率的に逆にすることができますか?法的操作は次のとおりです。O(1)O(1)O(1)NNN 入力リストの次の要素をキューに入れます(どちらかのキューの末尾に)。 どちらかのキューの先頭にある要素をデキューし、再度(いずれかのキューの末尾に)エンキューします。 いずれかのキューの先頭にある要素をデキューし、出力リストに追加します。 入力リストが要素で構成されている場合、逆の出力リスト[N、N-1、...、2、 1]振る舞いますか?O(N)よりも速く成長するという証明は、元の質問を否定的に解決するため、特に興味深いでしょう。[1,2,...,N−1,N][1,2,...,N−1,N][1,2,...,N-1,N][N,N−1,...,2,1][N,N−1,...,2,1][N,N-1,...,2,1]O(N)O(N)O(N) 更新(2011年1月15日):提出された回答とそのコメントに示されているように、問題はO(NlogN)O(Nlog⁡N)O(N \log N)で解決できます。\ Omega(N)の下限Ω(N)Ω(N)\Omega(N)は自明です。これらの境界のいずれかを改善できますか?

2
O(1)concatを使用した単純なバランスのとれたツリー?
では純粋に機能最悪の時定数Catenableソートリスト、Brodalら。O(1)連結およびO(lg n)挿入、削除、および検索を備えた純粋に機能的なバランスの取れたツリーを提示します。データ構造はやや複雑です。 O(1)連結、機能的またはそうでないより単純なバランスのとれた検索ツリーはありますか?

2
逆アッカーマンを楽しもう
アルゴリズムを分析するときに、逆アッカーマン関数が頻繁に発生します。それの偉大なプレゼンテーションはここにある:http://www.gabrielnivasch.org/fun/inverse-ackermann。 α1(n)=[n/2]α1(n)=[n/2]\alpha_1(n) = [n/2] α2(n)=[log2n]α2(n)=[log2⁡n]\alpha_2(n) = [\log_2 n] α3(n)=log∗nα3(n)=log∗⁡n\alpha_3(n) = \log^* n ......... αk(n)=1+αk(αk−1(n))αk(n)=1+αk(αk−1(n))\alpha_k(n) = 1 + \alpha_k(\alpha_{k−1}(n))α(n)=min{k:αk(n)≤3}α(n)=min{k:αk(n)≤3}\alpha(n) = \min\{k: \alpha_k(n)\leq 3\} 私の質問は次のとおりです。関数 明らかに。どのようなより厳密な境界を与えることができますか?ある?1 « K (N )≤ α (N )K (N )K (N )≤ ログα (N )k(n)=min{k:αk(n)≤k}k(n)=min{k:αk(n)≤k}k(n) = \min \{k: \alpha_k(n) \leq k\}1≪k(n)≤α(n)1≪k(n)≤α(n)1\ll k(n) \leq \alpha(n)k(n)k(n)k(n)k(n)≤logα(n)k(n)≤log⁡α(n)k(n) \leq \log\alpha(n)

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