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

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

1
パーティションツリーの実装?
パーティションツリーが実装されたことはありますか? ここでは、計算ジオメトリからのパーティションツリーについて説明しています。最も初期の(ほぼ)最適なバージョンは、Matousekなどによるものであり、最近ではTimothy Chanによるものです。 https://cs.uwaterloo.ca/~tmchan/optpt_2_10.pdf これらが実装されたことがないのはおかしいようですが、グーグルでは誰も報告したことのない実装はありませんでした。

4
2つの単語間で最短の編集移動
入力として2つの単語が与えられた場合、1つの単語を別の単語に変換するために必要な最小限の変更を計算するデータ構造とアルゴリズムを探しています。 いずれかの端に文字を追加します(たとえば、AB-> ABC)。 単語全体を複製および連結します(たとえば、ABC-> ABCABC)。 単語を2つにカットします(複製移動の二重、ABCABC-> ABC + ABC)。 文字の1つを削除します(たとえば、ABC-> AC)。 いずれかの文字を繰り返します(たとえば、ABC-> ABBC)。 たとえば、ABCからBCBCへの移動の最小シーケンスは、ABC-> BC(削除A)-> BCBC(複製)です。 私はコンピューターサイエンスのバックグラウンドを持っていません。おそらくこれはよく知られている問題ですが、私のGoogle検索では何も得られませんでした。 関連する明確に定義された問題を知っていますか? 編集:Anthony Labarreの回答で示唆されたように、私は上記の問題に似たポーズの順列/配置の問題に関するいくつかの論文を読みました。誰もこの問題についてもっと知っていますか?これは関連性がありますか?

3
o(n log n)の点の最短ペアワイズ距離を見つける?
次の演習は、私が監督する学生に配布されています。 平面内のポイントが与えられた場合、すべてのポイントのペアの中で距離が最小になるポイントのペアを見つけるアルゴリズムを考案します。アルゴリズムは時間o (n 2)で実行する必要があります。nnno (n2)o(n2)o(n^2) 時間タスクを解決する(比較的)単純な分割統治アルゴリズムがあります。Θ (n logn )Θ(nlog⁡n)\Theta(n \log n) 質問1:最悪の場合に特定の問題を正確に解決するアルゴリズムはありますか?o(nログn )o(nlog⁡n)\mathcal{o}(n \log n) これが可能なのではないかと私に思わせたのは、私がいくつかの講演で見たことを覚えている結果です(参考文献を歓迎します)。これはないより一定数よりその線に沿って何かを述べ点のいくつかの点の周囲面に配置することができるP半径の円の内側R ∈ Rと、R関与点のうちのいずれか2つの間の最小距離を。私はc = 7、中央にpを持つ正六角形を形成する点(極端な場合)と思います。C ∈ Nc∈Nc \in \mathbb{N}pppR ∈ Rr∈Rr \in \mathbb{R}rrrc=7c=7c=7ppp その場合、次のアルゴリズムはそれらの問題をステップで解決するはずです。nnn fun mindist [] | p::[] = INFINITY | mindist p1::p1::[] = dist(P[0], P[1]) | mindist p::r = let m = mindist(r) …

1
特定の種類のクエリに対する最適な前処理
要素S = { s 1、s 2、… 、s n }のセミグループとします。私たちの目標は、製品です。(S、∘ )(S,∘)(S,\circ)S= { s1、s2、… 、sn}S={s1,s2,…,sn}S=\lbrace s_1,s_2,\dots,s_n\rbraces私∘ Si + 1○は⋯ ○はSjsi∘si+1∘⋯∘sjs_i\circ s_{i+1}\circ \cdots\circ s_j AlonとSchieberの論文「オンライン製品クエリに回答するための最適な前処理」では、次のように使用するだけで、最大でステップ(は逆アッカーマン関数)で各クエリに回答できることが証明されています。前処理の線形量。αO (α (n ))O(α(n))O(\alpha(n))αα\alpha それは各クエリすることを希望する場合に答えることができるO (ログ(J - I ))の手順、1はまだ前処理のみの直線でこれを行うことができますか?s私∘ Si + 1○は⋯ ○はSjsi∘si+1∘⋯∘sjs_i\circ s_{i+1}\circ \cdots\circ s_jO (ログ(j − i ))O(log⁡(j−i))O(\log(j-i)) (この質問は触発されて、この Mathoverflowでブレンダン・マッケイによる最近の質問です。)

