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

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

3
サフィックス配列を使用して2つの文字列の最長共通部分文字列を計算する
複雑さで接尾辞配列を作成する方法を学んだ後、接尾辞配列の用途を発見することに興味があります。これらの1つは、時間で2つの文字列間の最長共通部分文字列を見つけることです。インターネットで次のアルゴリズムを見つけました。O(N)O(N)O(N)O(N)O(N)O(N) 2つの文字列とBを1つの文字列ABにマージしますAAABBBABABAB ABの接尾辞配列を計算しますABABAB LCPLCPLCP(最長共通プレフィックス)配列を計算します 答えは最大値LCP[i]LCP[i]LCP[i] 私はそれを実装しようとしましたが、多くの実装の詳細は言われていなかったので(つまり、文字列を連結するとき、それらの間に特殊文字を入れる必要があります()?)、私のコードは多くのテストケースで失敗しました。誰かがこのアルゴリズムについて詳しく説明できますか?AcBAcBAcB 前もって感謝します。 注:このアルゴリズムの正確性は保証しません。私はブログでそれを見つけました、そして、それが機能していると確信がありません。間違っていると思われる場合は、別のアルゴリズムを提案してください。

1
有向グラフで単純なサイクルを見つける
私にとって、この問題は非常に興味深いようです。有向グラフで単純なサイクル(つまり、反復ノードではないサイクル)を見つけようとしていました。 私の解決策は次のようになっています。つまり、このグラフはケースの問題です。 深さ優先検索で「バックエッジ」を見つけることができるときにグラフにサイクルがあることを知っています(DFSTreeの私の写真で破線)、しばらくの間は数サイクルは確かですが、すべて、単純なサイクル。なぜなら、サイクルから非常に重要な指示されたegdes、つまり(0123)!=(0321) 私は、バックエッジを持つ各ノードのdfsを作成することを考えていますが、私にはわかりません、そしてそれは明確ではありません。それで、あなたが私を案内するかどうか、私はあなたに尋ねます。ありがとう!。 ここに私のケースの問題に対する単純なループのカウントがあります。

6
完璧なチェスアルゴリズムはありますか?
現在のチェスアルゴリズムは、プレーヤーの動きと対戦相手の動きに応じて、考えられるパスのツリーを約1レベルまたは2レベル下に行きます。チェスゲームで起こり得るすべての敵の動きを予測するアルゴリズムを開発する計算能力があるとしましょう。プレーヤーの動きに応じて、相手が任意の瞬間に取ることができるすべての可能なパスを備えたアルゴリズム。失われることのない完璧なチェスアルゴリズムはありますか?それとも、常に勝つアルゴリズムでしょうか?理論的には、考えられるすべての動きを予測できる人は、すべての動きを打ち負かす方法を見つけるか、特定の動きが彼を敗北に導く場合は単に別の道を選択する必要があります。 編集-私の質問は本当に何ですか。最適にプレイできる完璧なアルゴリズムの計算能力があるとしましょう。相手が同じ最適なアルゴリズムでプレイするとどうなりますか?これは、限られた数の(非常に大きいかどうかに関係なく)動きを持つ2人のプレーヤーのゲームすべてにも適用されます。常に勝つ最適なアルゴリズムはありますか? 個人的な定義:最適なアルゴリズムは、常に勝つ完璧なアルゴリズムです...(決して負けないものではなく、常に勝つものです)

2
マスター定理に規則性条件があるのはなぜですか?
Cormenらによるアルゴリズムの紹介を読んでいます。そして、私は73ページから始まるマスター定理の声明を読んでいます。ケース3では、定理を使用するために満たす必要がある規則性条件もあります。 ... 3.場合 f(n)=Ω(nlogba+ε)f(n)=Ω(nlogb⁡a+ε)\qquad \displaystyle f(n) = \Omega(n^{\log_b a + \varepsilon}) いくつかの定数場合、およびε&gt;0ε&gt;0\varepsilon > 0 af(n/b)≤cf(n)af(n/b)≤cf(n)\qquad \displaystyle af(n/b) \leq cf(n) [ これは規則性条件です ] いくつかの定数および十分に大きい場合、..c&lt;1c&lt;1c < 1nnn 規則性条件が必要な理由を誰かに教えてもらえますか?条件が満たされない場合、定理はどのように失敗しますか?

