タグ付けされた質問 「ds.algorithms」

タスクを完了するための明確に定義された指示、および時間/メモリ/その他に関する関連分析に関する質問。

3
NPでのスーパーマリオフロー?
max-flow問題の古典的な拡張の1つは、「max-flow over time」問題です。2つのノードがソースとシンクとして区別される有向グラフが与えられます。 -単位時間と遅延。時間範囲も与えられます。目標は、時間ソースからシンクへの材料の最大量を取得する経時的なフローを計算することです。最大値のフローは、min-cost max-flowへの巧妙な古典的還元により、多項式時間で計算できます。TTTTTTT エッジに3番目の「寿命」パラメータがあるこのモデルの拡張に興味があります。アークに寿命があり、がアークを通して正のフローが送信される最も早い時間である場合、時間アークを破壊します。これは、スーパーマリオブラザーズの踏み台のように考えることができます。踏みつけた直後に落下するか破壊されるか、電源を入れると電源を切ることのできないエッジの電源に必要なバッテリーと考えることができます。 。(編集 :)決定問題は、フロー値の下限も与えられた場合、時間範囲の上限とフロー値の下限の両方を満たすフローをスケジュールできるかどうかです。TのT + ℓのBℓℓ\elltttt + ℓt+ℓt+\ellBBB これまでのところ、この問題はNP困難であることがわかります(3パーティション経由)。しかし、私はそれがNPにあるかどうか実際にはわかりません:ソリューションをコンパクトに表現する方法の保証はありますか?古典的なバージョンでは、この問題を回避するために、いくつかの特別なタイプの最適なフローが使用されます。 注:上記のモデルは、ノードでのフローの備蓄を許可または禁止する場合があり、離散時間モデルまたは連続モデルを持つ場合があるため、少し仕様が不十分です。これらのモデルのいずれかの問題を解決することは素晴らしいことです。

1
アルゴリズムの設計と複雑さ-その「方法」でどう考えるか?
私の質問は一般的なものです:アルゴリズムの設計と複雑さの観点から考え始めるにはどうすればよいですか?アルゴリズム設計の大学院課程を受講します。私は以前に登録していましたが、それに追いつくことができなかったため、後で削除しました。このコースを必須条件として受講する必要があります。 このように考える「トリック」はありますか?私はこれが非常に大雑把に言っていることを知っていますが、時々新鮮な視点は主題について異なって考えるのに役立ちます。 このコース(および同様の理論的コース)で私が抱えている主な問題は、私が思いついた解決策が正しいことをどのようにして知ることができるかということです。特定のアルゴリズムが特定の方法で動作または動作することを「証明」する場合、特に理論的な部分はarbitrary意的であると思いますか? コースでは、標準テキスト「CLRSによるアルゴリズムの紹介」を使用します。 教科書/サイト/書籍/などはありますか?それはこの分野に自信を持つ方法を提供するかもしれない? 皆に感謝します、 ジェイソン・デイン

1
頂点ラベリングの「ローカル」関数を結合するためのグラフ分解
私たちが見つけたいとし ∑バツ∏I J ∈ Ef(x私、xj)∑バツ∏私j∈Ef(バツ私、バツj)\sum_x \prod_{ij \in E} f(x_i,x_j) または 最大バツ∏I J ∈ Ef(x私、xj)最大バツ∏私j∈Ef(バツ私、バツj)\max_x \prod_{ij \in E} f(x_i,x_j) Vのすべてのラベル付けでmaxまたはsumが取られる場合VVV、積はグラフG = \ {V、E \}のすべてのエッジEEEで取られ、fは任意の関数です。この量は、有界ツリー幅グラフでは簡単に、一般的に平面グラフではNP困難です。適切な色の数、最大独立集合、およびオイラー部分グラフの数は、上記の問題の特別な例です。この種の問題、特に平面グラフの多項式時間近似スキームに興味があります。どのグラフ分解が有用でしょうか?G = { V、E}G={V、E}G=\{V,E\}fff 編集11/1:例として、統計物理学のクラスター展開(つまり、マイヤー展開)に類似するかもしれない分解について疑問に思っています。fffが弱い相互作用を表す場合、そのような展開は収束します。つまり、グラフのサイズに関係なく、展開のkkk項で所定の精度を達成できます。これは、量に対するPTASの存在を意味しませんか? 2011年2月11日更新 高温膨張は、高次の項が高次の相互作用に依存する項の合計としてパーティション関数ZZZを書き換えます。「相関が減衰する」場合、高次の項は十分に速く減衰するため、ZZZの質量のほぼすべてが有限数の低次の項に含まれます。 たとえば、イジングモデルの場合、次のパーティション関数の式を考慮してください。 Z= ∑X ∈ XexpJ∑I J ∈ Eバツ私バツj= c ∑A ∈ C(タンJ)| A |Z=∑バツ∈バツexp⁡J∑私j∈Eバツ私バツj=c∑A∈C(タン⁡J)|A|Z=\sum_\mathbf{x\in \mathcal{X}} \exp J \sum_{ij \in E} x_i …