2
効率的な繰り返し挿入のためのデータ構造の設定
wordize要素のセット(繰り返しなし)を保持し、高速挿入(償却O(1))をサポートする、スペース効率の良いデータ構造を探しています。「スペース効率」とは、理想的には、個の単語を格納してn個の要素を格納することです。n+o(n)n+o(n)n + o(n)nnn セットであることは、質問の重要な部分です。各要素が回追加される場合、使用されるスペースはn log nになりません。lognlog⁡n\log nnlognnlog⁡nn\log n 構造は、その要素のリストもサポートする必要があります(合理的に効率的)。ここでは、正常な構造は問題ありません。(高速メンバーシップクエリはプラスです。)

2
効率的なタグベースのルックアップを可能にするデータ構造
次のようなデータを保存するための非常に効率的なデータ構造を探しています。 IDタグOrder1 Order2 -------------------------- 1 1,2 1 1 2 2,5 2 3 3 1,7 4 7 4 6 3 0 タグの表現を含むすべてのIDのリストを提供するように、この構造を照会できるようにする必要があります-サポートANDおよびORand NOT操作。例えば。((1または2)、7ではありません) また、結果の順序(Order1またはOrder2)を指定し、オプションのオフセットで返される最大行を指定できる必要があります。最初の30〜100件の結果を取得するパフォーマンスが重要です。 最後に、「タグの関係」を検索する安価な方法が必要です。たとえば、どのタグがタグ(1または2)に「関連する」か、どの頻度であるかを知りたいです。1 OR 2と同じセットに出現するタグの意味...頻度順に並べられています。 どのようなデータ構造(または構造のセット)がこの種の作業に非常に効率的であるかという考えはありますか? (SEファミリーのサイトのタグ付きページを再設計するための概念実証としてこれを使用したい)

1
強くバランスの取れた決定的なスキップリスト
Cache-Oblivious B-Treesのセクション2.2 では、強くバランスが取れた検索ツリーは次のように定義されています。 ある定数について、高さhのすべてのノードvにはΘ (d h)の子孫があります。dddvvvhhhΘ (dh)Θ(dh)\Theta(d^h) 彼らが主張します: プロパティ1および2を満たす検索ツリーには、ウェイトバランスBツリー、確定的スキップリスト、および予想されるスキップリストが含まれます。 他の論文では、同時キャッシュ・オブリビアスBツリーやキャッシュ・オブリビアス・ストリーミングB ツリーなど、決定論的なスキップリストのウェイトバランスが非常に優れていると主張しています。 確定的スキップリストにこのプロパティがある理由がわかりません。決定論スキップリストの上の元の紙のノートその 図1からわかるように、1-2のスキップリストと2-3のツリーの間には1対1の対応があります。 しかし、高さノードは2 時間から3 時間の子孫を持つことができるため、2〜3本のツリーのウェイトバランスはそれほど強くありません。hhh2h2h2^h3h3h3^h

2
最小コストのフィードバックアークセット問題の高速アルゴリズムはありますか?
有向グラフでは、、F ⊂ Eがあれば、G ∖ Fは、 DAG(有向非巡回グラフ)であり、Fは、フィードバック・アーク・セットと呼ばれています。 G = (V、E)G=(V,E)G=(V,E)F⊂ EF⊂EF\subset EG ∖ FG∖FG\setminus FFFF 各エッジが重み関連付けられている場合、最小コストのフィードバックアークセットの問題は、W (F )が最小になるようにFを見つけることです。wwwFFFW(F)W(F)W(F) 最小フィードバックアークセットの問題はNP困難であり、最小コストフィードバックアークセットの問題もよく知られています。うまく機能する近似アルゴリズムと、高速ソルバーを生成できる重み関数のプロパティを誰もが知っているのだろうか。

