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

アルゴリズムは、問題に対する抽象的な解決策を定義する明確に定義された一連のステップです。このタグは、問題がアルゴリズムの設計と分析に関連している場合に使用します。

1
アルゴリズムの時間/空間の複雑さを最適化するためのアルゴリズムはありますか?
1950年代に、ブール関数の回路を最小化するための多くの方法が発明されました。アルゴリズムの時間または空間の複雑さを最適化するために、これらのメソッドの拡張または同様のものはありますか? たとえば、このようなアルゴリズムの入力としてバブルソートを実装すると、時間の複雑さが近いソートアルゴリズムの実装が生成され。O(nlogn)O(んログ⁡ん)O(n\log n)

1
バンドマトリックスの反転
私はバンド行列を持っています-疎で正方で対称な行列で、その構造は次のようになります:N× NN×NN \times N ここで、青い縞の下の領域は非ゼロ要素です。他はすべてゼロです ガウスの消去法とLU分解よりも単純であるが効率的な、この種の行列を反転するアルゴリズムはありますか?


1
現代の正規表現の表現力
私は最近、主に単語のグループを特別なプロパティと照合する正規表現の課題を提案するWebサイトについて友人と話し合いました。彼は||||||||、数|が素数であるような文字列に一致する正規表現を探していました。そのような言語は、通常であれば、補題をポンプの翻訳が素数のためにあるという事実与えますので、私はすぐにそれが今まで動作しません彼に言われた十分な大きさ、それが存在するのk ≤ pがあるようP + N kは、すべての主要ですN ≥ - 1、よく、これは全くケースしにくい(素数の配分、そのような未知の自明とプロパティを破砕、...)pppk≤pk≤pk \leq pp+nkp+nkp + nkn≥−1n≥−1n \geq -1 しかし、誰かが解決策に付属している:一致しない(||+?)\1+ キャプチャグループに一致するように、この表現しようとする(つまりすることができ||、|||、||||などの上の出現箇所)のn ≥ 2回。一致する場合、文字列で表される数はkで割り切れるので、素数ではありません。それ以外の場合です。k≥2k≥2k \geq 2|n≥2n≥2n \geq 2kkk そして、グループ化と後方参照により、正規表現が理論的な意味で...正規表現よりも実際にはるかに表現力豊かになることが明らかになったので、私は愚かに感じました。今では、実際の正規表現を実行するときに私が知らなかったルックアラウンドやその他の演算子も追加されました。 ウィキペディアによると、文脈自由文法によって生成された言語よりもさらに表現力があります。だからここに私の質問があります: 現代の正規表現エンジンを使用して、(文脈自由文法から生成された)代数言語を表現できますか より一般的な説明、または現代の正規表現で説明できる言語の種類の複雑さの少なくとも上限はありますか? より実用的には、その背後に深刻な理論がありますか、それとも有限オートマトンに基づく実際の正規表現の最初のブロックに実装可能と思われるたびに新しい機能を追加するだけですか? 「モダンな正規表現」は質問が具体的ではないことを知っていますが、少なくとも後方参照を使用することを意味します。もちろん、この「現代の正規表現」言語に対する特定の制限を想定している部分的な回答者がいる場合は、遠慮なく投稿してください。

2
独立セットとセットパッキングの同等性
ウィキペディアによると、独立集合問題は集合パッキングの特殊なケースです問題の。しかし、これらの問題は同等であるように私には思えます。 独立集合探索問題がある:グラフ所与G(V,E)G(V,E)G(V,E)及び整数nnn、検索nnn隣接しない2つがの頂点。 セットのパッキング探索問題がされて:有限コレクション与えられたの有限集合の整数、見つけるCCCnnnnnn対毎の互いに素であるセット。 次の双方向の削減に基づいて、それらは同等であると思います。 →:グラフ上の独立した集合問題を考えて、集合ののコレクションを作成します。各頂点に対して、隣接するすべてのエッジを含む集合があります。ここで、すべてのパッキングセットは、2つの頂点が共通していない頂点のセットに対応します。つまり、これはの同じサイズの独立したセットです。G(V,E)G(V,E)G(V,E)CCCv∈Vv∈Vv \in VSv∈CSv∈CS_v \in CvvvCCCGGG ←:コレクションセットパッキング問題をとして、すべてのセットに頂点があり、と間にエッジがあるグラフ作成します。セットと交差する場合、。ここで、すべての独立した頂点セットは、2つが交差しないセットのセットに対応します。つまり、これは同じサイズののセットパッキングです。CCCG(V,E)G(V,E)G(V,E)S∈CS∈CS \in CvS∈VvS∈Vv_S \in VvS1vS1v_{S_1}vS2vS2v_{S_2}S1S1S_1S2S2S_2GGGCCCCCC 私の質問は、私の削減は正しいですか?もしそうなら、これらの問題は同等ですか?ある問題に対して他の問題に対して近似アルゴリズムを使用することは可能ですか?

