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

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

1
2つのセットから最大の選択肢を計算するアルゴリズムはどれですか。
長さが等しくない可能性のある2つの整数のベクトルが与えられた場合、2つのベクトル間の対応する数のペアの間の最大値を選択して累積し、サイズの違いを補うために短いベクトルに追加のゼロを挿入して、可能な最大結果をどのように決定できますか? たとえば、次の2つのベクトルを入力として考えます。 [8 1 4 5] [7 3 6] ゼロと結果の合計を挿入するための選択肢は次のとおりです。 [0 7 3 6] => Maximums: [8 7 4 6] => Sum is: 25 [7 0 3 6] => Maximums: [8 1 4 6] => Sum is: 19 [7 3 0 6] => Maximums: [8 3 4 6] => Sum …

3
さまざまなトピックに関するアルゴリズムの本
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細がない回答は、編集または削除できます。 私は私たちの小さな会社(約15人)のためのアルゴリズムに関する本のライブラリを構築する任務を負っています。予算は5kを超えていますが、確かに10k未満なので、かなりの数の本を購入できます。ここにいるすべての人は、CSまたは密接に関連する分野で少なくとも学士号を取得しているため、Cormenのような基本的な教科書を入手しますが、より高度なトピックに関する優れた本に興味があります。(ちなみに、Knuthの4巻を入手します。) トピックのリストは次のとおりです。 並べ替えアルゴリズム グラフアルゴリズム 文字列アルゴリズム ランダム化されたアルゴリズム 分散アルゴリズム 組み合わせアルゴリズム 等 本質的に私は、アルゴリズムとデータ構造に関連するCS内の主要なトピックに関する本の良い推薦を探しています。特に、良い学校の学士号の一部として、アルゴリズムとデータ構造のクラスで通常カバーされているものを超えるもの。一般的に有用な資料を探しているので、質問はかなりあいまいです。私たちが開発するソフトウェアは、主に大量のデータを処理するシステムレベルのものです。 理想はまた、ほとんどの人が聞いたことがないかもしれないかなり最近のクールなデータ構造とアルゴリズムをカバーするものを見つけることです。 編集:ここに私が入手する必要があると思う予備的な本があります: コーメン他によるアルゴリズムの紹介。 クラインバーグ、タルドスによるアルゴリズム設計 Art of Computer Programming Vol 1-4、Knuth著 Vaziraniによる近似アルゴリズム ウィリアムソン、Shmoysによる近似アルゴリズムの設計 Motwani、Raghavanによるランダム化アルゴリズム Sipserによる計算理論の紹介 アローラ、バラクによる計算の複雑さ ギャリーとジョンソンによるコンピュータと扱いにくさ Schrijverによる組み合わせ最適化 言語設計、コンパイラ、および形式的手法の技法とアルゴリズムを扱う、同僚が欲しかった他のいくつかの本は次のとおりです。 Pierceによる型とプログラミング言語 加藤園バイエルによるモデル検査の原則 コンパイラ:Aho、Lam、Sethi、Ullmanによる原則、テクニック、ツール コンパイラー設計ハンドブック:最適化と機械コードの生成、Srikant、Shankarによる第2版 ガーベッジコレクションハンドブック:ジョーンズ、ホスキング、モスによる自動メモリ管理のアート

4
「指紋」セットを見つける
10人がいて、それぞれにお気に入りの本のリストがあるとします。ある人Xについて、Xだけが好きなXの本の特別なサブセットを見つけたいと思います。つまり、Xの特別なサブセットのすべての本を好きな人は他にいません。私はこの特別なサブセットをXのユニークな「指紋」と考えています。 そのようなセットを見つけるためのアプローチについての提案をいただければ幸いです。(これは宿題のように見えますが、私が解決しようとしている私の生物学研究の問題に関連しています。)
11 algorithms  sets 

