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

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

6
岡崎以来の純粋に機能的なデータ構造の新機能
Chris Okasakiの1998年の本「純粋に機能的なデータ構造」以来、私はあまりにも多くの新しいエキサイティングな純粋に機能的なデータ構造が登場するのを見ていません。ほんの数例を挙げます。 IntMap(1998年に岡崎によって発明されましたが、その本にはありません) フィンガーツリー(およびモノイドに対する一般化) 「入れ子型」や「一般化代数データ型」を使用してツリーの不変式を確保するなど、既知のデータ構造を実装する興味深い方法もいくつかあります。 この分野で1998年以降に登場した他の新しいアイデアはどれですか?

30
本からのアルゴリズム。
ポール・エルドスは、神がそれぞれの数学的定理の最もエレガントな証拠を保持している「本」について話しました。これは、本(現在は第4版になっていると思います):本からの証拠にも影響を与えました。 もし神がアルゴリズムに関する同様の本を持っていたら、どのアルゴリズムが候補者になると思いますか? 可能であれば、クリック可能なリファレンスと、それを機能させる重要な洞察も提供してください。 回答ごとに1つのアルゴリズムのみを入力してください。

9
実装するには複雑すぎる強力なアルゴリズム
実装するには単純に複雑すぎる正当なユーティリティのアルゴリズムとは何ですか? 明確にしましょう:現在の漸近最適行列乗算アルゴリズム(Coppersmith-Winograd)のようなアルゴリズムは探していません。これは実装するのに合理的ですが、実際には役に立たない定数を持っています。実用的な価値があると思われるアルゴリズムを探していますが、コーディングが非常に難しく、実装されたことがない、非常に人工的な設定でのみ実装されている、または非常に特殊な用途にのみ実装されています。 また、優れた漸近性を備えていますが、実際のパフォーマンスが低い可能性が高い、実装不可能に近いアルゴリズムも歓迎します。

10
1つのスタック、2つのキュー
バックグラウンド 数年前、私が学部生だったとき、私たちは償却分析に関する宿題を与えられました。問題の1つを解決できませんでした。comp.theoryで尋ねましたが、満足のいく結果は得られませんでした。コースTAが彼が証明できないことを主張し、証拠を忘れたと言ったのを覚えています。 今日、私は問題を思い出した。私はまだ知りたいと思っていたので、ここにあります... 質問 2つのキューを使用してスタックを実装することは可能ですか?プッシュ とPOPの両方の操作が償却時間O(1)で実行されますか?はいの場合、どのように教えてもらえますか? 注意:私たちは実装したい場合は、状況は非常に簡単であるキューをして2つのスタック(対応する操作とENQUEUE&DEQUEUE)。違いを観察してください。 PS:上記の問題は宿題そのものではありません。宿題は下限を必要としませんでした。実装と実行時間分析だけです。

13
どのアルゴリズムについて、理論的分析と現実の間に大きなギャップがありますか?
アルゴリズムの効率を分析する2つの方法は次のとおりです。 ランタイムに漸近的な上限を設定する 実行して実験データを収集します。 (1)と(2)の間に大きなギャップがある既知のケースがあるのだろうか。これにより、(a)実験データがより厳密な漸近を示唆するか、(b)理論分析がXがYよりはるかに優れていることを示唆し、実験データがYがはるかに優れていることを示唆するようなアルゴリズムXおよびYがあることを意味しますバツ。 実験では通常、平均ケースの動作が明らかになるため、最も興味深い答えは平均ケースの上限を参照するものと期待しています。ただし、シンプレックスに関するNoamの回答など、さまざまな境界について話す興味深い回答を除外したくありません。 データ構造を含めます。回答ごとに1つのアルゴ/ DSを入力してください。