4
セットのセットが与えられると、各セットから少なくとも1つの要素を含む最小のセットを見つけます。
集合を考えるとセットの、私はセットを見つけるしたいMは、すべてセットするようなSにおけるSは、少なくとも一つの要素が含まMを。また、この基準を満たしながら、Mにできるだけ少ない要素を含めるようにしますが、このプロパティには複数の最小のMが存在する場合があります(ソリューションは必ずしも一意ではありません)。SS\mathbf{S}MMMSSSSS\mathbf{S}MMMMMMMMM 具体例として、セットが国旗のセットであり、Sの各フラグSの要素がその国旗で使用される色であると仮定します。米国はS = { r e d 、w h i t e 、b l u e }であり、モロッコはS = { r e d 、g r e e n }です。その後、MSS\mathbf{S}SSSSS\mathbf{S}S={red,white,blue}S={red,white,blue}S = \{red, white, blue\}S={red,green}S={red,green}S = \{red, green\}MMMは、すべての国旗がの色の少なくとも1つを使用するプロパティを持つ色のセットです。(青、黒、赤、緑、黄、白のオリンピック色は、このようなMの例であり、少なくとも1920年にはそうでした。)MMMMMM この問題の一般的な名前はありますか?セットを見つけるために受け入れられた「最良の」アルゴリズムはありますか?(計算の複雑さのためにプロセスを最適化するよりも、ソリューション自体に興味があります。)MMM

3
DFA最小化のためのBrzozowskiのアルゴリズム
BrzozowskiのDFA最小化アルゴリズムは、以下によってDFA 最小DFAを構築GGGします。 内のすべてのエッジ反転GGG、初期状態を作るAN状態を受け入れ、NFA取得するには、初期状態を受け入れるN′N′N'逆言語に対して、 パワーセット構造を使用して、逆言語のを取得しG′G′G'ます。 のエッジを反転(および初期受け入れスワップ)して、元の言語のG′G′G'NFA を取得します。NNN GminGminG_{\min} もちろん、一部のDFAには指数関数的な大きな逆DFAがあるため、このアルゴリズムは入力のサイズに関して最悪の場合指数関数的に実行されるため、逆DFAのサイズを追跡できます。 場合は入力DFAのサイズは、最小限DFAの大きさで、かつ最小限逆DFAの大きさを、その後の面でBrzozowskiのアルゴリズムの実行時間何であるN、N、およびmは? nは mはNNNnnnmmmNNNnnnmmm 特に、Brzozowskiのアルゴリズムは、とmのどの関係で、HopcroftまたはMooreのアルゴリズムよりも優れていますか?nnnmmm Practice / Applicationの典型的な例では、Brzozowskiのアルゴリズムが他のアルゴリズムよりも優れていると聞いています。非公式には、これらの典型的な例はどのようなものですか?

1
すべての兵士は同時に射撃する必要があります
私が学生だったとき、デジタルシステム/ロジックデザインの教科書に問題がありました。N人の兵士が並んでいて、同時に撃ちたいということです。問題のより難しいバージョンは、兵士たちが列ではなく一般的なネットワークに立っていることでした。これは古典的な問題だと確信していますが、その名前を思い出すことはできません。思い出させてくれますか?

1
木の根から葉までの最長経路を見つける
次の例のようなツリーがあります(グラフ理論の意味で)。 これは、1つの開始ノード(ルート)と多くの終了ノード(リーフ)を持つ有向ツリーです。各エッジには長さが割り当てられています。 私の質問は、ルートで始まり葉のいずれかで終わる最長パスをどのように見つけるかです。ブルートフォースアプローチは、すべてのルートリーフパスをチェックし、最大長のパスを取得することですが、1つあればより効率的なアルゴリズムを好むでしょう。

3
動的グラフ関連の問題に取り組む方法
私は一般的なstackoverflowでこの質問をし、ここに導かれました。 一般的な部分的または完全に動的なグラフの問題に対処する方法を説明できる人がいるとすばらしいでしょう。 例えば: 各インスタンスでエッジが削除されたときに、インスタンスの無向加重グラフで2つの頂点間の最短パスを検索します。(u,v)(u,v)(u,v)nnn 各インスタンスでエッジが削除される場合など、n個のインスタンスの無向グラフで接続されたコンポーネントの数を検索します。 最近、プログラミングコンテストでこのジャンルの問題に遭遇しました。Webを検索したところ、動的グラフに関する多くの研究論文が見つかりました[1,2]。私はそれらのいくつかを読みました、そして、私はまっすぐなものを見つけることができませんでした(クラスタリング、スパース化など)あいまいです。 これらの概念をよりよく理解するための指針を提供できる人がいることを本当に感謝しています。 D. Eppstein、Z。Galil、GF Italianoによる動的グラフアルゴリズム(1999) G. Nannicini、L。Libertiによる動的グラフ上の最短経路(2008)