1
指示されたunion-find
エッジを動的に追加して特定のクエリを実行できる有向グラフについて考えGGGます。 例:分離セットフォレスト 次の一連のクエリについて考えてみます。 arrow(u, v) equiv(u, v) find(u) 最初のものは、矢印追加場合は、2番目の一方が決定し、グラフにしU ↔ * V、最後の一つはの同値クラスの正規代表見つけ↔ *を、すなわちA R (U )、その結果、U ↔ * V r (v )= r (u )を意味します。u→vu→vu→vu↔∗vu↔∗vu↔^*v↔∗↔∗↔^*r(u)r(u)r(u)u↔∗vu↔∗vu↔^*vr(v)=r(u)r(v)=r(u)r(v)=r(u) これらのクエリを準定数の償却済みの複雑さで実装する分離セットフォレストデータ構造を使用したよく知られたアルゴリズム、つまります。この場合、を使用して実装されていることに注意してください。O(α(n))O(α(n))O(α(n))equivfind より複雑なバリアント 今、私は方向が重要であるより複雑な問題に興味があります: arrow(u, v) confl(u, v) find(u) 最初は矢印追加し、秒はと両方から到達可能なノード、つまりがあるかどうかを決定します。最後のものは、が意味するようなオブジェクトを返す必要があり、は簡単に計算できるはずです。(たとえば、計算するために)。目標は、これらの操作が高速になるような適切なデータ構造を見つけることです。u→vu→vu→vwwwuuuvvvu→∗←∗vu→∗←∗vu→^*←^*vr(u)r(u)r(u)u→∗←∗vu→∗←∗vu→^*←^*vr(u)∙r(v)r(u)∙r(v)r(u) \bullet r(v)∙∙\bulletconfl サイクル グラフにはサイクルを含めることができます。 主要な問題のDAGのみを考慮するために、強連結成分を効率的かつ増分的に計算する方法があるかどうかはわかりません。 もちろん、DAGの解決策もありがたいです。これは、最も一般的でない祖先の増分計算に対応します。 素朴なアプローチ disjoint-setフォレストのデータ構造は、エッジの方向を無視するため、ここでは役に立ちません。そのノート、グラフがコンフルエントでない場合には、単一のノードにすることはできません。r(u)r(u)r(u) 一つは、定義することができと定義することがとして場合。しかし、これを段階的に計算する方法は?r(u)={v∣u→∗v}r(u)={v∣u→∗v}r(u)=\{v ∣ u→^*v\}∙∙\bulletS1∙S2S1∙S2S_1\bullet S_2S1∩S2≠∅S1∩S2≠∅S_1 ∩ S_2≠∅ おそらく、そのような大きなセットを計算することは役に立たないでしょうが、通常のunion-findアルゴリズムのように、小さなセットはより興味深いはずです。

3
「帰納的に」と「再帰的に」は非常に類似した意味を持っていますか?
「帰納的に」と「再帰的に」は非常に似ていることを意味しますか? たとえば、決定された最初のk成分に基づいて最初のk + 1成分を決定することによりn次元ベクトルを決定し、最初の成分で初期化されるアルゴリズムがある場合、それは再帰的または帰納的に機能しますか?私は「再帰的に」使用してきましたが、今日誰かが「帰納的に」それを言いました。

1
DFSとBFSがまったく同じ順序でノードを処理するようにするグラフ
一部のグラフでは、DFSとBFSの検索アルゴリズムは、ノードが同じノードで開始する場合、まったく同じ順序でノードを処理します。2つの例は、パスであるグラフと星型のグラフ(任意の数の子を持つ深さ木)です。このプロパティを満たすグラフを分類する方法はありますか?111