2
ハーフスペース範囲カウントのトレードオフ境界
時間/空間のトレードオフの形式で表された、次元のポイントのセットに対してハーフスペース範囲カウントクエリを実行するための現在の最良の境界は何ですか。Matousekの独創的な1993年の論文(定理6.2、効率的な階層カッティングによる範囲検索)によると、サイズのデータ​​構造を使用して、について、半空間の交差であるクエリの範囲カウントを実行できます。、場合、時間。以下のためにこれは時間。ただし、範囲検索に関するAgarwalの調査(表36.3.2)では、限界はdddppp1≤p≤d+11≤p≤d+11 \le p \le d+1O(m)O(m)O(m)n≤m≤ndn≤m≤ndn \le m \le n^dO(nm1/dlogp−(d−p+1)/d(mn))O(nm1/dlogp−(d−p+1)/d⁡(mn))O\left(\frac{n}{m^{1/d}}\log^{p-(d-p+1)/d} \left(\frac{m}{n}\right)\right)p=1p=1p=1O(n/m1/d)O(n/m1/d)O(n/m^{1/d})O(nm1/dlog(mn))O(nm1/dlog⁡(mn))O\left(\frac{n}{m^{1/d}}\log(\frac{m}{n})\right)。バウンドの正しいステートメントは何ですか?あるいは、私は何を誤解していますか?最後に、場合、非表示のログ用語はありますか?m=ndm=ndm=n^d

6
ツリーのセットのデータ構造。
トライにより、要素のリストを効率的に保存できます。接頭辞は共有されるため、スペース効率が高くなります。 木を効率的に保管するための同様の方法を探しています。特定のツリーがいくつかの格納されたツリーのサブツリーであるかどうか、または特定のツリーのサブツリーである格納されたツリーが存在するかどうかを知って、メンバーシップをチェックして要素を追加できるようにしたいと思います。 私は通常、高さが50未満の約500の不平衡バイナリツリーを格納します。 編集 私のアプリケーションは、ある種のメモを使用したある種のモデルチェッカーです。私が持っている状態を想像と以下の式:F = φとG = (φ ∨ ψ )とφは、複雑な部分式であることを、私が最初かどうかを知りたいと想像fが成り立つ秒。私はϕが成立するかどうかを確認し、長いプロセスの後、それが事実であることを確認します。ここで、gがsに成立するかどうかを知りたい。私は事実を覚えたいfが保持していることに注意してくださいにグラム⇒ Fsssf=ϕf=ϕf = \phig=(ϕ∨ψ)g=(ϕ∨ψ)g = (\phi \vee \psi)ϕϕ\phifffsssϕϕ\phigggsssfffg⇒fg⇒fg \Rightarrow f私は導き出すことができ中のほぼ瞬時に。 逆に、gがtに保持されないことを証明した場合、fはtにほぼ瞬時に保持されないことを伝えたいと思います。gggsssgggtttfffttt 私たちは式に部分的秩序を構築し、持つことができます IFF グラム⇒ F。状態sごとに、2組の式を保存します。L (s )は保持する最大の数式を格納し、l (s )は保持しない最小の数式を格納します。今状態所与Sおよび式Gの場合、私が見ることができる∃ F ∈ L (S )、F ⇒ G、又は場合∃ F ∈ L (S )g≥fg≥fg \geq fg⇒fg⇒fg \Rightarrow fsssL(s)L(s)L(s)l(s)l(s)l(s)sssggg∃f∈L(s),f⇒g∃f∈L(s),f⇒g\exists f \in L(s), f …

2
ロックのないコレクションの制限?
DavidRodríguez-dribeasがStackOverflowのコメントに「すべてのコレクションがロックなしで実装できるわけではない」と書きました。これが本当かどうかはわかりませんが、どちらの方法でも証拠を見つけることができません。 このステートメントはあまり正確ではありませんが、もう少し正式な方法で言い換えてみましょう。すべてのコレクションタイプに対して、同じ操作セットを提供CするロックフリーのコレクションタイプCLFがあり、各操作でCLFの対応する操作と同じbig-Oの複雑さを持っていCます。 ちなみに、変革は期待していません。

2
関数型辞書のデータ構造を選択するにはどうすればよいですか?
次のデータ構造について少し読みました。 バグウェルの理想的なハッシュトライ Larsonの動的ハッシュテーブル 赤黒木 パトリシアの木 ...そして他にもたくさんの人がいると思います。私はそれぞれが何に適しているのか、あるいはなぜ私が他のものを選ぶのかについてはほとんど見たことがありません。したがって、これらの行に沿っていくつかの質問があります: 知っておくべき重要な関数型辞書のデータ構造は何ですか? これらのアプローチの長所と短所は何ですか? より命令的なデータ構造を使用するのはいつ意味がありますか? 2と3の番号がより重要です。:-)

