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

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

4
ノードxとyの間のグラフに単純なパスが1つだけあるかどうかを確認します `
単純な無向グラフを与えたとしましょう GGG有するノードと双方向のエッジを。与えられたとについて、グラフの間に単純なパスが1つしかないかどうかを確認します。NNNMMMxバツxyyy 私が考えていたのは、グラフ内のすべてのサイクルを見つけて、から bfsを実行する必要があるということです。パスがあるサイクルの頂点を通過しない場合、パスは1つだけで、それ以外の場合はそこにあります。以上です。xバツxyyy これを確認する他の方法はありますか?

2
平方根の合計が整数より小さいことを見つけるための多項式時間アルゴリズムはありますか?
与えられた:のリストんんn整数および整数。バツ1、バツ2、… 、バツんバツ1、バツ2、…、バツんx_1,x_2,\dots,x_nkkk 決定しますです?バツ−−√1+バツ−−√2⋯バツ−−√ん≤ Kバツ1+バツ2⋯バツん≤k\sqrt x_1 + \sqrt x_2 \cdots \sqrt x_n \le k 質問:上記の問題に対する多項式時間アルゴリズムはありますか?はいの場合、アルゴリズムを指定します。そうでなければそれを証明します。

1
1つのストリングのサブシーケンスで他のストリングのサブシーケンスではない
しましょう ΣΣ\Sigma アルファベットにしてみましょう x+,x−1,…,x−n∈Σ∗x+,x1−,…,xn−∈Σ∗x^+,x^-_1,\dots,x^-_n \in \Sigma^*そのアルファベットの文字列である。文字列を呼び出すs∈Σ∗s∈Σ∗s \in \Sigma^* 良ければsss のサブシーケンスです x+x+x^+ のサブシーケンスではない x−1,…,x−nx1−,…,xn−x^-_1,\dots,x^-_n。 与えられた x+,x−1,…,x−nx+,x1−,…,xn−x^+,x^-_1,\dots,x^-_n、私は最短の良い文字列を探しています sss。これに適したアルゴリズムはありますか?ワーストケースの実行時間がそれほど長くない場合でも、実用的なアルゴリズムに興味があります。私のドメインでは、文字列x+,x−1,…,x−nx+,x1−,…,xn−x^+,x^-_1,\dots,x^-_n かなり長いかもしれませんが、良い紐が存在すると思います sss それが役立つ場合、それはかなり短いです。 ケース n=1n=1n=1ある文字列の最下位サブシーケンスによって処理されます。これは別の文字列のサブシーケンスではありませんが、ケースに対処する必要がありますn>1n>1n>1。

1
多重継承オブジェクト指向言語でのメソッド解決のためのC3線形化アルゴリズム:実装の詳細の正当化の探求
この Pythonのメソッド解決順序(mro)、別名C3線形化の説明によれば、アルゴリズムは次のように再帰的に説明できます。 L(O) = <O> L(C) = <C> + merge(L(B1),..., L(Bn), <B1,...,Bn>) どこ O すべてのクラスが継承するクラスです。 Cは、、B1...、から直接Bnこの順序で継承するクラスです。 <および>リスト区切り文字です。 + リスト連結演算子です。 merge 以下で説明する方法で、そのリスト引数を単一のリストにマージします。 上記は単語で言い換えることができます(上記のPythonドキュメントから引用): Cの線形化は、Cと、親の線形化と親のリストのマージの合計です。 merge(本質的にPythonのドキュメントから引用したが、わずかに言い換え)以下のようなアルゴリズムが記載されています。 最初のリストの先頭、つまりL(B1)[0]を検討します。それが良い先頭である場合、つまり他のリストの適切な末尾にない場合は、Cの線形化に追加して削除しますマージのすべてのリストから。そうでない場合は、次のリストの頭などを検討します。クラスがなくなるか、頭がなくなるまで繰り返します。後者の場合、マージを構築することは不可能です。 次の例は、説明のためのものです。仮定Aから直接継承するBとC、このために、との線形化したとするBとCしています L(B) = <B, D, E, O> L(C) = <C, D, F, O> 次に、A線形化は L(A) = <A> + merge(<B,D,E,O>, <C,D,F,O>, <B,C>) = <A, B> + …

2
範囲内の文字列内の異なる部分文字列の数
文字列の長さが、LCP配列を使用すると、個別の部分文字列の数を線形時間で見つけることができます。文字列全体で一意の部分文字列の数を求める代わりに、インデックスを含むクエリ、が、文字列指定されたクエリ範囲内の異なる部分文字列の数を求めます。。SSSnnnSSSqqq(i,j)(i,j)(i,j)0≤i≤j&lt;n0≤i≤j&lt;n0 \le i \le j < nS[i..j]S[i..j]S[i..j] 私のアプローチは、LCP配列の線形時間構築を各クエリに適用することです。複雑さを与えます。クエリの数はオーダーに増加する可能性があるため、すべてのクエリに応答するとます。O(|q|n)O(|q|n)O(|q|n)nnnO(n2)O(n2)O(n^2) すべてのクエリの線形時間よりも、それを行うことができますか? 一般に、サフィックス配列、サフィックスツリー、lcp配列がすでにある文字列の1つのプロセスサブ文字列がそれらの構造に関連しなくなった場合、もう一度最初から構築する必要がありますか?

2
配列の要素が同じ回数繰り返されるかどうかを判断するアルゴリズムの正確さの証明
タイトルが長かったことをお詫びしますが、内容についての情報が欠けているので、どうやって別の書き方をするのか本当にわかりませんでした。 最近、並列アルゴリズムに関する大学の試験を受けました。1つの演習で、配列の要素(これを呼び出すとしましょうA)が同じ回数繰り返されているかどうかを判断するアルゴリズムを作成するように求められました。 例えば: 1)A = 1 8 8 1 8 1 1 8:答えは「はい」です。すべての数値が2回繰り返されます。 2)A = 7 8 8 5 5 4 7 8:答えはノーです。 並列計算の特定のモデルであるPRAMのアルゴリズムを作成する必要がありました。このモデルでは、読み取り/書き込みの競合やその他の問題を回避するためにいくつかの手法を使用する必要がありましたが、これは関係ありません。私が最終的に得たのは、新しい配列でしたB。それを次のように定義できます。Given the array A, B[i] contains the number of repetitions of the element A[i] within A. 例えば: 1) A = 1 8 8 1 8 1 1 …

1
連続した出力からPRNGの説明を復元する
疑似乱数ジェネレータの出力を考えて、タイプ(たとえば、線形フィードバックシフトレジスタ)、乗算付きキャリー、線形合同ジェネレータなど)をどのように決定し、関数とシードを回復できますか? 与えられた数の配列は確かにPRNGによって生成されます(暗号的に安全ではありません)。これは事前にわかっています。出力はクリーンで、PRNGは連続した数値を返すブラックボックスです(変更なし、スキップされた値なし)。次に、タスクは値から関数とシードを見つけることです。 単純なアイデアは、一致が見つかるまですべてのスキームを試すことですが、よりアルゴリズム的なアプローチに興味があります。

1
最小線形配置の分岐および境界
私はこのブランチとバウンドの問題を解決しようとしていますが、コストよりも優れたおおよそのコスト関数を思い付くことができませんでした。 まあ言ってみれば GGG のグラフです んnn ノード { 1 、2 、3 、... 、N }{1,2,3,…,n}\{1, 2, 3, \ldots , n\}。順列のためにfff のノードの GGG、各エッジの重み (x 、y)(x,y)(x,y) になります | f(x )− f(y)||f(x)−f(y)||f(x)-f(y)|。総重量GGGエッジの重みの合計になります。あなたは考えることができますfff のノードの再ラベル付けとして GGG、 どこ f(x )f(x)f(x) ノードの新しいラベルです バツxx。 順列を見つけようとしています fff その結果、最小総重量は GGG。 これを解決しようとすると、私が思いつくことができるのは、これまでに完了した各エッジの重みの合計であるおおよそのコスト(バックトラックツリーノードごとに)を見つけ、最小コストノードから続行することだけです。誰かがより良い近似式で私を助けてくれるかどうか疑問に思っています。

1
長方形の構築サイクル
固定長サイクルを構築する必要があります。これには、 x長方形の内側にコーナーが含まれます。nnnkkkwwwhhh 例: w=5h=3w=5h=3w = 5\\h=3 n=12k=6n=12k=6n = 12\\k = 6 少なくともコーナーが必要であり、コーナーの数と非コーナー要素の数は偶数である必要があることはすでにわかっています。444 次に、指数関数的な時間の複雑さで実行される再帰的アルゴリズムを記述しますが、この処理をはるかに高速に実行できるという強い思いがあります。 問題は、どの正方形がサイクルに確実に含まれるかわからないため、すべての可能性をカバーするために最初のフィールドでアルゴリズムを実行することですが、いくつかのブランチを複数回検索していることを認識しています。w2w2\frac w2 また、サイクルが存在する場合、サイクルが(0、0)のコーナーまたは(0、1)のコーナーで始まることも発見しました このことをスピードアップする方法について誰かがアイデアを持っていますか? ごきげんよう!

2
DAGにエッジを追加するとサイクルが発生するかどうかを確認する
初めに:これはプログラミングコンテストの問題ですが、進行中の問題ではありません。残念ながら、公開されていないため、このタスクへのリンクは提供できません。それは、2011年にワルシャワコンピュータサイエンススクールが主催したポーランドのローカルプログラミングコンテストの1つからのものでした。 エッジのない頂点のあるグラフと、有向エッジのリストがあります。上の番目の第番目のエッジグラフに追加されています。グラフに1秒後にサイクルが発生することを知りたい。VVV (1≤V≤5⋅105)(1≤V≤5⋅105)(1 \le V \le 5 \cdot 10^5)EEE (1≤E≤5⋅105)(1≤E≤5⋅105)(1 \le E \le 5 \cdot 10^5)iiiiii 最も明白な解決策は、各エッジを追加した後にDFSを実行することですが、時間かかります。別の解決策は、トポロジー的にソートされたグラフを維持し、エッジを追加するときに、トポロジーの順序を乱さないように配置することです。これには最大で時間かかります。私はGoogleでいくつかの調査を行いましたが、これが最速のオンラインアルゴリズムのようです。O((V+E)2)O((V+E)2)O((V + E)^2)O(V2)O(V2)O(V^2) 事前にすべてのエッジを知っているので、オフラインアルゴリズムを使用できます。私が考えることができる最速のオフラインアルゴリズムは、バイナリ検索です。番目の2番目以降のグラフにサイクルが含まれている場合、明らかに他の2番目のサイクルがあります。したがって、バイナリ検索を実行してDFS時間を実行することで最小のを見つけることができます。それぞれが時間を費やすため、このソリューションの全体の複雑さは。kkkl≥kl≥kl \ge kkkkO(logE)O(log⁡E)O(\log E)O(V+E)O(V+E)O(V + E)O((V+E)logE)O((V+E)log⁡E)O((V + E) \log E) かなり高速ですが、もっと高速なオフラインアルゴリズムはあるのでしょうか。私が考えることができる1つのことは、このエッジがグラフに追加された時間に等しい各エッジの重みを与えることです。次に、このタスクは、最小の最大エッジウェイトを持つサイクルを見つけることと同じです。それがどこにつながっているかはわかりません。

1
長方形包含階層DAGの推移的な削減
私は、長方形包含階層DAGの推移的な削減を見つけるためのアルゴリズムを探しています。つまり、最初の長方形に2番目の長方形が含まれている場合、1つの長方形から別の長方形への有向エッジが存在します。O(|V|+|E|)O(|V|+|E|)O(|V| + |E|) つまり、できるだけ多くのエッジを削除して、uからvに到達できた場合、任意のvとuについて、エッジを削除した後でも到達できるようにします。 四角形は一意であると想定して、DAGを処理します。 これは、たとえば、Srikant / Agrawal 1996からの量的相関ルールマイニングで役立ちます。ここでは、超矩形の祖先に関心があります。近い祖先を決定することは、近い子孫を決定することに似ています。この種のルールマイニングは、Agrawal / Srikant 1994による標準(つまり「ブール」)相関ルールマイニングのAPRIORIアルゴリズムに関連しています。 同様の問題は、標準のDAGの推移的な削減です。これは次のとおり です。DAGの推移的な削減 参考文献 Agrawal、Srikant-相関ルールをマイニングするための高速アルゴリズム(1994) Agrikal、Srikant-大規模なリレーショナルテーブルでの量的相関ルールのマイニング(1996)

1
nセットの2つのセットを指定:移動距離の合計を最小化
2セット S、TS、TS, T それぞれの んんn内のポイント、私は全単射を見つけたい、は最小化され、はユークリッド距離。RkRk\mathbb{R}^ka :S→ Ta:S→Ta : S \rightarrow TΣS ∈ Sd(s 、a (s ))Σs∈Sd(s、a(s))\sum_{s \in S} d(s, a(s))ddd この輸送問題はアースムーバーの距離問題の特殊なケースであることは承知していますが、重み付けされていない(ポイントを超えている)ため、3次ハンガリー方式よりも効率的なアルゴリズムがあるかどうか疑問に思っています。

1
部分ソートは配列のルックアップコストに役立ちますか?
並べ替えられていないリストで何かを調べることは、時間の複雑さ伴うタスクです。ただし、リストがソートされている場合、時間の複雑さはです。つまり、配列を並べ替える価値がある場合があります。ただし、ソートアルゴリズムの時間の複雑さはであるため、これはトレードオフです。O (n )O(n)O(n)O (ログ(n ))O(log⁡(n))O(\log(n))O (n ログ(n ))O(nlog⁡(n))O(n\log(n)) 私の知る限り、配列を 時間未満でソートすることはできません。しかし、それよりも短い時間で部分的に配列をソートできるアルゴリズムがあるかどうか疑問に思っていますか?私はあなたが時間でそのような部分的にソートされた配列の値を検索できないと確信していますが、よりもうまくできますか?O (n ログ(n ))O(nlog⁡(n))O(n\log(n))O (ログ(n ))O(log⁡(n))O(\log(n))O (n )O(n)O(n) つまり、よりも高速なアルゴリズムでソートされていない配列を処理して、ルックアップアルゴリズムがよりも高速に検索できるようにすることは可能ですが、ほど高速ではありません?O (n ログ(n ))O(nlog⁡(n))O(n\log(n))O (n )O(n)O(n)O(log(n))O(log⁡(n))O(\log(n))

1
ガリルの法則はボイヤー・ムーアアルゴリズムでどのように機能しますか?
ガリルのルールを使用したボイヤー・ムーアのテキスト検索アルゴリズムがどのように機能するかを知りたいのですが。検索を試みましたが、このWikipediaページなど、見つけた情報を理解できませんでした。そして、なぜこのルールで線形時間の複雑さを実現するのでしょうか?

2
簡略化された最大多様性問題
最大多様性問題は、選択を要求します メートルメートルm リストのアイテム んんn アイテム間のメトリック距離として定義される多様性が最大化されるようなアイテム。 私はもっ​​と簡単な方法で問題を解決できると思っていました。私の場合、私はリストを持っていますんんnそれぞれが特定の一意でないキーを持つアイテム。選びたいメートルメートルmキーごとのアイテムの最大数が最小化されるように、私のリストのアイテム。 たとえば、私のリストが: ('a', 5), ('b', 4), ('c', 2), ('a', 6), ('b', 5) そして、私たちは選択しなければなりません m = 3メートル=3m=3 アイテムの場合、最適なソリューションは、キーごとに1つのアイテムを含むリストです。 これを行うためのアルゴリズムは、最大多様性問題のアルゴリズムよりも簡単ですか?

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