2
純粋に機能的なデータ構造の未解決の質問は何ですか?
この質問は、1998年に岡崎の本が出版されてからのPFDSの新機能に関する別の質問に触発されたものです。 まず、次の2つの質問から始めます。 ハッシュテーブルの速度に近づく純粋に機能的なセットデータ構造はありますか?試行錯誤はまだありません。 O(1)が追加された純粋に機能的なフィンガーツリーはありますか?これまでのベストは、カプランとタージャンによって考案されたO(lg lg n)です。 他に純粋に機能するデータ構造の問題は何ですか?

4
整数のコレクション(つまり、マルチセット)に、理論的に十分な保証があるハッシュ関数はありますか?
理想的には、次のプロパティを持つ整数のマルチセットのハッシュを保存する方法があるかどうか興味があります。 O(1)スペースを使用します O(1)時間での挿入または削除を反映するように更新できます 2つの同一のコレクション(つまり、同じ多重度を持つ同じ要素を持つコレクション)は常に同じ値にハッシュする必要があり、2つの異なるコレクションは高い値で異なる値にハッシュする必要があります(つまり、関数は独立またはペア独立です) これの最初の試みは、個々の要素のハッシュのランダムな素数を法として積を格納することです。これは1と2を満たしますが、それまたは密接なバリエーションが3を満足するかどうかは明らかではありません。 最初にこれをStackOverflowに投稿しました。 *プロパティ1と2は、たとえばO(log n)または小さな部分線形多項式に少し緩和することができます。ポイントは、複数のセットを識別し、要素自体を保存せずに同等性を確実にテストできるかどうかを確認することです。


6
誤検知のない確率的セット?
したがって、ブルームフィルターは非常にクールです。これらは、偽陰性のないメンバーシップチェックをサポートするセットですが、偽陽性の可能性はわずかです。しかし最近、私は反対を保証する「ブルームフィルター」を望んでいます:偽陽性はなく、潜在的に偽陰性。 私の動機は単純です:処理するアイテムの(大量の)ストリームが大量にある場合、前に見たアイテムの処理を避けたいと思います。複製を処理するのに害はなく、時間の無駄です。しかし、要素の処理を怠ると、壊滅的なものになります。「逆ブルームフィルター」を使用すると、スペースのオーバーヘッドがほとんどないアイテムを保存し、セット内のメンバーシップをテストすることで、重複の処理を高い確率で回避できます。 しかし、私はそのようなものを見つけることができないようです。私が見つけた最も近いものは「レタッチされたブルームフィルター」です。これにより、選択された誤検知をより高い誤検知率と交換することができます。ただし、すべての誤検知を削除したい場合、それらのデータ構造がどれだけうまく機能するかはわかりません。 誰でもこのようなものを見ましたか?:)

8
高次アルゴリズム
よく知られているアルゴリズムのほとんどは、入力と出力が「プレーン」データであるという意味で、1次です。いくつかは、ソート、ハッシュテーブル、またはマップとフォールド関数など、些細な方法で二次的なものです:それらは関数によってパラメーター化されますが、他の入力データの一部でそれを呼び出すことを除いて、それで実際に面白いことは何もしません。 一部は2次ですが、やや興味深いものもあります。 モノイドによってパラメーター化されたフィンガーツリー 単調な述語でフィンガーツリーを分割する 通常はモノイドや述語などによってパラメータ化されたプレフィックス和アルゴリズム。 最後に、私にとって最も興味深い意味で「真に」高次のものもあります。 Yコンビネーター 差分リスト 他の重要な高次アルゴリズムは存在しますか? 私の質問を明確にするために、「非自明な高次」の下で、「アルゴリズムのインターフェースおよび/または実装で重要な方法で計算形式の高次機能を使用する」ことを意味します

3
アイテムを見つけるための比較ベースのデータ構造
アイテムの順序付けられていない配列を取り、O (n )で前処理を実行し、クエリに回答するデータ構造があります:リストに要素xがあり、各クエリは最悪の時間O (log n )ですか?nnnO (n )O(n)O(n)バツxxO (ログn )O(log⁡n)O(\log n) 私は本当に存在しないと思うので、存在しないという証拠も歓迎します。