1
スパースウォルシュアダマール変換
ウォルシュ-アダマール変換(WHT)は変換フーリエ変換の一般化であり、寸法の実数または複素数のベクトルに直交変換であり。変換は量子コンピューティングで一般的ですが、Johnson-Lindenstrauss Lemmaの証明で使用するための高次元ベクトルのランダム射影の一種の前提条件として最近研究されました。その主な特徴は、正方形のd × d行列ですが、時間O (d logのベクトルに適用できることです。d=2md=2md = 2^md×dd×dd\times d(よりむしろ D 2 FFTのような方法によって)。O(dlogd)O(dlog⁡d)O(d \log d)d2d2d^2 入力ベクトルがあるとしスパース:それはほんの数ゼロ以外のエントリ(たとえばを持つ )。時間におけるWHT計算する方法があるF (R 、D )ように、F (D 、D )= O (DのログD )及び F (R 、D )= O (DのログD )のための、R = oは(d ) ?r≪dr≪dr \ll df(r,d)f(r,d)f(r,d)f(d,d)=O(dlogd)f(d,d)=O(dlog⁡d)f(d,d) = O(d \log d)f(r,d)=o(dlogd)f(r,d)=o(dlog⁡d)f(r,d) = o(d \log d)r=o(d)r=o(d)r = o(d) 注:これらの要件は、小さなrに対してよりも高速に実行するものが欲しいという考えを形式化する1つの方法にすぎません。dlogddlog⁡dd \log …

1
エッジの追加ごとにO(N ^ 2)よりも優れたオンライン推移閉包
私は、エッジの追加ごとにO(N ^ 2)未満の時間複雑度を持つ有向非巡回グラフの推移的閉包を維持するためのオンラインアルゴリズムを探しています。私の現在のアルゴリズムは次のようなものです。 For every new edge u->v connect all nodes in Pred(u) \cup { u } with all nodes in Succ(v) \ \cup { v }. O(N ^ 2)エッジの場合、これは、たとえばFloyd-Warshallよりもはるかに悪いO(N ^ 4)の総時間複雑度に変換されます。

6
Fisher-Yates Shuffleアルゴリズムの複雑さ
この質問は、特定の配列のランダムシャッフルを返すFisher-Yatesアルゴリズムに関するものです。Wikipediaのページには、その複雑さはO(n)があると言うが、私はそれが(N Nログ)Oだと思います。 各反復iで、ランダムな整数が1〜iの間で選択されます。単純に整数をメモリに書き込むことはO(log i)であり、反復がn回あるため、合計は O(log 1)+ O(log 2)+ ... + O(log n)= O(n log n) ナイーブアルゴリズムの方が優れているわけではありません。ここに何かが足りませんか? 注:単純なアルゴリズムでは、各要素に間隔(0,1)の乱数を割り当て、割り当てられた番号に関して配列を並べ替えます。

1
kクリークの2FA状態の複雑さ?
単純な形式で: 双方向の有限オートマトンが認識できると三角形含ま-vertexグラフO (V 3)の状態を?vvvo(v3)o(v3)o(v^3) 詳細 興味深いのは、ここにエッジのシーケンスを用いて符号化-vertexグラフは、より明確な頂点のペアである各エッジ{ 0 、1 、... 、V - 1 }。vvv{0,1,…,v−1}{0,1,…,v−1}\{0,1,\dots,v-1\} 仮定ように、双方向有限オートマトン(決定論的または非決定論的)の配列であるが、M個のVは認識K上-CliqueをVの -vertex入力グラフと有しS (V )状態。質問の一般的な形式は次のとおりです。Is (v )= Ω (v k)?(Mv)(Mv)(M_v)MvMvM_vkkkvvvs(v)s(v)s(v)s(v)=Ω(vk)s(v)=Ω(vk)s(v) = \Omega(v^k) もし及びS (V )≥ のV K (V )無限に多くのためのV、その後、NL≠NP。したがって、それほど野心的ではないので、私はkが固定され、k = 3のケースが最初の重要なケースであると規定しています。k=k(v)=ω(1)k=k(v)=ω(1)k = k(v) = \omega(1)s(v)≥vk(v)s(v)≥vk(v)s(v) \ge v^{k(v)}vvvkkkk=3k=3k=3 バックグラウンド 双方向有限オートマトン(2FA)は、ワークスペースを持たないチューリングマシンであり、内部状態の数は固定されていますが、読み取り専用の入力ヘッドを前後に移動できます。対照的に、通常の種類の有限オートマトン(1FA)は、読み取り専用入力ヘッドを一方向にのみ移動します。有限オートマトンは、決定性(DFA)または非決定性(NFA)であり、入力への一方向または双方向のアクセスが可能です。 グラフプロパティは、グラフのサブセットです。レッツQのvが示すVのプロパティで-vertexグラフをQ。すべてのグラフプロパティQについて、可能なすべてのグラフの状態を使用し、Qに従ってラベル付けし、ラベル付けされた状態間の遷移により、言語Q vは最大2 v (v − 1 )/ 2状態の1DFAで認識できますエッジによって。 したがって、Q …

2
このTSPバリアントについて何が知られていますか?
この質問は、以前ここでコンピュータサイエンススタックエクスチェンジに投稿されました。 あなたが全国のクライアントと非常に成功した旅行セールスマンだと想像してください。配送を高速化するために、50キロメートルの有効範囲を持つ使い捨て配送ドローンを開発しました。この革新により、各都市に旅行して商品を配達する代わりに、ヘリコプターを50 km以内に飛ばし、ドローンが仕事を終えるだけで済みます。 問題:移動距離を最小化するには、どのようにヘリコプターを飛ばす必要がありますか? より正確には、ユークリッド平面内の実数およびN個の異なる点{ p 1、p 2、… 、p N }が与えられた場合、各点について半径Rの閉じた円盤と交差する経路は総弧長を最小にしますか?パスを閉じる必要はなく、任意の順序でディスクと交差できます。R > 0R>0R>0NNN{ p1、p2、… 、pN}{p1、p2、…、pN}\{p_1, p_2, \ldots, p_N\}RRR 明らかに、この問題はとしてTSPに減少するため、効率的な正確なアルゴリズムを見つけることは期待できません。文献でこの問題が何と呼ばれているか、そして効率的な近似アルゴリズムが知られていれば、私は満足するでしょう。R → 0R→0R \to 0

1
線形システムの実行可能性チェックと最適化の等価性
不等式の線形システムの実行可能性を確認することは、線形計画法と同じくらい難しいことを楕円法によって与えられた縮約を介して示す1つの方法です。さらに簡単な方法は、最適なソリューションを推測し、バイナリ検索を介して制約として導入することです。 これらの削減は両方とも多項式ですが、強力な多項式ではありません(つまり、不等式の係数のビット数に依存します)。 LP最適化からLP実行可能性への強力な多項式簡約はありますか?

2
外部メモリの指数関数的高速化
バックグラウンド 外部メモリ(DAMモデル)は、実行するI / Oの数(本質的に、キャッシュミスの数)によってアルゴリズムのコストを定義します。これらの実行時間は、一般の用語で与えられる、メモリのサイズ、及びB、一度にメモリに転送することができる単語の数。BとMにそれぞれLとZが使用される場合があります。 MMMBBBLLLZZZBBBMMM 例えば、ソーティングはコストが必要およびナイーブ行列乗算は必要とΘ (nは3 / Bを√Θ(N/BlogM/BN/B)Θ(N/BlogM/B⁡N/B)\Theta(N/B\log_{M/B} N/B)。 Θ(n3/BM−−√)Θ(n3/BM)\Theta(n^3/B\sqrt{M}) このモデルは、またはMの知識を持たない「キャッシュ忘却型アルゴリズム」の分析に使用されます。通常、目標は、キャッシュを無視するアルゴリズムが外部メモリモデルで最適に実行されることです。これは、たとえば、順列問題(Bradal、Faderberg 2003に示されている)のように、常に可能とは限りません。ソートおよび行列乗算の説明を含む、キャッシュを使用しないアルゴリズムの詳細については、Erik Demaineによるこの記事を参照してください。BBBMMM を変更すると、ソートの対数高速化と行列乗算の多項式高速化が発生することがわかります。(この結果は1981年のKung Hongからのものであり、実際にはキャッシュの忘却と外部メモリモデルの形式化の両方に先立っています)。MMM 私の質問はこれです: スピードアップが指数関数的になる場合はありますか?実行時間はf (N 、B )/ 2 O (M )のようなものになります。この説明に適合するキャッシュを意識しないアルゴリズムまたはデータ構造に特に興味がありますが、キャッシュを認識するアルゴリズム/データ構造、または最もよく知られている下限にも満足しています。MMMf(N,B)/2O(M)f(N,B)/2O(M)f(N,B)/2^{O(M)} 一般に、ほとんどのモデルでは、Nが入力サイズであり、明らかにM > wである場合、ワードサイズと想定されます。次に、2 Mの高速化により、Nの多項式高速化が行われます。これは、私が探している問題が存在する場合、それは多項式ではないと信じさせます。(そうでない場合は、キャッシュサイズを定数で変更して、一定数のI / Oを取得できますが、これはありそうにないことです)。w=Ω(logN)w=Ω(log⁡N)w = \Omega(\log N)NNNM>wM>wM > w2M2M2^MNNN

4
poset上の単調な述語を学習するために必要な最悪の数の質問
検討(X,≤)(X,≤)(X, \leq)上の有限poset nnnアイテム、およびPPP上未知単調述語XXX(いずれかのために、すなわち、xxx、y∈Xy∈Xy \in Xあれば、P(x)P(x)P(x)及びx≤yx≤yx \leq y次いでP(y)P(y)P(y))。私は評価できるPPP一つのノードを提供することにより、x∈Xx∈Xx \in Xと場合見つけ出すP(x)P(x)P(x)成立するかではありません。私の目標は、ノードxのセットを正確に決定することですx∈Xx∈Xx \in Xように、P(x)P(x)P(x)のいくつかの評価として使用して、保持PPPできるだけ。(以前のすべてのクエリの回答に応じてクエリを選択できます。すべてのクエリを事前に計画する必要はありません。) SSS(X,≤)(X,≤)(X, \leq)PPPPPPr(S,P)r(S,P)r(S, P)SSSPPPPPPSSSwr(S)=maxPr(S,P)wr(S)=maxPr(S,P)wr(S) = \max_P r(S, P)S′S′S'wr(S′)=minSwr(S)wr(S′)=minSwr(S)wr(S') = \min_S wr(S) 私の質問は次のとおりです:入力としてポゼットを指定すると、最適な戦略の最悪の実行時間をどのように決定できますか?(X,≤)(X,≤)(X, \leq) [空のposetのクエリが必要であり(各単一ノードについて尋ねる必要がある)、クエリの全体の順序が必要であることは明らかです(バイナリ検索を実行して検索しますフロンティア)。より一般的な結果は、次の情報理論的な下限です。述語可能な選択肢の数は、の反の数です単調な述語との最大要素として解釈されるアンチチェーン)。したがって、各クエリは1ビットの情報を提供するため、少なくともが必要になります。nnn⌈log2n⌉⌈log2⁡n⌉\lceil \log_2 n \rceilPPPNXNXN_X(X,≤)(X,≤)(X, \leq)PPP⌈log2NX⌉⌈log2⁡NX⌉\lceil \log_2 N_X \rceil前の2つのケースを含むクエリ。これは厳しく制限されているのでしょうか、それとも学習はアンチチェーンの数よりも漸近的に多くのクエリを必要とするような構造のポーズですか?]