3
文字列が回文の連結であるかどうかをチェックするアルゴリズムはありますか?
文字のシーケンスが回文の連結であることを確認する線形時間アルゴリズムはありますか?私の頭に浮かぶのは、単純な解決策だけです。 1. k = 1 2. Split string into k substrings (all possibilities) and check 3. k++ 4. repeat 注:長さ1の文字列が回文であると定義されている場合、答えは自明です。これはそうではないと仮定しましょう。

3
サイクルキャンセルアルゴリズムの負のサイクルを見つける
最小コストのフロー問題の最適なソリューションを見つけるために、サイクルキャンセリングアルゴリズムを実装しています。残余ネットワークで負のコストサイクルを見つけて削除することにより、各ラウンドの総コストが削減されます。負のサイクルを見つけるために、私はベルマンフォードアルゴリズムを使用しています。 私の問題は、Bellman-fordはソースから到達可能なサイクルのみを検出しますが、到達不可能なサイクルも検出する必要があります。 例:次のネットワークでは、すでに最大フローを適用しています。エッジ(A,B)(A,B)(A, B)は非常に高価になります。残余ネットワークでは、容量負のコストサイクルがあります111。これを削除すると、エッジとを使用した安価なソリューションが得られますが、ソースからは到達できません。(C 、T )S(A 、C)(あ、C)(A, C)(C、T)(C、T)(C, T)SSS ラベル:フロー/容量、コスト もちろん、各ノードをソースとしてベルマンフォードを繰り返し実行することもできますが、それは良い解決策のようには思えません。私が読んだすべての論文がこのステップをスキップしているように見えるので、私は少し混乱しています。 ベルマンフォードを使用して、すべての負のサイクル(到達可能かどうか)を見つける方法を教えていただけますか?そしてそれが不可能な場合、他にどのアルゴリズムを提案しますか?

1
複数のパスの重みが同じである場合、エッジの数が最も少ないソリューションを優先するダイクストラ
したがって、ダイクストラが最小のエッジ数で解を見つけるように、任意のグラフを変更できます。GGG すべてのエッジの重みに数値を掛け、重みにを加算して、ソリューションの追加の各エッジにペナルティを課します。aaa111 w′(u,v)=a∗w(u,v)+1w′(u,v)=a∗w(u,v)+1w'(u,v)=a*w(u,v)+1 これは、すべての値では動作しません。が機能するには、少なくともで必要があります。場合は、この最小数ではありません、それは最短パスを選択しない場合があります。この最小値を見つけるにはどうすればよいですか?aaaaaaxxxaaaxxx Ps。これはレクリエーションで行われました、私はずっと前に宿題を終えました。

2
A *グラフ検索時間の複雑さ
時間の複雑さとA *に関する混乱。 A * Wikiによると 、時間の複雑さは解の深さで指数関数的です(最短経路): A *の時間の複雑さはヒューリスティックに依存します。無制限の探索空間の最悪の場合、展開されたノードの数は、解の深さ(最短経路)dで指数関数になります。O (bd)O(bd)O(b^d)、 どこ bbb 分岐因数(州ごとの平均の後継者数)です。 この受け入れられた回答へのコメントは、グラフのサイズの観点から複雑さを与える方が理にかなっていることを指摘しているため、O ((| V| + | E| )⋅LOG| V| )O((|V|+|E|)⋅log|V|)O((|V| + |E|) \cdot log |V|) 明らかに、ヒューリスティックがすべてのノードに0の値を割り当てる場合、A *はダイクストラのアルゴリズムになり、均一コストのヒューリスティックは本質的にヒューリスティックを無効にします。 ヒューリスティックを O (1 )O(1)O(1) (そして一貫性のある)、最悪のケースは本質的にA *を複雑度のあるダイクストラのアルゴリズムに劣化させていることは理にかなっています O (| E| + | V| ログ| V| )O(|E|+|V|log⁡|V|)O(|E|+|V|\log|V|) 最小優先度のキューの実装(フィボナッチヒープ)。 私が間違っている? 私がこれまで見てきた本などは、ソリューションの深さに関して複雑さを与えます

3
この最適化問題の効率的なアルゴリズム?動的プログラミング?
私が達成しようとしていることを表す図を作成しました。 フルサイズの画像 入力シーケンスでは、ノードは可能な限り互いに接近しています。しかし、私は白いノードをそれぞれの黒いノードにできるだけ近づけたいと思っています。ノード間のエッジを長くすると、このエラーを最小限に抑えることができます。短縮することはできません。したがって、1 -> 2たとえば4以上にすることができます。 可能な解決策を含めました。長くなったエッジにはラベルが付いています。エッジを長くすると、すべてのノードが右に移動することに注意してください。 この軸は連続ですが、それが役立つ場合、私はおそらくそれを離散化することができます。 私は動的プログラミングのアプローチがうまくいくと考えていますが、よくわかりません-私はDPがあまり得意ではありませんでした。 これを解決できる最速の実行アルゴリズムは何ですか?これは、よく知られている問題として分類/再構成できますか?

