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

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

5
要素の最大のセットを見つける方法
アルゴリズムに問題があります。 TTTnnnSSSTTTA ∈ Sa∈Sa\in Sa⩾|S|a⩾|S|a\geqslant |S| 例えば: 場合 = [1、3、4、1、3、6]、その後、、[3,3]、[6]又は[3、4、6]又は[4、3、6]とすることができます。STTTSSS で = [7,5、1、1,7、4]、次いで [7、5,7、4]です。STTTSSS この再帰関数を試しました。 function(T): if minimum(T) >= length(T): return T else: return function(T\minimum(T)) 非再帰的なアルゴリズムはありますか?(再帰アルゴリズムをチェックしなかったため、いくつかの欠陥がある可能性があります。)

2
バイナリ検索と補間検索の組み合わせの背後にある研究や理論はありますか?
私は読んで、このアルゴリズムはまだバイナリ検索アルゴリズムとみなすことができるの?数年前、ログファイルのインデクサー/検索を作成して、日付/時刻ウィンドウごとに大きなプレーンテキストファイル内のログエントリを見つけることを思い出しました。 これをしている間、私は補間検索を試すことにしました(それがそれが何であるかわからなかったので、自分でアイデアを見つけました)。その後、何らかの理由で、補間ステップとバイナリ分割ステップを交互に行うというアイデアを続けました。ステップ0では、テストポイントを決定するために補間し、ステップ1では正確な中間点などを取得します。 次に、純粋な補間検索、純粋なバイナリ検索、および組み合わせの試行を使用して、システムのベンチマークを行いました。交互アプローチは、時間とランダムに選択された時間のセットを見つける前に必要なテストの数の両方で明確な勝者でした。 リンクされた質問に触発されて、「代替補間検索とバイナリ検索」をすばやく検索したところ、何も見つかりませんでした。答えの1つに対するコメントで示唆されているように、「ヘッジ補間検索」も試しました。 既知のものにつまずいたことがありますか?特定の種類のデータに対して高速であるという理論的な正当性はありますか?通常、ログファイルはその間は大きく(たとえば、検索する1,000万行の1-2 GBのテキスト)、その中の日付/時間の広がりは、アクティビティの激しいバースト、一般的なピーク時間、および静かな時間で複雑でした。私のベンチマークテストは、検出するターゲット時間の均等な分布からサンプリングしました。

1
コンビナトリアルILPアルゴリズムの既知の最速の複雑さ?
整数線形計画法を解くための、Big表記法で最もよく知られているアルゴリズムは何ですか?OOO 私は問題が完全であることを知っているので、多項式を期待していません。そして、CPLEXのような実際のアプリケーションで使用される多くのヒューリスティックとそのようなものがあることは知っていますが、厳密なアルゴリズムの形式的な最悪の場合の複雑さにもっと興味があります。NPNPNP 一部の完全問題には、時間アルゴリズムがありますおよびは多項式です。頂点カバー、独立セット、および3SATはこのカテゴリに分類されますが、一般的なSATおよびTSPは(私たちが知る限り)分類されません。O (b n p (n ))1 &lt; b &lt; 2 pNPNPNPO (bnp (n ))O(bnp(n))O(b^n p(n))1 &lt; b &lt; 21&lt;b&lt;21 < b < 2ppp 整数プログラミング、または特定のサブインスタンスについて、そのようなステートメントを作成できますか? Quantifier Free Presburger Arithmeticに関連する問題の参照先があれば、それにも非常に興味があります。

6
間隔内の2つの数値の最大XORを見つける:二次式よりも良いことはできますか?
lllrrr L ≤ I 、最大(I ⊕ J )最大(私⊕j)\max{(i\oplus j)}L ≤ I 、J ≤ Rl≤私、j≤rl\le i,\,j\le r ナイーブアルゴリズムは、考えられるすべてのペアを単純にチェックします。たとえば、ルビーでは次のようになります。 def max_xor(l, r) max = 0 (l..r).each do |i| (i..r).each do |j| if (i ^ j &gt; max) max = i ^ j end end end max end 私感私たちはより良い次より行うことができます。この問題のためのより良いアルゴリズムはありますか?