2
スイープラインアルゴリズムを使用した円交差
残念ながら、私はまだスイープラインアルゴリズムを理解することにそれほど強くありません。このトピックに関するすべての論文と教科書はすでに読まれていますが、理解はまだ遠いです。それを明確にするために、できるだけ多くの演習を解決しようとしています。しかし、本当に興味深く、重要な仕事は私にとってまだ挑戦です。 全能者ジェフ・エリクソンによる線分交差の講義ノートで見つけた以下の演習。 演習2.スイープラインアルゴリズムを説明および分析して、平面内の円が与えられた場合、2つが交差するかどうかを時間で決定します。各円は、その中心と半径によって指定されるため、入力は3つの配列、およびます。低レベルのプリミティブを正しく実装するよう注意してください。nnnO (n ログn )O(nログ⁡n)O(n \log n)バツ[ 1 .. n ] 、Y[ 1 .. n ]バツ[1 ..n]、Y[1 ..n]X[1.. n], Y [1.. n]R [ 1 .. n ]R[1 ..n]R[1.. n] 複雑なことをもっと簡単にしよう。円の交差について何を知っていますか?線の交差でどのような類似物が見つかるか。2つの線が隣接している場合に交差する可能性があります。2つの円が交差するためにどのプロパティが必要ですか ましょう、円の中心間の距離である及び円の中心。いくつかのケースを考慮してください。dddr0r0r_{0}r1r1r_{1} ケース1:場合、解は存在せず、円は分離されます。d&gt; r0+ r1d&gt;r0+r1d > r_{0} + r_{1} ケース2:1つの円が他の円に含まれているため、ソリューションはありません。d&lt; | r0− r1|d&lt;|r0−r1|d < |r_{0} - r_{1}| ケース3:および場合、円は一致し、解の数は無限になります。r 0 = …

3
再帰、スタック、またはキューなしでツリーをたどることができますか?
半年前、私はデータ構造クラスに座っていました。そこでは、再帰、スタック、キューなど(または他の同様のデータ構造)といくつかのポインターを使用せずに誰もがツリーを横断できる場合、教授は追加のクレジットを提供しました。私はその質問に対する明白な答えだと思ったものを思いついたが、それは教授によって最終的に受け入れられた。私は同じ学部の別の教授と一緒に離散数学クラスに座っていました。彼は、再帰、スタック、キューなどなしでツリーを横断することは不可能であり、私の解決策は無効であると主張しました。 それで、それは可能ですか、不可能ですか?なぜですか? 編集:明確化を追加するために、3つの要素(各ノードに保存されたデータと2つの子へのポインター)を持つバイナリツリーにこれを実装しました。私のソリューションは、わずかな変更を加えるだけでn項ツリーに拡張できます。 私のデータ構造の教師は、ツリーの変更に対して何の制約も課していませんでした。実際、彼自身の解決策は、子ポインターを使用してツリーを下に向けることであることがわかりました。私の離散数学教授は、ツリーの突然変異は、ツリーの数学的な定義によるとツリーではなくなったことを意味し、彼の定義は親へのポインタも排除することを言った-これは上記で解決した場合と一致します。

2
ヒープ
おそらく、この質問は以前に聞かれます。CLRS(2nd Ed)problem 6.5-8からのものです- 得マージに時間アルゴリズムをK 1つのソートされたリストの中にリストをソートし、N、すべての入力リスト内の要素の総数です。(ヒント:k方向のマージには最小ヒープを使用します。)O(nlgk)O(nlg⁡k)O(n \lg k)kkknnnkkk あるとしてリストをソートし、合計n個の値、私たちはそれぞれのリストが含まれていると仮定しましょうn個kkknnn番号、また各リストのは、厳密に昇順にソートされ、そして結果はまた、昇順に格納されます。nknk\frac{n}{k} 私の擬似コードはこのように見えます- list[k] ; k sorted lists heap[k] ; an auxiliary array to hold the min-heap result[n] ; array to store the sorted list for i := 1 to k ; O(k) do heap[i] := GET-MIN(list[i]) ; pick the first element ; and …

5
グラフの負の重みエッジの重要性は何ですか?
私は動的なプログラミング演習をしていて、Floyd-Warshallアルゴリズムを見つけました。どうやら、負の重みのエッジを持つことができますが、負のサイクルがないグラフのすべてのペアの最短パスを見つけます。 だから、負の重みのエッジの現実世界の重要性は何だろうか?わかりやすい英語の説明が役立つでしょう。

5
どのアルゴリズムでも書き込めない数の存在を証明するにはどうすればよいですか?
私には問題があります: 無限に長く実行され、その数値の10進数を書き込むプログラムが存在しない実数が存在することを示します。 私はそれを停止問題に減らすことで解決できると思いますが、どうすればいいのか分かりません。 さらに練習するために、同様の問題へのリンクも歓迎します。

2
このプログラムは整数ごとに終了しますか?
GATE準備のパートテストでは、次の質問がありました。 f(n): if n is even: f(n) = n/2 else f(n) = f(f(n-1)) 「すべての整数で終了します」と答えました。なぜなら、いくつかの負の整数であっても、Stack Overflow Errorとして終了するからです。 しかし、私の友人は、これは実装されたコードではなく、単なる擬似コードであるため、いくつかの負の整数の場合は無限再帰になると反対しました。 正しい答えとその理由は?

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