4
KDツリーでOctreeを使用するのはなぜですか?
科学コンピューティングの経験があり、BSP(バイナリ空間分割)アプリケーションにkdツリーを広く使用しています。最近、3Dユークリッド空間を分割するための同様のデータ構造であるoctreeにかなり精通しましたが、収集したものから一定の間隔で機能するものです。 少しの独立性調査では、ほとんどのデータセットでkdツリーのパフォーマンスが一般的に優れていることが示されているようです(構築とクエリが高速です)。私の質問は、空間的/時間的パフォーマンスまたはその他の点でoctreeの利点は何ですか?また、どの状況で最も適していますか(3Dグラフィックスプログラミングを聞いたことがありますか)?両方のタイプの利点と問題の要約は、私が最も高く評価するでしょう。 さらに、Rツリーデータ構造の使用法とその利点について詳しく説明できれば、それもありがたいです。Rツリー(octreeよりも)は、k最近傍検索または範囲検索のkdツリーとまったく同じように適用されるようです。

6
安定したヒープはありますか?
次の操作をサポートする優先度キューデータ構造はありますか? Insert(x、p):優先度pで新しいレコードxを追加します StableExtractMin():最小の優先度でレコードを返し、削除します。挿入順で関係を壊します。 したがって、Insert(a、1)、Insert(b、2)、Insert(c、1)、Insert(d、2)の後、StableExtractMinのシーケンスはa、c、b、dの順になります。 明らかに、ペア(p 、t i m e )を実際の優先度として保存することで、任意の優先度キューデータ構造を使用できますが、類推して、挿入時間(または挿入順序)を明示的に保存しないデータ構造に興味があります安定した選別に。(p,time)(p,time)(p, time) 同等(?):Ω(n)Ω(n)\Omega(n)追加スペースを必要としないヒープソートの安定バージョンはありますか?

5
posetsのバイナリ検索の一般化?
Sにポーズ "S"と単調な述語 "P"があるとします。Pを満たすSの1つまたはすべての最大要素を見つけたいと思います。 編集:私はPの評価の数を最小限にすることに興味があります。 この問題にはどのようなアルゴリズムが存在し、Sにはどのようなプロパティと追加の操作が必要ですか? 次のような重要な特殊なケースはどうですか? Sは線形順序です。「中間検索」操作がある限り、通常のバイナリ検索が機能します。 Sは格子です Sはサブセットラティスです Sはマルチセットラティスです ... 後者の2つのケースは、たとえば実験設計などで特に重要に思えます。ブールまたは実パラメータのセットがあり、特定のパターンを再現する最小の組み合わせ(たとえば、テストの失敗)を見つけたい場合です。

2
データ構造を夢見ましたが、存在しますか?
このデータ構造を見つけることができませんでしたが、私はこの分野の専門家ではありません。 構造体はセットを実装し、基本的には不変量を持つ比較可能な要素の配列です。不変式は次のとおりです(再帰的に定義されます)。 長さ1の配列はマージ配列です。 長さが2 ^ nの配列(n> 0の場合)は、マージ配列です。 前半はマージ配列で、後半は空または 最初の配列はいっぱいでソートされており、後半はマージ配列です。 配列がいっぱいの場合、並べ替えられることに注意してください。 要素を挿入するには、2つのケースがあります。 前半がいっぱいでない場合は、前半に再帰的に挿入します。 前半がいっぱいの場合、後半に再帰的に挿入します。 再帰的なステップの後、配列全体がいっぱいになった場合、(ソートされた)半分をマージし、元の長さの2倍にサイズ変更します。 要素を見つけるには、配列がいっぱいになったときにバイナリ検索を使用して、両方の部分で再帰します。(昇順フラグメントが最大であるため、これは効率的です)。O(log(n))O(log⁡(n))O(\log(n)) この構造は、マージソートの静的バージョンと考えることができます。 要素を消去するために何をすべきかは明確ではありません。 編集:構造の理解を向上させた後。

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