3
子猫の養子縁組問題の複雑さ
これは、配線長の最小化に関するこの質問に答えようとしているときに出てきました 。私はこれを「一夫多妻結婚」の問題と呼びましたが、インターネットは子猫です。わーい! 人が採用する必要がある子猫があるとします。各子猫、、および各人には、コストます。すべての子猫を養子にするための総費用を最小限に抑えたいと思います。制約のセットもあります:各人は、子猫をまでしか採用できません。N M &gt; N i j c i j j u jMMMNNNM&gt;NM&gt;NM > Niiijjjcijcijc_{ij}jjjujuju_j 制約がなければ、問題は簡単です。各子猫人で行くれる最小です。制約があるため、この問題に対して効率的なアルゴリズムがありますか、それともNP困難ですか?j c i jiiijjjcijcijc_{ij}

4
ソートアルゴリズムには推移性が必要ですか
非推移的比較でソートアルゴリズムを使用することは可能ですか?はいの場合、なぜコンパレーターをソートするための要件として推移性がリストされていますか? バックグラウンド: ソートアルゴリズムは、通常、コンパレータ関数C(x、y)に従ってリストの要素をソートします。 C(x 、y)= ⎧⎩⎨− 10+ 1もし X≺Y もし X〜Y もし X≻Y C(バツ、y)={−1もし バツ≺y0もし バツ〜y+1もし バツ≻y\begin{array}{ll} C(x,y) = \begin{cases} -1 & {\text{if}}\ x\prec y \\ 0 & {\text{if}}\ x\sim y \\ +1 & {\text{if}}\ x\succ y \\ \end{cases} \end{array} 私が理解している限り、このコンパレータの要件は次のとおりです。 再帰的: ∀ X :C(x 、x )= 0∀バツ:C(バツ、バツ)=0\forall x: C(x,x)=0 …

4
2つの大きなセット間のセットの差の計算
整数と 2つの大きなセットがあります。各セットには約100万のエントリがあり、各エントリは最大10桁の正の整数です。 BAAABBB およびを計算する最適なアルゴリズムは何ですか?つまり、ないのエントリのリストを効率的に計算するにはどうすればよいですか?これらの操作を効率的にするために、これら2つのセットを表すのに最適なデータ構造は何でしょうか?B ∖ A A BA ∖ BA∖BA\setminus BB ∖ AB∖AB\setminus AAAABBB 私が思いつく最良の方法は、これらの2つのセットをソート済みリストとして保存し、のすべての要素をすべての要素と線形に比較することです。もっと良くできますか?BAAABBB

2
ユークリッド平面に埋め込まれたグラフの最短非交差パス(2D)
経路に自己交差が含まれないように、ユークリッド平面に埋め込まれたグラフの最短経路を見つけるためにどのアルゴリズムを使用しますか? たとえば、次のグラフでは、ます。通常、ダイクストラのアルゴリズムのようなアルゴリズムは、次のようなシーケンスを生成します。(0 、0 )→ (- 3 、2 )(0、0)→(−3、2)(0,0) \rightarrow (-3,2) [(0 、0 )→3(0 、3 )→2√(1 、2 )→4(- 3 、2 )] = 7 + 2–√。[(0、0)→3(0、3)→2(1、2)→4(−3、2)]=7+2。\left[ (0,0) \stackrel {3}{\rightarrow} (0,3) \stackrel{\sqrt{2}}{\rightarrow} (1,2) \stackrel{4}{\rightarrow} (-3,2) \right] = 7+\sqrt{2}. 完全なグラフ: 最短経路: 最短の非交差パス: しかし、ユークリッド平面上のこのパスが交差自体は、それゆえ私はしたい、この場合には、私の最短非交差シーケンスを与えるアルゴリズムを: [(0 、0 )→3(0 、3 )→3(0 、6 )→5(- 3 、2 )] = …

1
ペアワイズ和のFFTなしの
仮定し、私たちは、与えられたの異なる整数はように、いくつかの定数の、およびすべてのための。1、2、... 、nは 0 ≤ I ≤ K N K &gt; 0 Innna1,a2,…,ana1,a2,…,ana_1, a_2, \dots, a_n0≤ai≤kn0≤ai≤kn0 \le a_i \le knk&gt;0k&gt;0k \gt 0iii 可能なすべてのペアワイズ和のカウントを見つけることに興味があります。(が許可されます)。 i = jSij=ai+ajSij=ai+ajS_{ij} = a_i + a_ji=ji=ji = j 1つのアルゴリズムは、次数の多項式をし、フーリエ変換法を使用してその平方を計算し、結果の多項式の係数。これは、時間アルゴリズムです。 ≤ K N O (N ログN )P(x)=∑nj=1xajP(x)=∑j=1nxajP(x) = \sum_{j=1}^{n} x^{a_j}≤kn≤kn\le knO(nlogn)O(nlog⁡n)O(n \log n) 2つの質問があります。 そこで FFTを使用していないアルゴリズムは?O(nlogn)O(nlog⁡n)O(n \log n) …

1
有向非巡回グラフの推移閉包を取得するための効率的なアルゴリズム
グラフの問題を解決しようとしています(宿題ではなく、単にスキルを練習するためです)。DAGが与えられます。ここで、は頂点のセット、はエッジです。グラフは隣接リストとして表されるため、はすべての接続を含むセットです。私の仕事は、各頂点から到達可能な頂点を見つけることです。私が使用するソリューションは複雑さを持ち、 推移的閉包を持ちますが、ブログで読むと高速になる可能性がありますが、方法は明らかになりませんでした。DAGの推移的閉包問題を解決する別の方法(より複雑な方法)を教えてもらえますか?G(V,E)G(V,E)G(V,E)VVVEEEAvAvA_vvvvv∈Vv∈Vv\in VO(V3)O(V3)O(V^3)

2
Bellman-Fordアルゴリズム-エッジを順不同で更新できるのはなぜですか?
ベルマン-フォード法は、ソースからの最短経路決定他のすべての頂点にします。最初にと他のすべての頂点間距離は設定されます。次に、から各頂点まで最短パスが計算されます。これは、回の反復で続き ます。私の質問は:秒∞ 秒| V | − 1ssssss∞∞\inftysss| V| −1|V|−1|V|-1 なぜ回の反復が必要なのですか?| V| −1|V|−1|V|-1 別の順序でエッジをチェックした場合、問題になりますか? たとえば、最初にエッジ1、2、3をチェックしてから、2回目の反復で2、3、1をチェックするとします。 MITのEric教授は順序は重要ではないと言ったが、これは私を混乱させる:値がエッジに依存しているがが後に更新される場合、アルゴリズムはエッジ基づいてノードを誤って更新しないか?x 1 x 1 x 2バツ2バツ2x_2バツ1バツ1x_1バツ1バツ1x_1バツ2バツ2x_2

2
類似度の設定-二次複雑性なしでJaccardインデックスを計算
n個のセットのグループがあり、それらに対して「一意性」または「類似性」の値を計算する必要があります。適切な指標としてJaccardインデックスに決めました。残念ながら、Jaccardインデックスは一度に2つのセットでのみ動作します。すべてのセット間の類似性を計算するには、 Jaccard計算の順序で必要になります。nnnn2n2n^2 (それが役立つ場合、は通常10と10000の間であり、各セットには平均500個の要素が含まれます。また、最終的に、2つの特定のセットがどれだけ似ているかは気にしません-むしろ、内部の類似性だけを気にしますセットのグループ全体の(つまり、グループ内のすべてのJaccardインデックスの平均(または少なくとも平均の十分に正確な近似))nnn 2つの質問: 複雑さなしでJaccardインデックスを使用する方法はありますか?n2n2n^2 上記で提案した方法よりも、セットのグループ全体でセットの類似性/一意性を計算するより良い方法はありますか?

2
ランダム化アルゴリズムの分類
ウィキペディア乱択アルゴリズムについて 予想される実行時間またはメモリ使用量を減らすためにランダム入力を使用するアルゴリズムを区別する必要がありますが、限られた時間内で常に正しい結果で終了します。また 、ランダム入力に応じてチャンスがある確率的アルゴリズム間違った結果を生成する(モンテカルロアルゴリズム)または失敗を通知するか終了しないことで結果を生成しない(ラスベガスアルゴリズム)。 最初の種類のアルゴリズムでは、ランダム入力を使用して、予想される実行時間またはメモリ使用量を削減しますが、制限された時間内に正しい結果で常に終了する方法を疑問に思いましたか? 結果の生成に失敗する可能性があるラスベガスアルゴリズムとラスベガスアルゴリズムの違いは何ですか? 正しく理解すれば、確率的アルゴリズムとランダム化アルゴリズムは同じ概念ではありません。確率的アルゴリズムはランダム化アルゴリズムの一種であり、他の種類はランダム入力を使用して予想実行時間またはメモリ使用量を削減しますが、制限された時間内に常に正しい結果で終了しますか?

3
Insert、Delete、MostFrequentをサポートする効率的なデータ構造
セットあり、各メンバーがデータとキーのペアであると仮定します。次の操作をサポートするデータ構造が必要です。DDDDDDD にを挿入し、D(d,k)(d,k)(d,k)DDD メンバー削除します(を見つけるために検索する必要はありません。たとえば、はメンバーを指します)。e e DeeeeeeeeeDDD MostFrequentは、が最も頻度の高いキーの1つであるようなメンバーを返します(最も頻度の高いキーは一意である必要はありません)。E 。k e y De∈De∈De \in De.keye.keye.keyDDD このデータ構造の効率的な実装は何でしょうか? 私の解決策は、キーとその周波数によって優先順位付けされた周波数のヒープと、ハッシュ関数が同じキーを持つメンバーをハッシュテーブルの同じスロットにマップするハッシュテーブルです(各部分から他へのポインターを使用)。 これにより、最初の2つの操作にが、3番目の操作(最悪の場合の実行時間)にられます。Θ (1 )Θ(lgn)Θ(lg⁡n)\Theta(\lg n)Θ(1)Θ(1)\Theta(1) より効率的な解決策があるのだろうか?(または同じ効率のよりシンプルなソリューション?)

1
反転ペアのカウント
分割統治の古典的な用途は、次の問題を解決することです。 アレイ所与対:異なる、同等の要素をアレイ状に反転ペアの数をカウントし、ようにと。(i 、j )a [ i ] &gt; a [ j ] i &lt; ja [ 1 … n ]a[1…n]a[1\dots n](i 、j )(i,j)(i,j)a [ i ] &gt; a [ j ]a[i]&gt;a[j]a[i] \gt a[j]i &lt; ji&lt;ji \lt j これに対する1つのアプローチは、マージソートを実行することですが、副問題の反転ペアの数もカウントします。マージステップ中に、2つのサブ問題にまたがる反転ペアの数をカウントし、サブ問題のカウントに追加します。 これは良いですが、時間アルゴリズムを提供しますが、これは配列を台無しにします。O (n ログn )O(nlog⁡n)O(n\log n) 我々は追加の制約がある場合は、アレイは、読み取り専用であることを、我々はコピーでコピーして取引をする、またはカウントを行うために、バイナリツリーをバランス順序統計のような追加のデータ構造を使用し、どちらも使用することができますスペース。Θ (n )Θ(n)\Theta(n) 現在の問題は、実行時間に影響を与えずに、スペースを改善することです。すなわち 反転ペアの数をカウントする時間アルゴリズムはありますか。これは読み取り専用配列で機能し、サブリニア(つまり)スペースを使用しますか?o (n )O …

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