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

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

4
線形時間でスーパースターを見つける方法は?
有向グラフを検討してください。ノードから他のノードに到達できないが、他のすべてのノードにへのエッジがある場合にのみ、ノードスーパースターを呼び出します。正式に:vvvv vvv \qquad \displaystyle v superstar :⟺outdeg(v)=0∧indeg(v)=n−1 superstar :⟺outdeg(v)=0∧indeg(v)=n−1 \text{ superstar } :\Longleftrightarrow \mathrm{outdeg}(v) = 0 \land \mathrm{indeg}(v) = n-1 グラフ内のノードの数。たとえば、下のグラフでは、塗りつぶされていないノードはスーパースターです(他のノードはそうではありません)。nnn [ ソース ] 時間で有向グラフのすべてのスーパースターをどのように識別できますか?適切なグラフ表現は、通常の候補から選択できます。問題の複雑さを前処理に移す表現の使用は控えてください。O(n)O(n)\mathcal{O}(n) 密度に関する仮定はできません。グラフにスーパースターが含まれているとは想定していません。存在しない場合、アルゴリズムはそれを認識する必要があります。 表記法:はノードの発信エッジの数であり、は着信エッジでも同様です。、I 、N 、D 、E 、Goutdegoutdeg\mathrm{outdeg}indegindeg\mathrm{indeg}

6
要素の繰り返しなしでペアのセットから組み合わせを生成する
ペアのセットがあります。各ペアの形式は(x、y)で、x、yは範囲の整数に属します[0,n)。 したがって、nが4の場合、次のペアがあります。 (0,1) (0,2) (0,3) (1,2) (1,3) (2,3) 私はすでにペアを持っています。次に、n/2整数が繰り返されないようにペアを使用して組み合わせを作成する必要があります(つまり、各整数は最終的な組み合わせで少なくとも1回出現します)。理解を深めるための正しい組み合わせと間違った組み合わせの例を次に示します 1. (0,1)(1,2) [Invalid as 3 does not occur anywhere] 2. (0,2)(1,3) [Correct] 3. (1,3)(0,2) [Same as 2] ペアができたら、可能性のあるすべての組み合わせを生成する方法を誰かが提案できますか?

7
BFS / DFSを使用して木の直径を見つけるアルゴリズム。なぜ機能するのですか?
このリンクは、BFS / DFSを使用して無向木の直径を見つけるためのアルゴリズムを提供します。要約: グラフ内のノードsでBFSを実行し、最後に検出されたノードuを記憶します。最後に検出されたノードvを思い出して、uからBFSを実行します。d(u、v)は木の直径です。 なぜ機能するのですか? このページ2には理由がありますが、混乱を招きます。証明の最初の部分を引用しています: グラフ内のノードsでBFSを実行し、最後に検出されたノードuを記憶します。最後に検出されたノードvを思い出して、uからBFSを実行します。d(u、v)は木の直径です。 正しさ:d(a、b)が木の直径になるように、aとbを2つのノードとします。aからbへの一意のパスがあります。tをBFSによって検出されたそのパス上の最初のノードとします。sからuへのパスとaからbへのがエッジを共有しない場合、tからuへのパスにはsが含まれます。そうp1p1p_1p2p2p_2 d(t,u)≥d(s,u)d(t,u)≥d(s,u)d(t,u) \ge d(s,u) d(t,u)≥d(s,a)d(t,u)≥d(s,a)d(t,u) \ge d(s,a) ....(さらに不等式が続きます..) 不平等は私には意味がありません。

2
スーパーマーケットで妻を見つけるにはどうすればいいですか?
2人が迷路で迷子になった場合、どちらのアルゴリズムを使用するかを事前に合意することなく、お互いを見つけるために使用できるアルゴリズムはありますか? このアルゴリズムにはいくつかの特徴があると思います。 各人は、他の人が何を決定しているかについての仮定を行わないロジックを使用してそれを導出できる必要がありますが、各人は他の人が同じ位置にいることを知っているので、他の人が決定しなければならないものについて推論することができます。 状況に完全な対称性があるため、両方のユーザーが同一のアルゴリズムを導出する必要があります(どちらも相手の開始位置に関する知識がなく、迷路は固定サイズであり、両方によって完全にマップされます)。アルゴリズムは決定論的である必要はないことに注意してください:ランダム化することができます。