3
線形時間インプレースリフルシャッフルアルゴリズム
線形時間インプレースリフルシャッフルアルゴリズムはありますか?これは、いくつかの特に器用な手が実行できるアルゴリズムです。偶数サイズの入力配列を均等に分割してから、2つの半分の要素をインターリーブします。 Mathworldには、リフルシャッフルに関する簡単なページがあります。特に、入力配列1 2 3 4 5 6を1 4 2 5 3 6に変換するout-shuffleに興味があります。定義では、入力長はことに注意してください2n2n2n。 サイズnnn以上の便利な2番目の配列がある場合、線形時間でこれを実行するのは簡単です。最初に最後のnnn要素を配列にコピーします。次いで、0ベースのインデックスを仮定すると、最初のコピーnnnインデックスから要素を[0,1,2,...,n−1][0,1,2,...,n−1][0,1,2,...,n-1]に[0,2,4,...,2n−2][0,2,4,...,2n−2][0, 2, 4,...,2n-2]。次に、nをコピーしますnnn入力配列、マッピングインデックスに二番目の配列の後ろからの要素[0,1,2,...,n−1][0,1,2,...,n−1][0,1,2,...,n-1]に[1,3,5,...,2n−1][1,3,5,...,2n−1][1,3,5,...,2n-1]。(入力の最初と最後の要素が移動しないため、それよりもわずかに少ない作業を行うことができます。) これをインプレースで実行しようとする1つの方法は、順列をばらばらのサイクルに分解し、各サイクルに従って要素を再配置することです。繰り返しますが、0ベースのインデックス付けを想定すると、6要素の場合に含まれる順列は σ=(001224314355)=(0)(5)(1243).σ=(012345024135)=(0)(5)(1243). \sigma=\begin{pmatrix} 0 & 1 & 2 & 3 & 4 & 5 \\ 0 & 2 & 4 & 1 & 3 & 5\end{pmatrix}=\begin{pmatrix}0 \end{pmatrix} \begin{pmatrix}5 \end{pmatrix} \begin{pmatrix}1 & 2 & 4 &3 …