2
バランスの取れたベクトルの迅速なエンコード
これは、いずれかのことを見ることは容易である 1-1のマッピングが存在するFは {0,1}からN {0,1}にN + O (ログN )いずれかのようなxはベクトルF (Xの)です"バランス」、つまり1と0の数が等しい。そのようなFを定義して、与えられたxがF (x )を 効率的に計算できるようにすることは可能ですか?nnnFFFnn^nn+O(logn)n+O(log⁡n)^{n+O(\log n)}xxxF(x)F(x)F(x)FFFxxxF(x)F(x)F(x) ありがとう。

1
動的セットのフィンガープリント
次の問題について、操作ごとにO(1)時間のwビットワードRAMデータ構造が存在しますか?:操作をサポートする一連のwビット非負整数を維持します add(x):セットにxを追加します remove(x):セットからxを削除します finger():セットのフィンガープリントを返します。このwビットフィンガープリントには、同一の2つのセットに同じフィンガープリントがあり、異なる2つのセットにはおそらく異なるフィンガープリントがあるという特性があります。 すべての操作は一定の時間で実行する必要があります。 Rabin-Karpフィンガープリント法は、ここで、pはランダムなwビット素数です。2 x mod pの計算には一定以上の時間がかかるため、問題は更新時間にあります。繰り返し二乗を使用すると、これはO(log w)時間で実行できます。私が見つけた最速のモジュラー指数アルゴリズムは、(log w)/(loglog w)算術演算のようなものを実行します。f(S)=(∑x∈S2x)modpf(S)=(∑x∈S2x)modpf(S) = \left(\sum_{x\in S} 2^x\right) \bmod p2xmodp2xmodp2^x \bmod p

4
約実行のコスト。スキップ四分木における最近傍探索
注:質問は私の答えに修正再表示されている:我々は最低兄弟先祖を見つけることができる今と仮定すると、時間、ANNは本当にして行うことができるO (ログN )?O(1)O(1)O(1)O(logn)O(log⁡n)O(\log n) 四分木は効率的な空間インデックスです。[2]で説明されているように、圧縮四分木構造での最近傍探索の実装に関するパズルがあります。(詳細については説明しませんが、検索はいわゆる等距離の四角形に沿ってトップダウンで行われ、等距離パスのテールノードで終わります。添付画像では、これは点で満たされた南東のノードのいずれかである可能性があります。) それらのアルゴリズムが機能するためには、各ノード(少なくとも2つの空でない象限がある正方形)の4つの方向(北、西、南)のそれぞれの最下位(階層内で最も近い)の祖先ノードのポインターを維持する必要があります、東)。これらは、ノードの西向きの祖先の緑色の矢印で示されます(矢印は祖先の正方形の中心を指しています)。 この論文では、これらのポインタはポイントの挿入と削除中にO(1)で更新できると主張しています。ただし、緑のポイントの挿入を見ると、任意の数のポインター(この場合は6つ)を更新する必要があるようです。 私はこのポインタの更新を一定の時間で行うトリックを望んでいます。たぶん、悪用される可能性のある間接の形式があるのでしょうか? 編集: 論文の関連セクションは6.3で、「パスに曲がりがある場合、の最下位の祖先に加えて、方向ごとに最下位のルートも考慮する必要があります。その方向に向かう祖先[...] 各方向の最も近い祖先を指す各正方形に追加のポインターを関連付ける場合、からこれらの正方形を見つけることは、正方形あたり時間で実行できます。これらのポインタは、点の挿入または削除中に時間で更新することもできます。 "log(c/ε)log(c/ε)log(c/ε)qqq2d2d2^dqqqqqqO(1)O(1)O(1)2d2d2^dQ0Q0Q_0O(1)O(1)O(1) [2]:Eppstein、D。とGoodrich、MTとSun、JZ、「スキップ四分木:多次元データ用の単純な動的データ構造」、計算幾何学に関する第21回年次シンポジウムの議事録、pp。296—305 、2005年。

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