2
タイムスロットのブロックを売る
与えられたのタイムスロットがあることk個の人々が購入したいです。人が私は値有するH (I 、J )≥ 0を各タイムスロットのためにJ。各ユーザーは、空の可能性があるタイムスロットの連続したブロックを1つしか購入できません。nnnkkk私iiH (I 、J )≥ 0h(i,j)≥0h(i,j)\geq 0jjj 売り手が達成できる最大値を計算する多項式時間アルゴリズムはありますか? 連続性の制約がなければ、各タイムスロットを最も価値のある人に与えることができます。我々はのタイムスロットの順序固定場合にも、人々を、次いで、動的プログラミングは、最初の最大値を求めるために使用することができる0 ≤ I ≤ Kの最初の購入人0 ≤ J ≤ N個のタイムスロット。kkk0 ≤ I ≤ K0≤i≤k0\le i \le k0 ≤ J ≤ n個0≤j≤n0\le j \le n

4
グラフの直径を見つける時間の複雑さ
グラフの直径を見つける時間の複雑さは何 ですか?G=(V,E)G=(V,E)G=(V,E) O(|V|2)O(|V|2){O}(|V|^2) O(|V|2+|V|⋅|E|)O(|V|2+|V|⋅|E|){O}(|V|^2+|V| \cdot |E|) O(|V|2⋅|E|)O(|V|2⋅|E|){O}(|V|^2\cdot |E|) O(|V|⋅|E|2)O(|V|⋅|E|2){O}(|V|\cdot |E|^2) グラフの直径は、グラフ内のすべての頂点のペア間の最短パス距離のセットの最大値です。GGG 私はそれについて何をすべきか分かりません。このような問題を解決する方法について完全な分析が必要です。

2
手動でFFTを行う方法を示す
2つの多項式3+x3+x3 + xと2x2+22x2+22x^2 + 2ます。 FFTがこれら2つの多項式の乗算にどのように役立つかを理解しようとしています。ただし、解決された例は見つかりません。FFTアルゴリズムがこれら2つの多項式をどのように乗算するかを誰かが教えてくれますか。(注:これらの多項式には特別なものはありませんが、従いやすくするためにシンプルにしたかったのです。) 擬似コードでアルゴリズムを見てきましたが、それらのすべてに問題があるようです(入力の内容、未定義の変数を指定しないでください)。そして驚くべきことに、FFTを使用して多項式を乗算する例を、実際に誰が(手で)歩いたのか見つけることができません。

5
再帰を使用する場合
ループではなく再帰を使用する(比較的)基本的な(大学1年生のCSレベルの学生と考えてください)インスタンスはいつですか?