2
多数の副問題を伴う動的プログラミング
多数の副問題がある動的プログラミング。だから私はインタビューストリートからこの問題を解決しようとしています: グリッド・ウォーキング(50点のスコア) あなたはに位置しているの位置に次元グリッド。グリッドの次元は)です。1つのステップで、次元のいずれかを1つ前または後ろに歩くことができます。(したがって、常に可能な異なる動きがあります)。どの時点でもグリッドを離れないように、ステップをいくつ実行できますか?あなたは、任意のためならば、グリッドを離れる、どちらかまたは。(X 1は、xは2、... 、xはN)(D 1、D 2、... 、D N N 2 N M X I 、X I ≤ 0 X I > DのIをNNN(x1,x2,…,xN)(x1,x2,…,xN)(x_1,x_2,\dots,x_N)(D1,D2,…,DN(D1,D2,…,DN(D_1,D_2,\dots,D_NNNN2N2N2NMMMxixix_ixi≤0xi≤0x_i \leq 0xi>Dixi>Dix_i > D_i 私の最初の試みは、このメモ化された再帰的な解決策でした: def number_of_ways(steps, starting_point): global n, dimensions, mem #print steps, starting_point if (steps, tuple(starting_point)) in mem: return mem[(steps, tuple(starting_point))] val = 0 if …

1
絞り込みタイプの推測
職場では、動的言語に関する型情報を推論する必要があります。次のように、ステートメントのシーケンスをネストされたlet式に書き換えます。 return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 一般的なタイプ情報から始めて、より具体的なタイプを推測しようとしているので、自然な選択は絞り込みタイプです。たとえば、条件演算子は、trueブランチとfalseブランチの型の和集合を返します。単純なケースでは、非常にうまく機能します。 ただし、次のタイプを推測しようとしたときに、思わぬ障害に遭遇しました。 function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
選択アルゴリズムのスペースに制限はありますか?
整数の配列で番目に大きい要素を見つけるためのよく知られた最悪の場合の選択アルゴリズムがあります。それは中央値中央値アプローチを使用して十分なピボットを見つけ、入力配列を所定の位置に分割し、再帰的に番目に大きい要素の検索を続けます。O(n)O(n)O(n) kkkkkk 入力配列に触れることが許可されなかった場合、時間で番目に大きい要素を見つけるためにどのくらい余分なスペースが必要になりますか?余分なスペースで番目に大きい要素を見つけても、実行時の維持できますか?たとえば、最大または最小の要素を見つけるには、時間とスペースが必要です。 kkkO(n)O(n)O(n)kkkO(1)O(1)O(1)O(n)O(n)O(n)O(n)O(n)O(n)O(1)O(1)O(1) 直感的に、空間よりも優れているとは思えませんが、その証拠はありますか?O(n)O(n)O(n) 誰かが参照を指すか、番目の要素が時間でスペースを見つける必要がある理由を議論することができますか?⌊n/2⌋⌊n/2⌋\lfloor n/2 \rfloorO(n)O(n)O(n)O(n)O(n)O(n)

1
修正されたBorůvkaのアルゴリズムのより厳密な分析
Borůvkaのアルゴリズムは、グラフのスパニングツリー最小を計算するための標準的なアルゴリズムの一つであると。G=(V,E)G=(V,E)G = (V,E)|V|=n,|E|=m|V|=n,|E|=m|V| = n, |E| = m 擬似コードは次のとおりです。 MST T = empty tree Begin with each vertex as a component While number of components > 1 For each component c let e = minimum edge out of component c if e is not in T add e to T …

2
ベクトルの合計の最大成分を最小化
この最適化問題について何か学びたい:負でない整数ai,j,kai,j,ka_{i,j,k}について、式を最小化する関数見つけるfff maxk∑iai,f(i),kmaxk∑iai,f(i),k\max_k \sum_i a_{i,f(i),k} 別の定式化を使用した例では、より明確になる場合があります。次のような一連のベクトルのセットが与えられます。 { {(3, 0, 0, 0, 0), (1, 0, 2, 0, 0)}, {(0, 1, 0, 0, 0), (0, 0, 0, 1, 0)}, {(0, 0, 0, 2, 0), (0, 1, 0, 1, 0)} } 各セットから1つのベクトルを選択して、それらの合計の最大成分が最小になるようにします。たとえば、 (1, 0, 2, 0, 0) + (0, 1, 0, 0, 0) + …

4
特定の乱数ジェネレータを使用して1〜100を印刷する最も効率的なアルゴリズム
RandNum501〜50の範囲で一様にランダムな整数を生成する乱数ジェネレーターが提供されます。この乱数ジェネレータのみを使用して、1から100までのすべての整数をランダムな順序で生成および出力できます。すべての数は正確に1度来る必要があり、任意の場所で任意の数が発生する確率は等しくなければなりません。 これのための最も効率的なアルゴリズムは何ですか?

1
スライス内の要素をカウントするための配列の前処理(RMQへの削減?)
配列を指定して、1、... 、nは自然数の≤ K、kは定数であるが、私は答えにしたいO (1 )の形式のクエリは:「何回んmはインデックス間の配列に現れIとj "?a1,…,ana1,…,ana_1,\ldots,a_n≤k≤k\leq kkkkO(1)O(1)O(1)mmmiiijjj アレイは線形時間で前処理する必要があります。特に、範囲の最小クエリに減少があるかどうかを知りたいです。 これは、で、間隔内の1の数を照会する場合のRMQと同等です。だから私たちはそれを使うことができます。SEの制限のため、自分の質問には答えられませんでした。k=1k=1k=1

1
オブジェクトを互いに最大距離に配置するようにオブジェクトを立方体に配置します
カラーカメラを使用して、空間内の複数のオブジェクトを追跡しようとしています。各オブジェクトには異なる色があり、各オブジェクトを適切に区別できるようにするために、オブジェクトに割り当てられた各色が他のオブジェクトの色とできるだけ異なるようにしています。 RGB空間において、我々は、このキューブの3つの平面、0と255の間の値を持つすべてを持っている、私が配布したいn個の限りがあるように色を可能な限り他の人との距離。追加の制限は、である(0 、0 、0 )と(255 、255 、255 )(又は可能な限りそれらの近くには)に含まれるべきであるn個(0 、0 、0 )/(255 、255 、255 )(0,0,0)/(255,255,255)(0,0,0) / (255,255,255)んnn(0 、0 、0 )(0,0,0)(0, 0, 0)(255 、255 、255 )(255,255,255)(255, 255, 255)んnn私のオブジェクトがいずれも色を取らないようにしたいので、背景はおそらくこれらの色の1つになるでしょう。(n − 2 )(n−2)(n-2) おそらく、(黒と白を含む)は約14以下です。んnn これらの色を取得する方法についてのヒントを事前にありがとう。

1
ランダム分割による選択のための鋭い集中?
アレイ内のメジアン要素を発見するための通常の単純なアルゴリズムの数です。nAAAnnn から要素を置き換えてサンプルする A Bn3/4n3/4n^{3/4}AAABBB ソートとランクを見つける要素との| B | ± √BBB lrB|B|±n−−√|B|±n|B|\pm \sqrt{n}lllrrrBBB そのチェックと中央値の反対側にあるとせいぜいがあることの要素との間のといくつかの適切な定数を。これが起こらない場合は失敗します。R A C √lllrrrAAA AlrC>0Cn−−√CnC\sqrt{n}AAAlllrrrC>0C>0C > 0 それ以外の場合は、の要素をと間で並べ替えて中央値を求めます。L個のRAAAlllrrr これが線形時間で実行され、高い確率で成功することを確認するのは難しくありません。(すべての悪いイベントは、二項式の期待から大きく逸脱しています。) クイックソートを見た生徒に教えるのがより自然な同じ問題の代替アルゴリズムは、ここで説明するものです。ランダム化された選択 これが線形の予想実行時間を持っていることも簡単にわかります。「ラウンド」は、1/4から3/4の分割が行われたときに終了する再帰呼び出しのシーケンスであり、予想される長さがラウンドの最大数は2です(ラウンドの最初のドローでは、アルゴリズムが説明されているように、ラウンドの長さが幾何ランダム変数によって支配されるため、ラウンドが適切に分割される確率は1/2になり、その後実際に増加します。) だから今の質問: ランダム化された選択が高い確率で線形時間で実行されることを示すことは可能ですか? 我々はラウンドを、各ラウンドは少なくとも長有する確率で最大で結合した組合が実行時間であることを与えるので、確率。k 2 − k + 1 O (n log log n )1 − 1 / O (log n )O(logn)O(log⁡n)O(\log n)kkk2−k+12−k+12^{-k+1}O(nloglogn)O(nlog⁡log⁡n)O(n\log\log n)1−1/O(logn)1−1/O(log⁡n)1-1/O(\log n) これはちょっと物足りないですが、本当ですか?

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