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

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

2
ラベル付きグラフのグラフ同型問題
ラベルのないグラフの場合、グラフ同型問題は、実際に非常にうまく機能するいくつかのアルゴリズムによって対処できます。つまり、最悪の場合の実行時間は指数関数的ですが、通常は多項式の実行時間があります。 ラベル付きグラフの場合も同様の状況になることを期待していました。しかし、「実用的に効率的な」アルゴリズムを提案するリファレンスを見つけるのは本当に難しいです。 備考:ここで、同型はラベルを保持する必要があります。つまり、2つの有限オートマトン/プロセス代数項間の同型は、オートマトン/項が本質的に「ノードの名前変更まで等しい」ことを意味します。 私が見つけた唯一の参照は、ラベル付きグラフの同型問題を多項式で通常のグラフの同型問題に減らすことができると述べているWikipediaの参照でした。ただし、基礎となる論文は、実用的なアルゴリズムよりも複雑性理論についてです。 何かが足りない、または2つのラベル付きグラフが同型であるかどうかを判断するための効率的な「ヒューリスティックな」アルゴリズムがないのは実際の場合ですか? ヒントや参照は素晴らしいでしょう。

3
ガソリンスタンドの問題のアルゴリズムを理解する
ガスステーションの問題我々が与えられているの都市とそれらの間の道路。各道路には長さがあり、各都市には燃料の価格が定義されています。道路の1つの単位は燃料の1つの単位を要します。私たちの目標は、できるだけ安価な方法でソースから目的地に行くことです。私たちのタンクはいくつかの値によって制限されています。{ 0 、… 、n − 1 }nnn{0,…,n−1}{0,…,n−1}\{ 0, \ldots, n-1 \} アルゴリズムを理解しようとするので、解決策を計算するための手順を手動で書き留めました。残念ながら私は行き詰まりました-ある時点で考慮すべきエッジがありません、理由がわかりません、おそらく何かが足りないのです。 例: 道路: 0 ----------- 1 ------------ 2 -------------- 3 (それはしません単純である必要があります。グラフは任意です。つまり、0-> 2、0-> 3、1-> 3などの道路が存在する可能性があります。) ソース:0、デスティネーション:3、タンク:10ユニット 燃料価格:0 :10ユニット、1:10ユニット、2:20ユニット、3:12ユニット 長さ:0-> 1:9ユニット、1-> 2:1ユニット、2-> 3:7ユニット 最適解: 0で9ユニット、1で8ユニットを入力します。合計コストは170ユニット(9 * 10 + 8 * 10)になります。 そこで、ここに示すように計算してみました(2.2項) GV[u] is defined as: GV[u] = { TankCapacity - …

1
疑似逆行列を見つける複雑さ
任意のフィールドのMoore–Penrose疑似逆行列を見つけるには、いくつの算術演算が必要ですか? 行列が反転可能で複素数値の場合、それは単に逆になります。逆を見つけるには、時間かかります。ここで、は行列乗算定数です。これは、アルゴリズムの第3版の概要の定理28.2です。ωO(nω)O(nω)O(n^\omega)ωω\omega 行列の場合線形独立行または列を有し、複素数値は、擬似逆行列を用いて計算することができる又はのそれぞれここで、の共役転置である。特に、これはの疑似逆行列を見つけるための時間を意味します。A *(A A * )- 1(A A * )- 1 A * A * A O (N ω)AAAAA∗(AA∗)−1A∗(AA∗)−1A^*(A A^*)^{-1}(AA∗)−1A∗(AA∗)−1A∗(A A^*)^{-1}A^*A∗A∗A^*AAAO(nω)O(nω)O(n^\omega)AAA 一般的な行列の場合、私が見たアルゴリズムはQR分解またはSVDを使用します。これは、最悪の場合算術演算をとるようです。より少ない操作を使用するアルゴリズムはありますか?O(n3)O(n3)O(n^3)

3
最小の移動数で数字を照合するアルゴリズム
これは編集距離の質問の一種で、とても簡単です。私はこの問題についてはかなり頭がおかしくて、今のところそれを理解することはできません。 一連の数値が与えられた場合、例えば [3, 1, 1, 1] 「ムーブ」の数を最小限に抑えて、すべての数値を同じ数値に最も効率的に変換するにはどうすればよいでしょうか。「移動」とは、数値から1を追加または削除することを意味します。 上記の例では、最も効率的な移動は次のとおりです。 [1, 1, 1, 1] これには2回の移動が必要で、最初の数を2回減らします。 数百の数のはるかに大きな配列を考えると、これを見つけるための最良の方法を見つけることができません。 私は最初に丸められた平均数(長さで割ったすべての合計)を計算してから、計算された平均に減らしましたが、上記の例はこれを壊し、2の代わりに4手を必要としました。 私は理解できると思います: 平均、 モード、 中央値 そして、それぞれの編集距離を取得し、最小距離を選択します。ただし、これがすべてのインスタンスで正しいかどうかはわかりません。どうやって知ることが出来ますか?

1
特定のDFAが最小限であるかどうかをどれだけ速く判断できますか?
最小化決定性有限オートマトン(のDFA)は、文献に詳細に研究されてきた問題であり、そしていくつかのアルゴリズム次のような問題を解決するために提案されています:DFAを考えると、同じ言語を受け入れて対応する最小限のDFAを計算A。これらのアルゴリズムのほとんどは、多項式時間で実行されます。AA\mathscr{A}AA\mathscr{A} ただし、この問題の決定バリアントは「DFA 与えられた場合、Aは最小限ですか?」-実際に最小オートマトンを計算するよりも効率的に解くことができます。明らかに、これは、たとえば、Hopcroftのパーティション絞り込みアルゴリズムを実行してから、すべてのパーティションに正確に1つの状態が含まれているかどうかを判断することによっても効率的に実行できます。AA\mathscr{A}AA\mathscr{A} Yuval Filmusが彼の回答で示唆しているように、決定可能性バリアントは、おそらく標準アルゴリズムを使用することで、より速く解決できます。残念ながら、その方法はわかりません(ここで明らかな点を見逃していないことを願っています)。 Yuvalはここのコメントで、最もよく知られているアルゴリズム(上記のものなど)が一定サイズのアルファベットに対して時間で実行されることを指摘しています。したがって、私はランタイムでの漸近的に重要な利益に関心があるだけでなく、かなり可能性が低いように見えます。私が最も気になるのは、私たちがイエスノーノーアンサーだけに関心があるという事実から引き出されるかもしれない「ショートカット」を想像できないことです-漸近的に無視できる時間を節約することを可能にするショートカットさえも。DFAの最小性を決定する賢明なアルゴリズムはすべて、実際にDFAを最小限に抑え、プロセス中に変更がないか確認する必要があると思います。O(nlogn)O(nlog⁡n)\mathcal{O}(n \log n)

1
プロセッサーを使用して
n 2台のコンピューターで時間の複雑さで並列に配列の最大値を見つけるアルゴリズムをクラスで提示されました。O (1 )O(1)O(1)ん2n2n^2 アルゴリズムは: 長さnの配列Aがあるとします。 長さnのフラグ配列Bを作成し、台のコンピューターでゼロで初期化します。んnn 最小値のインデックスでB内のすべての2つの要素とライト1を比較するのコンピュータ。ん2n2n^2 台のコンピューターを持つAで0のインデックスを見つけます。んnn 講師はnでそれができるかもしれないと私たちにからかった台のコンピューターとlogn時間の複雑さ。んログんnlog⁡n\frac{n}{\log n}ログんlog⁡n\log n たくさん考えた後、どうすればいいのかわからなかった。何か案が?

1
ナップザック問題の変種
定数によってナップザックの項目数を制限する必要がある場合、動的プログラミングの状況でナップザック問題にどのようにアプローチしpppますか?これは同じ問題(最大重みWWW、すべてのアイテムに値vvvと重みwww)ですが、ナップザックに追加できるのはpppアイテムのみで、明らかにナップザックの値を最適化する必要があります。 3次元が必要ですか、それ以外のアプローチを見つけることができますか。セルのナップザックに項目の数を単純に追加しようとし、項目の数<= で最後に最大値を取得しようとしましたpppが、これは最善の解決策ではありません。

1
言語が正規かどうかをテストするアルゴリズム
言語が正規かどうかをテストするためのアルゴリズム/体系的な手順はありますか? 換言すれば、代数形式で指定された言語与えられる(のようなものを考えるL={anbn:n∈N}L={anbn:n∈N}L=\{a^n b^n : n \in \mathbb{N}\})、言語が正規であるかどうかをテストします。学生がすべての宿題を手助けするWebサービスを作成していると想像してください。ユーザーが言語を指定すると、Webサービスは「通常」、「通常ではない」、または「わからない」で応答します。(Webサービスに「わからない」とできるだけ頻繁に回答しないようにしてください。)これを自動化する良い方法はありますか?これは扱いやすいですか?それは決定可能ですか(つまり、「わからない」と答える必要がないことを保証することは可能ですか)?この問題を解決するための合理的に効率的なアルゴリズムはあり、実際に発生する可能性のある多くの/ほとんどの言語に対して「わからない」以外の回答を提供できるでしょうか? 言語が規則的でないことを証明する古典的な方法は、ポンピングレンマです。ただし、ある時点では(たとえば、ポンプする単語を選択するために)手動での洞察が必要となるため、これをアルゴリズムに変換できるかどうかは不明です。 言語が正規であることを証明する古典的な方法は、Myhill–Nerodeの定理を使用して有限状態オートマトンを導出することです。これは有望なアプローチのように見えますが、代数形式で言語に対して基本的な操作を実行する機能が必要です。代数形式の言語で、必要になる可能性のあるすべての操作を象徴的に実行する体系的な方法があるかどうかは、私にはわかりません。 この質問を適切に配置するには、ユーザーが言語を指定する方法を決定する必要があります。私は提案を受け入れていますが、私はこのようなことを考えています: L={E:S}L={E:S}L = \{E : S\} ここで、は単語式、Sは長さ変数に対する線形不等式のシステムであり、次のように定義されています。EEESSS 各ワード表現です。(これらは、Σ ∗の任意の単語をとることができる変数を表します。)x,y,z,…x,y,z,…x,y,z,\dotsΣ∗Σ∗\Sigma^* それぞれワード表現です。(ここで、x rは文字列xの逆を表します。)xr,yr,zr,…xr,yr,zr,…x^r,y^r,z^r,\dotsxrxrx^rxxx それぞれ、B 、Cは、...ワード表現です。(暗黙的に、Σ = { 、B 、C 、... }、そう、B 、C 、...、基礎となるアルファベットで単一のシンボルを表します。)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 各η、B η、C ηは、...場合、単語表現であるηは、可変長のです。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|,…|x|,|y|,|z|,\dots これは、教科書の演習で見られる多くのケースを処理するのに十分広いようです。もちろん、より適切な提案があれば、代数形式で言語を指定する他のテキストによる方法で置き換えることができます。

1
間隔のマップのデータ構造
ましょ整数であり、およびlet全ての整数の集合を表します。ましょう整数の意味間隔。nnnZZ\mathbb{Z}[a,b][a,b][a,b]{a,a+1,a+2,…,b}{a,a+1,a+2,…,b}\{a,a+1,a+2,\dots,b\} マップを表すデータ構造を探しています。データ構造で次の操作をサポートする必要があります。f:[1,n]→Zf:[1,n]→Zf:[1,n] \to \mathbb{Z} get(i)get(i)\text{get}(i)は返します。f(i)f(i)f(i) set([a,b],y)set([a,b],y)\text{set}([a,b],y)更新する必要がので、すなわち、更新新しいマップにこのような forおよび for。ffff(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=\cdots=f(b)=yffff′f′f'f′(i)=yf′(i)=yf'(i) = yi∈[a,b]i∈[a,b]i \in [a,b]f′(i)=f(i)f′(i)=f(i)f'(i) = f(i)i∉[a,b]i∉[a,b]i \notin [a,b] stab(i)stab(i)\text{stab}(i)は、とが一定になるような最大間隔を返す必要があります(つまり、)。[a,b][a,b][a,b]i∈[a,b]i∈[a,b]i \in [a,b]fff[a,b][a,b][a,b]f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=\cdots=f(b) add([a,b],δ)add([a,b],δ)\text{add}([a,b],\delta)更新する必要が新しいマップにようにためのと for。、F ' 、F '(I )= F (I )+ δ I ∈ [ 、B ] F '(I )= F (I )I ∉ 〔、B ]ffff′f′f'f′(i)=f(i)+δf′(i)=f(i)+δf'(i) = f(i) + \deltai∈[a,b]i∈[a,b]i \in [a,b]f′(i)=f(i)f′(i)=f(i)f'(i) = …

2
Aho-CorasickアルゴリズムとRabin-Karpアルゴリズムの比較
複数のパターン検索をサポートする文字列検索アルゴリズムに取り組んでいます。実行時間の点で最も強力な候補のように見える2つのアルゴリズム、すなわちAho-CorasickとRabin-Karpを見つけました。しかし、2つのアルゴリズムの包括的な比較は見つかりませんでした。どのアルゴリズムがより効率的ですか?また、並列計算と複数パターン検索にはどちらが適していますか?最後に、必要なハードウェアリソースが少ないのはどれですか。 ACアルゴリズムの場合、検索フェーズは時間かかりますが、RKの場合はO (n m )です。ただし、RKの実行時間はあり、ACに類似しています。私の暫定的な結論は、RKはACほど多くのメモリを必要としないため、RKは実質的に優れているように見えるということです。あれは正しいですか?O (n + m )O(n+m)O(n+m)O (n m )O(nm)O(nm)O (n + m )O(n+m)O(n+m)

3
1からまでの各数値が、マルチセットのいくつかの要素の合計として一意に表現できるようなマルチセットの数
私の問題。与えられた、私は、有効なマルチセット数カウントする。マルチセットは次の場合に有効ですS SnnnSSSSSS の要素の合計はであり、nSSSnnn からまでのすべての数は、いくつかの要素の合計として一意に表すことができます。n S111nnnSSS 例。 たとえば、n=5n=5n=5場合、{1,1,1,1,1},{1,2,2},{1,1,3}{1,1,1,1,1},{1,2,2},{1,1,3}\{1,1,1,1,1\}, \{1,2,2\}, \{1,1,3\}は有効です。 ただし、2は\ {1,1 \}と\ {2 \}の両方で形成できるため、S={1,1,1,2}S={1,1,1,2}S=\{1,1,1,2\}は無効です(つまり、2は2 = 1 + 1および2 = 2)なので、2番目の条件は成立しません。同様に、3は\ {2,1 \}および\ {1,1,1 \}で形成できます。{1,1}{1,1}\{1,1\}{2}{2}\{2\}2=1+12=1+12=1+12=22=22=2{2,1}{2,1}\{2,1\}{1,1,1}{1,1,1}\{1,1,1\} S={1,2,4S={1,2,4S=\{1,2,4 }も無効です。これは、111から5までのすべての数値を555一意に作成できるためですが、Sの要素の合計は5でSSSはありません。555 私はかなり前からこの問題に適したアルゴリズムを見つけようとしましたが、解決できません。codechefからです。提出されたソリューションのいくつかを見ましたが、問題を解決するためのロジックをまだ取得できませんでした。注:質問の制限時間は10秒で、n&lt;109n&lt;109n<10^9 マルチセットの場合、表記S={(a1,c1),(a2,c2)...}S={(a1,c1),(a2,c2)...}S = \{(a_1, c_1), (a_2, c_2) ... \} ai&lt;ajai&lt;aja_i iai + 1= (a私c私+a私- 1 )+ 1 ⇒a私| ai + 1ai+1=(aici+ai−1)+1⇒ai|ai+1a_{i+1} = (a_ic_i + …

1
ハノイの塔、ただし任意の初期および最終構成
最近、ハノイの塔のバリエーションであるこの問題に遭遇しました。 問題文: よく知られている問題、ハノイの塔の次のバリエーションを考えてみましょう。 我々は、与えられたタワーおよびサイズのM個のディスク1 、2 、3 、... 、Mいくつかの塔の上に積層します。あなたの目的は、管理できる限り少ない移動ですべてのディスクをk 番目のタワーに転送することですが、次のルールを考慮します。nnn1,2,3,…,m1,2,3,…,m1,2,3,\dots,mkthkthk^{\text{th}} 一度に1つのディスクのみを移動し、 大きいディスクを小さいディスクに移動しないでください。 最大で距離でタワー間のみを移動する。ddd (元の問題で制限: 及びM ≤ 100テストケースの数。≤ 1000年すべての問題は以下で解決することができると仮定することができる。 20000移動します。)3≤n≤10003≤n≤10003 \le n \le 1000m≤100m≤100m \le 100≤1000≤1000\le 1000200002000020000 面白いですね。ハノイ問題の古典的なタワーには、ソース、宛先、およびディスクをソースから宛先に移動するために使用される一時的なタワーがあります。そのサイトで提案された問題には、基本的に初期構成と最終構成があります。 この問題にどのように取り組みますか?

1
有向グラフのst(単純)パスの平均長
事実、所与の -パス列挙には効率的な方法があるかもしれません、#はP完全問題である計算(または少なくとも近似)の平均長さ -パスそれらを列挙することなく?パスが頂点を再訪することが許可されている場合はどうなりますか?ssstttsssttt 特別なグラフの関連する結果も参考になります。

1
写真の日差しを検出する方法
特定の写真について、写真を撮ったときに太陽が輝いていたかどうかをアルゴリズムでどのように検出しますか? 例 山頂にあるこのウェブカメラのサンプル: 明らかに太陽が輝いています。 この他のサンプルでは、​​それほど明白ではありません。 中央の礼拝堂にある小さな教会の尖塔を特定しようとすることで、霧がかかっているかどうかはかなり簡単に検出できるでしょう。しかし、画像処理についてほとんど何も知らないので、日光があるかどうかを確実に判断できるアルゴリズム(の組み合わせ)があったとしても驚きます。

2
プレイヤーが遅れて参加したときの公平なケーキカット
公平なケーキカット問題に関する通常の声明では、人のプレーヤー全員が同時にシェアを獲得すると想定しています。ただし、多くの場合、プレーヤーは段階的に到着します。たとえば、ケーキをn人のプレーヤーに分割する場合がありますが、新しいプレーヤーが到着し、シェアを求めています。んnnんnn 通常、フェアケーキの分割には多くの労力が必要です(たとえば、プレーヤーの数が多い場合は、プレーヤーが多くのクエリに回答する必要があります)。 追加の労力を最小限に抑えて(つまり、ケーキを最初から再配布するよりも大幅に少ない労力で)、n + 1プレイヤーにケーキの新しい区分を作成するために、プレイヤー以上の既存のケーキ区分を使用することは可能ですか?んnnn + 1n+1n+1

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