3
木を持つ部分グラフ同型
我々は大規模な(有向)グラフがある場合はと小さい根付いた木の、のサブグラフ見つけるための最もよく知られている複雑なものですへの同型を?と両方がツリーであり、が平面であるか、ツリー幅(およびその他)に境界があるサブツリー同型の結果を知っていますが、このグラフとツリーの場合はそうではありません。 GGGHHHGGGHHHGGGHHHGGG

3
2つの数量詞()を使用した式の確認-2QBF
SATソルバーは、1つの数量詞でブール式の有効性をチェックする強力な方法を提供します。 たとえば、有効性を確認するには、SATソルバーを使用してが充足可能かどうかを判断できます。有効性を確認するには、SATソルバーを使用してが充足可能かどうかを判断できます。(ここではブール変数のベクトルで、はブール式です。)φ (X )∀ X 。φ (X )¬ φ (X )X = (X 1、··· 、XのN)N φ∃x.φ(x)∃x.φ(x)\exists x . \varphi(x)φ(x)φ(x)\varphi(x)∀x.φ(x)∀x.φ(x)\forall x . \varphi(x)¬φ(x)¬φ(x)\neg \varphi(x)x=(x1,…,xn)x=(x1,…,xn)x=(x_1,\dots,x_n)nnnφφ\varphi QBFソルバーは、任意の数の数量詞を持つブール式の妥当性をチェックするように設計されています。 2つの量指定子を持つ数式がある場合はどうなりますか?有効性をチェックするための効率的なアルゴリズムはありますか。QBFに一般的なアルゴリズムを使用するよりも優れたアルゴリズムですか。具体的には、という形式の式があり(または)、およびその有効性を確認したい。これに適したアルゴリズムはありますか? 編集4/8:このクラスの式は2QBFとしても知られていることがわかったので、2QBFに適したアルゴリズムを探しています。∃ X 。∀ Y 。ψ (x 、y )∀x.∃y.ψ(x,y)∀x.∃y.ψ(x,y)\forall x . \exists y . \psi(x,y)∃x.∀y.ψ(x,y)∃x.∀y.ψ(x,y)\exists x . \forall y . \psi(x,y) さらに専門化する:私の場合、という形式の式があり有効性を確認したい。ここで、はビット出力を生成する関数です。QBFの一般的なアルゴリズムよりも効率的に、この特定の種類の式の有効性をチェックするアルゴリズムはありますか?f 、g k∀x.∃y.f(x)=g(y)∀x.∃y.f(x)=g(y)\forall x . …

1
正しいように見えるが正しくないアルゴリズムと証明の例
プログラミングコースの入門では、アルゴリズムが期待どおりに機能することを証明する初期化-メンテナンス-終了方法について学習しています。しかし、すでに正しいことがわかっているアルゴリズムが正しいことを証明するだけで済みました。アルゴリズムが正しくないことを示すように依頼されたことはありません。 正しく見えるが正しくないアルゴリズムの古典的な例はありますか?Initialization-Maintenance-Terminationのアプローチが、一見しただけでは理解できない何かをキャッチするケースを探しています。

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