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

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

3
SATやその他の決定問題に対する近似アルゴリズムがないのはなぜですか?
NP完全決定問題があります。問題のインスタンスが与えられた場合、問題が実行可能な場合はYESを出力し、それ以外の場合はNOを出力するアルゴリズムを設計したいと思います。(もちろん、アルゴリズムが最適でない場合、エラーが発生します。) このような問題に対する近似アルゴリズムは見つかりません。私は特にSATを探していましたが、ウィキペディアの近似アルゴリズムに関するページで次のことがわかりました:アプローチの別の制限は、充足可能性などの「純粋な」決定問題ではなく、最適化問題にのみ適用されることです。 。 たとえば、なぜ近似比を、アルゴリズムが犯す間違いの数に比例するように定義しないのですか?貪欲で準最適な方法で決定問題を実際にどのように解決しますか?

2
垂直方向の可視性問題のための効率的なアルゴリズム
1つの問題を考えると、次のタスクを解決する効率的なアルゴリズムを作成する必要があることに気付きました。 問題:辺が軸に平行な辺 2次元の正方形の箱が与えられます。頂上から見ることができます。ただし、水平セグメントもあります。各セグメントには整数座標()および()があり、ポイントおよび(下の写真)。m個のY 0 ≤ Y ≤ N X 0 ≤ X 1 &lt; X 2 ≤ N (X 1、Y )、 (X 2、Y )nnnmmmyyy0≤y≤n0≤y≤n0 \le y \le nxxx0≤x1&lt;x2≤n0≤x1&lt;x2≤n0 \le x_1 < x_2 \le n(x1,y)(x1,y)(x_1,y)(x2,y)(x2,y)(x_2,y) ボックスの上部にある各ユニットセグメントについて、このセグメントを覗いた場合にボックス内をどのくらい深く見ることができるかを知りたいと思います。 正式には、場合、。x∈{0,…,n−1}x∈{0,…,n−1}x \in \{0,\dots,n-1\}maxi: [x,x+1]⊆[x1,i,x2,i]yimaxi: [x,x+1]⊆[x1,i,x2,i]yi\max_{i:\ [x,x+1]\subseteq[x_{1,i},x_{2,i}]} y_i 例:次の図のようにn=9n=9n=9およびm=7m=7m=7セグメントがある場合、結果は(5,5,5,3,8,3,7,8,7)(5,5,5,3,8,3,7,8,7)(5, 5, 5, 3, 8, 3, 7, 8, …

3
言語がコンテキストフリーかどうかをテストするアルゴリズム
言語がコンテキストフリーかどうかをテストするためのアルゴリズム/体系的な手順はありますか? つまり、代数形式で指定された言語(ようなものを考えてください)で、その言語がコンテキストフリーかどうかをテストします。学生が宿題をすべて手伝うためのWebサービスを作成していると想像してください。言語を指定すると、Webサービスは「コンテキストなし」または「コンテキストなし」を出力します。これを自動化する良い方法はありますか?L={anbnan:n∈N}L={anbnan:n∈N}L=\{a^n b^n a^n : n \in \mathbb{N}\} もちろん、ポンピング補題、オグデンの補題、パリフの補題、インターチェンジ補題など、手動校正のテクニックがあります。ただし、それらはいずれかの時点で手動の洞察を必要とするため、それらをアルゴリズムに変換する方法は明確ではありません。 私は見Kavehが他の場所で書かれた、すべての可能な言語で作業に任意のアルゴリズムには希望がないようですので、非文脈自由言語のセットが帰納的可算でないこと。したがって、Webサービスは「コンテキストフリー」、「コンテキストフリーではない」、または「わからない」を出力できる必要があると思います。教科書で見られる可能性のある多くの言語で、「私にはわからない」以外の答えを提供できることが多いアルゴリズムはありますか?このようなWebサービスをどのように構築しますか? この質問を適切にするには、ユーザーが言語を指定する方法を決定する必要があります。私は提案を受け入れますが、私はこのようなことを考えています: L={E:S}L={E:S}L = \{E : S\} ここで、はワード式で、は長さ変数の線形不等式のシステムで、次の定義があります。EEESSS 各ワード表現です。(これらは任意の単語を保持できる変数を表します。)x,y,z,…x,y,z,…x,y,z,\dotsΣ∗Σ∗\Sigma^* それぞれワード表現です。(暗黙的に、であるためは基礎となるアルファベットの単一のシンボルを表します。)a,b,c,…a,b,c,…a,b,c,\dotsΣ={a,b,c,…}Σ={a,b,c,…}\Sigma=\{a,b,c,\dots\}a,b,c,…a,b,c,…a,b,c,\dots 各あれば、単語表現で可変長のです。aη,bη,cη,…aη,bη,cη,…a^\eta,b^\eta,c^\eta,\dotsηη\eta 単語表現の連結は単語表現です。 各長さ可変です。(これらは、任意の自然数を保持できる変数を表します。)m,n,p,q,…m,n,p,q,…m,n,p,q,\dots それぞれ長さ変数です。(これらは対応する単語の長さを表します。)|x|,|y|,|z|,…|x|,|y|,|z|,…|x|,|y|,|z|,\dots これは、教科書の演習で見られる多くのケースを処理するのに十分なようです。もちろん、必要に応じて、代数形式で言語を指定する他のテキストによる方法に置き換えることができます。

2
難しいこと:並べ替えられたデッキをシャッフルするか、シャッフルされたデッキを並べ替えるのですか?
異なる要素の配列があります。あなたは(ブラックボックス関数は、2つの要素取るコンパレータへのアクセス権を持つとし、trueを返す)とビット真にランダムソース(ブラックボックス関数は、引数を取ることなく、独立して、均一にランダムビットを返します)。次の2つのタスクを検討してください。nnnaaabbba&lt;ba&lt;ba < b 配列は現在ソートされています。一様に(またはほぼ一様に)ランダムに選択された順列を生成します。 配列は、本質的にランダムに均一に選択されたいくつかの順列で構成されています。ソートされた配列を作成します。 私の質問は どのタスクが漸近的により多くのエネルギーを必要としますか? 情報理論、熱力学、またはこの質問に答えるために必要な他のものとの関係について十分に知らないため、質問をより正確に定義することはできません。しかし、質問は明確に定義できると思います(そして、誰かがこれで私を助けてくれることを願っています!)。 今、アルゴリズム的に、私の直感は、それらが等しいということです。すべての並べ替えは逆のシャッフルであり、逆もまた同様です。ソートにはが必要からランダムな順列を選択するため、シャッフル中の比較選択、が必要ランダムビット。シャッフルとソートの両方に、約スワップが必要です。logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nn!n!n!logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nnnn しかし、ランダウアーの原理を応用した答えが必要だと感じています。それは、少し「消す」ためにエネルギーが必要だと言っています。直感的に、これは配列のソートがより困難であることを意味すると思います。なぜなら、低エネルギー、高エントロピーの基底状態の乱れから高度に秩序化された状態への情報の「消去」ビットが必要だからです しかし一方で、任意の計算では、並べ替えは1つの順列を別の順列に変換するだけです。私はここでは完全な非専門家なので、物理学とのつながりを知っている人がこれを「分類」するのを手伝ってくれることを望んでいました!nlognnlog⁡nn \log n (質問はmath.seで回答を得られなかったので、ここに再投稿しています。それでいいのです。)

2
要素が変化したときの逆行列の計算
行列Aが与えられた場合。逆行列聞かせてAがであるA - 1(あり、A A - 1 = I)。Aの 1つの要素が変更されたと仮定します(a i jをa ' i jにしましょう)。目的は、この変更後にA − 1を見つけることです。この目的を見つける方法は、逆行列を最初から再計算するよりも効率的です。n×nn×nn \times nAA\mathbf{A}AA\mathbf{A}A−1A−1\mathbf{A}^{-1}AA−1=IAA−1=I\mathbf{A}\mathbf{A}^{-1} = \mathbf{I}AA\mathbf{A}aijaija _{ij}a′ijaij′a' _{ij}A−1A−1\mathbf{A}^{-1}

4
アルゴリズムの繰り返しと生成関数
コンビナトリクスは、コンピューターサイエンスで重要な役割を果たします。アルゴリズムの設計と設計の両方で、組み合わせ手法を頻繁に利用します。たとえば、グラフで頂点カバーセットを見つける方法の1つは、\ binom {n} {k}の可能なサブセットすべてを検査するだけです。二項関数は指数関数的に成長しますが、kが何らかの固定定数である場合、漸近解析による多項式時間アルゴリズムになります。kkk(nk)(nk)\binom{n}{k}kkk 多くの場合、現実の問題には、より複雑な組み合わせのメカニズムが必要であり、それを繰り返しの観点から定義することができます。有名な例の1つは、(単純に)次のように定義されたフィボナッチ数列です。 f(n)=⎧⎩⎨10f(n−1)+f(n−2)if n=1if n=0otherwisef(n)={1if n=10if n=0f(n−1)+f(n−2)otherwisef(n) = \begin{cases} 1 & \text{if } n = 1 \\ 0 & \text{if } n = 0 \\ f(n-1) + f(n-2) & \text{otherwise} \end{cases} nnn番目の項の値の計算は、この繰り返しを使用して指数関数的に増加しますが、動的プログラミングのおかげで、線形時間で計算できます。現在、すべての繰り返しがDP(オフハンド、階乗関数)に役立つわけではありませんが、カウントを生成関数ではなく繰り返しとして定義する場合、潜在的に悪用可能なプロパティです。 関数の生成は、特定の構造のカウントを形式化するエレガントな方法です。おそらく最も有名なのは、次のように定義された二項関数です。 (x+y)α=∑∞k=0(αk)xα−kyk(x+y)α=∑k=0∞(αk)xα−kyk(x + y)^\alpha = \sum_{k=0}^\infty \binom{\alpha}{k}x^{\alpha - k}y^k 幸いなことに、これには閉じた形式のソリューションがあります。すべての生成関数がこのようなコンパクトな記述を許可するわけではありません。 私の質問はこれです:アルゴリズムの設計で使用される関数を生成する頻度はどれくらいですか?分析によってアルゴリズムに必要な成長率を理解するためにそれらがどのように活用されるかは簡単にわかりますが、問題を解決する方法を作成するときに問題について教えてください。 同じカウントが何度も繰り返しとして再定式化される場合、動的プログラミングに役立つ可能性がありますが、おそらく同じ生成関数は閉じた形式になります。だから、それはそれほど均等にカットされていません。

4
グラフの深さ優先検索におけるグレーノードの目的
私が見た深さ優先検索の多くの実装(例:ここ)では、コードは灰色の頂点(発見されたが、そのすべての隣人が訪問されたわけではない)と黒の頂点(発見され、そのすべての隣人が訪問された)を区別します。この区別の目的は何ですか?DFSアルゴリズムは、グレーであるか黒であるかに関係なく、訪問先の頂点にアクセスすることはないようです。

8
アルゴリズムがビット文字列として表現できると仮定できるのはなぜですか?
計算の複雑さとチューリングマシンに関する本を読み始めています。引用は次のとおりです。 アルゴリズム(つまりマシン)は、標準的なエンコーディングを決定すると、ビット文字列として表すことができます。 この主張は単純な事実として提供されていますが、私には理解できません。 たとえば、入力としてを取り、(x + 1 )2または以下を計算するアルゴリズムがある場合:バツxx(x + 1 )2(x+1)2(x+1)^2 int function (int x){ x = x + 1; return x**2; } それは、これはアルファベット使用して文字列として表現することができますどのように?{ 0 、1 }∗{0,1}∗\{0, 1\}^*

1
2つまたは3つのクエリで多項式を見つける
ブラックボックスは、任意の点で多項式を評価できることを意味します。f(x)f(x)f(x)f(x)f(x)f(x) 入力:次数のモニック多項式のブラックボックス。f(x)∈Z+[x]f(x)∈Z+[x]f(x) \in\mathbb{Z}^+[x]ddd 出力:多項式の係数。dddf(x)f(x)f(x) 私のアルゴリズム: let f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x) = x^{d} + a_{d-1} x^{d-1} + \cdots + a_1 x + a_0 ブラックボックスを使用して多点で多項式を評価し、線形方程式系を取得します。これで、線形方程式を解いて目的の係数を取得できます。f(x)f(x)\mathcal{f(x)}ddd ただし、この場合、ブラックボックスに対する多くのクエリが必要です。クエリの数を最小限に抑えたい。クエリの数を2つまたは3つに減らす方法はありますか?O(d)O(d)\mathcal{O(d)}

3
nullノードを表すためにNILを使用する目的は何ですか?
私のAlgorithms and Data Structuresコースでは、教授、スライド、および本(Introduction to Algorithms、第3版)NILは、たとえば存在しないノード(ツリー内)の子を示すためにこの単語を使用しています。 かつて、講義中NILに、クラスメートが言ったのではなく、と言ったのですが、null教授は彼を修正しましたが、教授がこの言葉を強調する理由がわかりません。 人々NILがnull、またはnone、または他の単語の代わりに単語を使用する理由はありますか?ないNIL他の人が持っていないことをいくつかの特定の意味がありますか?歴史的な理由はありますか? また、ウェブのいくつかの場所で、たとえばのnull代わりに単語が使用されているのを見たことがあることに注意してくださいNIL。通常、この最後の単語が使用されます。

4
重複しないビットベクトルのペアを見つける
幅kのビットベクトルのリストを提供します。あなたの目標は、共通の1がない2つのビットベクトルをリストから返すか、そのようなペアが存在しないことを報告することです。nnnkkk 例えば、私があなたに与える場合次いで、唯一の解決策は{ 00110 、11000 }。代替的に、入力[ 111 、011 、110 、101 ]解を持ちません。そして、すべてゼロのビットベクトル000 ... 0と別の要素eを含むリストには、自明な解{ e 、000 ... 0 }があります。[ 00110 、01100 、11000 ][00110,01100,11000][00110, 01100, 11000]{ 00110 、11000 }{00110,11000}\{00110, 11000\}[ 111 、011 、110 、101 ][111,011,110,101][111, 011, 110, 101]000 ... 0000...0000...0eee{ e 、000 ... 0 }{e,000...0}\{e, 000...0\} 少し難しい例がありますが、解決策はありません(各行はビットベクトルで、黒い四角は1で、白い四角は0です): ■ ■ ■ ■ □ □ …

4
この有限グラフ問題は決定可能ですか?どの要因が問題を決定可能にしますか?
次の問題が決定可能かどうか、およびその発見方法を知りたい。私が見るすべての問題は、「はい」または「いいえ」と言うことができます。そのため、ほとんどの問題とアルゴリズムは、ここで提供されるいくつかを除いて決定できますか? 入力:Aは有限有向グラフととと頂点と 質問:ずに経路と初期頂点とASの最終頂点が存在として?v u G u vGGGvvvあなたはuuGGGあなたはuuvvv

4
リンクリストでクイックソートを使用しないのはなぜですか?
クイックソートアルゴリズムは、次のステップに分けることができます ピボットを識別します。 ピボットに基づいてリンクリストをパーティション分割します。 リンクリストを再帰的に2つの部分に分割します。 ここで、最後の要素を常にピボットとして選択すると、ピボット要素(最初のステップ)の識別に時間かかります。O(n)O(n)\mathcal O(n) ピボット要素を特定したら、そのデータを保存し、他のすべての要素と比較して、正しいパーティションポイントを特定します(2番目のステップ)。ピボットデータを保存するため、各比較には時間かかり、各スワップにはO(1 )時間かかります。したがって、n個の要素に対して合計でO(n )時間かかります。O(1)O(1)\mathcal O(1)O(1)O(1)\mathcal O(1)O(n)O(n)\mathcal O(n)nnn したがって、再帰関係は次のとおりです。 は O(n log n )です。これは、リンクリストを使用したマージソートと同じです。T(n)=2T(n/2)+nT(n)=2T(n/2)+nT(n) = 2T(n/2) + nO(nlogn)O(nlog⁡n)\mathcal O(n \log n) それでは、なぜリンクリストのクイックソートよりもマージソートが優先されるのでしょうか。

3
nで割り切れる最大の合計
StackOverflowでこの質問をしましたが、ここがより適切な場所だと思います。 これは、アルゴリズムコースの概要からの問題です。 n個の正の整数を持つ配列があります(配列を並べ替えたり、要素を一意にする必要はありません)。示唆O (N )で割り切れる要素の最大和見つけるためのアルゴリズムをnと。aaannnO(n)O(n)O(n)nnn 例: = [ 6 、1 、13 、4 、9 、8 、25 ] 、N = 7。答えは56(要素と6 、13 、4 、8 、25)a=[6,1,13,4,9,8,25],n=7a=[6,1,13,4,9,8,25],n=7a = [6, 1, 13, 4, 9, 8, 25], n = 75656566,13,4,8,256,13,4,8,256, 13, 4, 8, 25 それはそれを見つけることは比較的簡単です動的プログラミングを使用して、残りで最大の和を格納0 、1 、2 、。。。、n − 1。O(n2)O(n2)O(n^2)0,1,2,...,n−10,1,2,...,n−10, 1, 2,..., n - 1 また、我々は要素の連続配列に注意を制限した場合、それはに最適なシーケンスを見つけるのは簡単だ時間、部分和を格納することによって、モジュロN:聞かせてS …

2
2つの通常言語の連結が明確になるのはいつですか?
言語と与えられた場合、すべての単語について、それらの連結が明確であるとしましょう。正確に1つの分解とおよび、そうでない場合はあいまいです。(このプロパティに確立された用語があるかどうかはわかりません。検索するのは難しいです!)簡単な例として、とそれ自体の連結はあいまいです()、ただし、とそれ自体の連結は明確です。AAABBBABABABw∈ABw∈ABw \in ABw=abw=abw = aba∈Aa∈Aa \in Ab∈Bb∈Bb \in B{ε,a}{ε,a}\{\varepsilon, \mathrm{a}\}w=a=εa=aεw=a=εa=aεw = \mathrm{a} = \varepsilon \mathrm{a} = \mathrm{a} \varepsilon{a}{a}\{\mathrm{a}\} 2つの標準言語の連結が明確であるかどうかを決定するアルゴリズムはありますか?

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