3
すべてのエッジの重みが等しい場合、BFSを使用して最小のスパニングツリーを取得できますか?
グラフのすべてのエッジが与えられた場合 GGG 等しい重量です ccc、線形時間で最小のスパニングツリーを生成するために、幅優先検索(BFS)を使用できますか? BFSはノードを2回訪問せず、頂点からトラバースするだけなので、直感的にこれは正しいように聞こえます vvv 頂点へ あなたuu 訪れたことがない場合 あなたuu 以前は、サイクルが発生しないように、 GGG接続されている場合、最終的にすべてのノードにアクセスします。すべてのエッジの重みは等しいため、BFSが選択したエッジは関係ありません。 私の推論は意味がありますか?


1
リーグの勝敗の順位が可能かどうかを確認する
あなたは試合スケジュールのある1対1のバスケットボールリーグを主催しています。リーグの最後に、各プレーヤーにそれぞれの勝敗記録を報告させます(同点はありません)が、予定された順位表が実際に可能かどうかを確認したいとします。 たとえば、4人のプレーヤー(Alice + Bob + Carol + Dave)がいて、スケジュールは単純なラウンドロビンです。報告された順位[ A: 3-0 B: 1-2 C: 1-2 D: 1-2]および[ A: 2-1 B: 1-2 C: 1-2 D: 2-1]は可能ですが、スタンディング[ A: 3-0 B: 0-3 C: 0-3 D: 3-0]はできません。 代わりに、スケジュールがアリス+ボブとキャロル+デイブの3対1の対戦であるとします。報告された順位[ A: 3-0 B: 0-3 C: 0-3 D: 3-0]が可能になりましたが、[ A: 3-0 B: 1-2 C: 1-2 D: 1- 2]はなくなります。 …

3
行列乗算の複雑度分析のためのStrassenアルゴリズム
Strassen algの複雑さの再帰方程式は T(n)=7T(n2)+O(n2).T(n)=7T(n2)+O(n2).T(n) = 7T(\tfrac{n}{2})+O(n^2).これは私にはそれほど明確ではありません。パラメータnnnは入力のサイズであると想定されていますが、ここでは入力サイズが実際にはn2n2n^2一方で、これは行列の1次元であるようです。また、入力の各行列は4つのサブ行列に分割されるため、再帰方程式はT(n)=7T(n4)+O(n).T(n)=7T(n4)+O(n).T(n) = 7T(\tfrac{n}{4}) + O(n).

3
線形時間の最悪の場合をどのようにカウントするのですか?
この質問とこの質問は私に少し考えさせられました。長さの配列をソートするためnnnとkkk中のユニークな要素、我々は、配列内の値の数を格納できるようにする必要があります。いくつかの提案がありますが、最悪の場合線形時間でこれを行う方法を探しています。すなわち:O(n+klogk)O(n+klog⁡k)O(n + k \log k) リストの指定されたのを有する要素別個の要素、タプルのリストを決定すべての固有の要素よう要素の数であるで。AAAnnnkkkU={(xi,ci)}kU={(xi,ci)}kU = \{(x_i, c_i)\}^kxi∈Axi∈Ax_i \in Acicic_ixixix_iAAA 私がこれまでに提案してきた(失敗した)アイデアの一部を以下に示します。 平衡型二分探索木 -これを使用すると、O(logk)O(log⁡k)O(\log k)をツリーに挿入して値を増やす必要があります。挿入後、O(k)O(k)O(k)でツリートラバーサルを実行できます。したがって、合計時間がO(nlogk)O(nlog⁡k)O(n \log k)これは遅すぎます。 ハッシュマップ -これにより、O(1)O(1)O(1) 予想される挿入、つまりO(n)O(n)O(n) 予想される時間を取得できます。ただし、これはまだO(n)O(n)O(n)最悪のケースではありません。 空の空間マッピングAAA最小要素と最大要素を見つけます。この範囲をカバーするのに十分なメモリを割り当てます(ただし、初期化しません)。このメモリを基本的にハッシュマップとして使用し、ランダムハッシュを含めて、破損したメモリにアクセスしないようにします。この戦略には問題があります。(1)失敗する可能性が非常に低い確率論的ですが、保証されていません。このようなメモリを使用すると、浮動小数点または整数の制約に制限されます。 連想配列 - ハッシュマップやBSTと同様に、使用できる他の多くの連想配列がありますが、これらの制約に一致するものは見つかりません。 たぶん私が見逃している明らかな方法があるかもしれませんが、それは潜在的に不可能かもしれないと私は思います。あなたの考えは何ですか?

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