6
GCDにとって最も効率的なものは何ですか?
ユークリッドのアルゴリズムは、正の整数のリストのGCD(最大公約数)を取得するための最適なアルゴリズムであることを知っています。しかし実際には、このアルゴリズムをさまざまな方法でコーディングできます。(私の場合、Javaを使用することにしましたが、C / C ++が別のオプションである可能性があります)。 プログラムで可能な限り最も効率的なコードを使用する必要があります。 再帰モードでは、次のように記述できます。 static long gcd (long a, long b){ a = Math.abs(a); b = Math.abs(b); return (b==0) ? a : gcd(b, a%b); } 反復モードでは、次のようになります。 static long gcd (long a, long b) { long r, i; while(b!=0){ r = a % b; a = b; b = …

1
文字列内の最長の繰り返し(散乱)サブシーケンス
非公式の問題声明: ACCABBABACCABBABACCABBABなどの文字列が与えられたとき、左から右に赤い文字のみを読むと、読むのと同じ結果が得られるように、いくつかの文字を赤、いくつかの文字を青に色付けします。青い文字のみ。 例では、次のように色を付けることができますACCABBABACCABBABA\color{blue}{C}\color{red}{CAB}B\color{blue}{AB} したがって、CABCABCABは繰り返しサブシーケンスであると言いACCABBABACCABBABACCABBABます。また、最長の繰り返しサブシーケンスです(確認しやすい)。 最長の繰り返しサブシーケンスを効率的に計算できますか? 正式な質問: 文字列といくつかのkkkについて、長さ繰り返し部分シーケンスがkkk文字列に存在するかどうかを決定するのはNP困難ですか? その場合:どの問題をこの問題に減らすことができますか? そうでない場合:効率的なアルゴリズムとは何ですか?(明らかに、このアルゴリズムを使用して、最長の繰り返しサブシーケンスを計算できます) ボーナス質問: アルファベットのサイズが定数で制限されている場合、それらは常に長さ繰り返し部分シーケンスになりn/2−o(n)n/2−o(n)n/2 - o(n)ますか? (これはバイナリアルファベットに当てはまることが知られています。) 編集2:ボーナス質問に対する否定的な答えは、少なくとも文字のアルファベットで既に知られています555。実際、サイズがアルファベットの場合、長さが単に最も長い繰り返しサブシーケンスを持つ文字列があります。これを表示するには、ランダムな文字列で十分です。結果はすでに存在していましたが、見落としていました。ΣΣΣO(n⋅Σ−1/2)O(n·Σ−1/2)O(n · Σ^{-1/2}) 編集: 注: 一部の人々は、「サブシーケンス」と言うときに「サブストリング」を意味します。しません。これは、サブストリングを2回見つける問題ではありません。

3
無向グラフの最小カットを見つける
ここに私が解決しようとしている過去の試験からの質問があります: 無向グラフの 正の重みを有するW (E )≥ 0、Iは、最小カットを発見しようとしています。max-flow min-cut定理を使用する以外に、それを行う他の方法は知りません。しかし、グラフは無向であるため、どのように指示すればよいですか?両端にエッジを向けることを考えましたが、どの頂点がソースになり、どの頂点がシンクになりますか?または、最小カットを見つける別の方法はありますか?GGGw(e)≥0w(e)≥0w(e) \geq 0

7
アイテムを「均等に」配布するアルゴリズム
結果のリストが可能な限り「バランスの取れた」または「均等に分散」されるように、リストから値を分散するアルゴリズムを探しています(これらがそれを記述するための最良の方法であると確信していないため、引用符で...後で、結果が他の結果よりも良いかどうかを測定する方法を提供します)。 したがって、リストの場合: [1, 1, 2, 2, 3, 3] 値を再配布した後の最良の結果の1つは次のとおりです。 [1, 2, 3, 1, 2, 3] これと同じくらい良い結果が他にもあるかもしれません。もちろん、値のセットが不均一になると、より複雑になります。 これは、結果が他よりも優れているかどうかを測定する方法です。 各アイテムと同じ値を持つ次のアイテム間の距離を数えます。 その距離のセットの標準偏差を計算します。分散が低いほど、より良い結果が得られます。 観察: 距離を計算し、同じ値を持つアイテムを見つけることなくリストの最後に到達すると、リストの最初に戻ります。そのため、多くても同じアイテムが検出され、そのアイテムの距離はリストの長さになります。これは、リストが周期的であることを意味します。 典型的なリストには、さまざまな数量で最大15個の異なる値を持つ最大50個のアイテムがあります。 そう: 結果の[1, 2, 3, 1, 2, 3]場合、距離は[3, 3, 3, 3, 3, 3]であり、標準偏差は0;です。 結果の[1, 1, 2, 2, 3, 3]場合、距離は[1, 5, 1, 5, 1, 5]であり、標準偏差は2;です。 これにより、最初の結果が2番目の結果よりも良好になります(偏差が小さいほど良い)。 これらの定義を考慮して、どのアルゴリズムまたは戦略を検索すべきかの手がかりを求めます。

1
スプレイツリーローテーションアルゴリズムが親ノードと祖父母ノードの両方を考慮するのはなぜですか?
スプレーツリーデータ構造の回転が、評価ノードの親だけでなく、祖父母(zig-zagおよびzig-zig操作)も考慮している理由はよくわかりません。以下が機能しないのはなぜですか: たとえば、ツリーに新しいノードを挿入するときに、左または右のサブツリーに挿入するかどうかを確認します。左に挿入する場合、結果を右に回転させ、右のサブツリーに対して結果を右に回転させます。再帰的にこのようになります Tree insert(Tree root, Key k){ if(k < root.key){ root.setLeft(insert(root.getLeft(), key); return rotateRight(root); } //vice versa for right subtree } それは、「スプレイ」手順全体を回避するはずです、あなたは思いませんか?

9
コインを使用して均一に分布した乱数を生成する
コインが1つあります。何度でも反転できます。 ような乱数を生成します。ここで、です。rrra≤r&lt;ba≤r&lt;ba \leq r < br,a,b∈Z+r,a,b∈Z+r,a,b\in \mathbb{Z}^+ 数字の分布は均一でなければなりません。 あれば簡単です:b−a=2nb−a=2nb -a = 2^n r = a + binary2dec(flip n times write 0 for heads and 1 for tails) どのような場合?b−a≠2nb−a≠2nb-a \neq 2^n

3
並列化できないアルゴリズムはどれですか?
並列化が非常に困難なアルゴリズムはありますか、それとも研究はまだ活発ですか 並列計算のアルゴリズムや研究分野について知りたいと思いました。 私が検索したものはすべて、「並列」実装が完了しています。まだ調査されていない並列コンピューティングの分野で何らかの研究を行いたいだけです。

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