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

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

3
疎グラフのすべての最短パスを見つけるための最速のアルゴリズムは何ですか?
ような頂点とエッジを持つ重みのない無向グラフで、グラフ内のすべての最短経路を見つける最速の方法は何ですか?あるFloyd-Warshallよりも速く実行できますが、反復ごとに非常に高速ですか?E 2 V > E O (V 3)VVVEEE2V>E2V>E2V \gt EO(V3)O(V3)O(V^3) グラフが重み付けされている場合はどうですか?

3
動的グラフの最短経路を取得する
現在、有向グラフの最短経路を研究しています。ダイクストラやベルマンフォードのよ​​うに、ネットワーク内の最短経路を見つけるための多くの効率的なアルゴリズムがあります。しかし、グラフが動的な場合はどうでしょうか?動的とは、プログラムの実行中に頂点を挿入または削除できることを意味します。新しいグラフで最短経路アルゴリズムを再度実行する必要なく、エッジeを挿入した後、頂点から他のすべての頂点uへの最短経路を更新するための効率的なアルゴリズムを見つけようとしています。これどうやってするの?前もって感謝します。vvvあなたはuueee 注:変更は、アルゴリズムの最初の反復後に行うことができます 注[2]: 2つのノード、はソース、tはターゲットです。これらのノード間の最短パスを見つける必要があります。グラフが更新されたら、π (s 、t )を更新するだけです。これはsとtの間の最短経路です。ssstttπ(s 、t )π(s,t)\pi(s,t)sssttt 注[3]:エッジ挿入の場合にのみ興味があります。 正式な定義:グラフ与えられた場合。定義更新操作を)1と、エッジの挿入Eに対してE)は、エッジのアミノ酸欠失または2 EからEを。目的は、更新操作後のすべてのペアの最短パスのコストを効率的に見つけることです。効率的には、少なくとも更新操作の後に、Bellman-FordアルゴリズムなどのAll-Pairs-Shortest-Pathアルゴリズムを実行するよりも優れています。G = (V、E)G=(V,E)G = (V,E)eeeEEEeeeEEE 編集:以下に問題の簡略版があります: 重み付きグラフが与えられ、単方向のエッジと2つの重要な頂点sおよびtで構成されます。候補の双方向エッジのセットCも提供されます。私はエッジを構築しなければならない(U 、V )∈ Cはからの距離を最小にするために、SをT。G (V、E)G(V,E)G(V,E)ssstttCCC(U 、V )∈ C(u,v)∈C(u,v) \in Csssttt

5
フィットネスの低い人が次世代に生き残るチャンスがあるのはなぜですか?
私は現在、遺伝的アルゴリズムについて読んで見ていますが、それは非常に興味深いと思います(大学にいる間、それを研究する機会がありませんでした)。 突然変異は確率に基づいていることを理解しています(ランダム性が進化の根源です)が、なぜ生存が必要なのかわかりません。 私が理解から、個々のフィットネス持つ、そのような別の個人用としてフィットネス持つ我々は持っている、その後、より良い確率持つ生き残るために次世代へ。F (i )J F (j )F (i )> F (j )I JIIIF(i)F(i)F(i)JJJF(j)F(j)F(j)F(i)>F(j)F(i)>F(j)F(i) > F(j)IIIJJJ 確率は、が生き残り、は生き残れないかもしれないことを意味します(「不運」で)。なぜこれが良いのか理解できませんか?が常に選択を生き延びたら、アルゴリズムの何が問題になるでしょうか?私の推測では、アルゴリズムは貪欲なアルゴリズムに似ていますが、よくわかりません。I IJJJ III III

1
貪欲なアルゴリズムはいつコイン交換の問題を解決できますか?
異なる金種および値v のコインのセットが与えられた場合、値vを表すのに必要な最小数のコインを見つけたいと考えます。C 1 、。。。、c nc1,...,cnc1, ... , cn たとえば、コインセット1,5,10,20の場合、合計6の場合は2コイン、合計19の場合は6コインになります。 私の主な質問は、この問題を解決するために貪欲な戦略をいつ使用できるかということです。 ボーナスポイント:この文は明らかに間違っていますか?(From:最小コイン変更問題に対して貪欲なアルゴリズムで十分かどうかを見分ける方法は?) ただし、この論文では、欲張りアルゴリズムが最初の最大値と2番目に大きい値に対して機能する場合、それらすべてに対して機能するという証拠があり、それをチェックするために欲張りアルゴリズムと最適なDPアルゴリズムを使用することを提案します。 http://www.cs.cornell.edu/~kozen/papers/change.pdf 追伸 そのスレッドの答えは信じられないほどぎこちないことに注意してください。そのため、私は新たに質問をしました。

1
線形プログラムとしてソートする
驚くほど多くの問題が、線形計画法(LP)をかなり自然に削減しています。ネットワークフロー、2者間マッチング、ゼロサムゲーム、最短パス、線形回帰、および回路評価などの例については、[1]の第7章を参照してください。 回路評価は線形計画法に帰着するため、問題には線形計画法の定式化が必要です。したがって、線形プログラムへの還元を介した「新しい」ソートアルゴリズムがあります。だから、私の質問はPPP 実数の配列をソートする線形プログラムとは何ですか?nnn LPへの還元と解決のソートアルゴリズムの実行時間は? S. Dasgupta、C。Papadimitriou、U。Vaziraniによるアルゴリズム(2006)

1
シャッフルアルゴリズムの正しさを証明する方法は?
アイテムのリストをランダムな順序で作成する方法は2つありますが、それらが同等に公平であるかどうかを判断したいです 私が使用する最初の方法は、要素のリスト全体を作成してから、シャッフルを実行することです(Fisher-Yatesシャッフルなど)。2番目の方法は、挿入のたびにリストをシャッフルする反復的な方法です。擬似コードでは、挿入関数は次のとおりです。 insert( list, item ) list.append( item ) swap( list.random_item, list.last_item ) この特定のシャッフルの公平性を示す方法に興味があります。このアルゴリズムが使用される場合、このアルゴリズムの利点は、わずかに不公平であっても大丈夫です。決定するには、その公平性を評価する方法が必要です。 私の最初のアイデアは、この方法で可能な合計順列と、最終的な長さのセットで可能な合計順列を計算する必要があるということです。ただし、このアルゴリズムから生じる順列の計算方法については少し迷っています。また、これが最良の、または最も簡単なアプローチであると確信することもできません。

2
和のセットを「加算解除」するための効率的なアルゴリズム
自然数Xのマルチセットが与えられた場合、すべての可能な合計のセットを考えます。 sums(X)={∑i∈Ai|A⊆X}sums(X)={∑i∈Ai|A⊆X}\textrm{sums}(X)= \left\{ \sum_{i \in A} i \,|\, A \subseteq X \right\} 例えば、sums({1,5})={0,1,5,6}sums({1,5})={0,1,5,6}\textrm{sums}(\left\{1,5\right\}) = \left\{0, 1, 5, 6\right\}ながら sums({1,1})={0,1,2}sums({1,1})={0,1,2}\textrm{sums}(\left\{1,1\right\}) = \left\{0, 1, 2\right\}。 (和の入力セットのサイズに関して測定される)逆演算を計算するための最も効率的なアルゴリズムは何ですか?具体的には、次のいずれかを効率的に計算できますか? 特定のセットが有効な合計セットであるかどうか。(例えば、{0,1,2}{0,1,2}\left\{0,1,2\right\}、有効であるが、{0,1,3}{0,1,3}\left\{0,1,3\right\}ではありません。) 指定されたセットに合計されるマルチセット。 最小の所与のセットへの合計マルチセット。(たとえば、{1,2}{1、2}\left\{1,2\right\}と{1,1,1}{1、1、1}\left\{1,1,1\right\}両方の合計{0,1,2,3}{0、1、2、3}\left\{0,1,2,3\right\}が、前者が小さいです。)

3
AKSの素数性テストが実際に他のテストよりも高速になるのはいつですか?
私はそれについて学ぶときにAKSの素数性テストがどのように解釈されるべきか、例えばPRIMES⊆Pを証明するための帰結、またはコンピューターでの素数性テストのための実際の実用的なアルゴリズムのアイデアを得ようとしています。 テストには多項式ランタイムがありますが、高度であり、可能な限り高い定数があります。それでは、実際には、どので他の素数性テストを上回っていますか?ここで、は素数の桁数であり、「surpass」は典型的なコンピューターアーキテクチャでのテストのおおよその実行時間を指します。nnnnnnn 私は、機能的に比較可能なアルゴリズム、つまり、正確さのために推測を必要としない決定論的なアルゴリズムに興味があります。 さらに、テストのメモリ要件を考えると、他のテストよりもこのようなテストを使用していますか?


2
数独を解決できる場合、巡回セールスマン問題(TSP)を解決できますか?もしそうなら、どのように?
任意のサイズの部分的に満たされた数独を与えると、対応する完成した数独を与えるプログラムがあるとしましょう。 このプログラムをブラックボックスとして扱い、これを使用してTSPを解決できますか?つまり、TSP問題を部分的に満たされた数独として表現する方法はありますか?その数独の答えを与えると、TSPの解を多項式時間で伝えることができますか? はいの場合、どのように?TSPを部分的に満たされた数独としてどのように表現し、対応する満たされた数独を結果として解釈しますか。

1
modの取得の複雑さ
これは簡単な答えが必要な質問のように思えますが、決定的なものはありません。 nnna 、pa、pa, pモッズPamodpa\bmod p を割ると時間がかかります。ここで、は乗算の複雑さです。しかし、は少し速く実行できますか?p O (M (n ))M (n )modaaappp O(M(n))O(M(n))O(M(n))M(n)M(n)M(n)modmod\bmod

1
Distinguish Decision Procedure vs SMTソルバーvs定理証明者vs制約ソルバー
これらの用語は私を混乱させます。私が理解するように SATソルバー:命題論理の充足可能性を決定します(DPLLまたはローカル検索を使用)。 決定手順は、特定の決定可能な一次理論の充足可能性を決定する手順です。 SMTソルバーは、SATソルバー+決定手順です。 定理証明者は、KeYツールなどのダイナミックロジックのようなものを示します。 制約ソルバー:わかりません。 しかし、Z3を定理証明者と呼ぶ人々がいます。したがって、これらの用語をどのように区別するかはわかりません。そして、それらすべての最も一般的な用語は何ですか?ありがとうございました。

2
C ++ベクトルのpush_backが常に償却されるのはなぜですか?
私はC ++を学習していますが、ベクターのpush_back関数の実行時間が一定の「償却」であることに気付きました。文書にはさらに、「再割り当てが行われた場合、再割り当て自体が全体のサイズで線形になります」と記載されています。 これは、push_back関数がであることを意味するべきではありません。ここで、nはベクトルの長さです。結局のところ、最悪の場合の分析に興味がありますよね?O(n)O(n)O(n)nnn 決定的に、形容詞「償却」が実行時間をどのように変えるか理解していないと思います。

1
Pastryのルーティングテーブルの作成方法
この質問は、Computer Science Stack Exchangeで回答できるため、Software Engineering Stack Exchangeから移行されました。 7年前に移行され ました。 Pastry Distributed Hash Tableを実装しようとしていますが、いくつかのことが理解を逃れています。私は誰かが明らかにできることを望んでいた。 免責事項:私はコンピューターサイエンスの学生ではありません。私は人生で正確に2つのコンピューターサイエンスコースを受講しましたが、どちらもリモートで複雑なものを扱っていません。私はソフトウェアで長年働いてきたので、アイデアに頭を包むことができれば、実装タスクに任せていると感じます。だから、明らかな何かを見逃しているだけかもしれません。 著者が発表した論文[1]を読んで、ある程度の進歩を遂げましたが、ルーティングテーブルの動作に関するこの1つの特定のポイントに固執し続けています。 論文は、 ノードのルーティングテーブル、それぞれエントリの 行に編成されます。ルーティングテーブルの行のエントリは、nodeIdが最初のn桁で現在のノードのnodeIdを共有するが、番目の桁が可能な値のいずれかを持つノードを参照します現在のノードのID の番目の数字以外。⌈ ログ2 B N ⌉ 2 B - 1 2 B - 1件の、N 、N + 1 2 B - 1 、N + 1をRRR⌈ ログ2bN⌉⌈log2b⁡N⌉\lceil \log_{2^b} N\rceil2b− 12b−12^b - 12b− 12b−12^b - 1nnnn …

2
請求書の問題を一括して支払う
ありテーブルの人々が。番目の人が支払わなければならないドルを。nnniiipipip_i 一部の人々は正確にを支払うための適切な請求書を持っていないため、次のアルゴリズムを考え出します。pipip_i まず、誰もが自分のお金の一部をテーブルに置きます。その後、各個人は彼らが過払いしたお金を取り戻します。 法案には、金種の固定セットがあります(入力の一部ではありません)。 例:アリスとボブの2人がいるとします。アリスは負っている$ 5と5枚の持っている$ 1札を。ボブは負って$ 2と1つの持っている$ 5法案を。アリスとボブがすべてのお金をテーブルに置いた後、ボブは3 ドルを取り戻し、誰もが幸せです。 もちろん、お金をすべてテーブルに置く必要がない場合もあります。たとえば、アリスが1,000 ドルの請求書を持っている場合、彼女はそれらをすべてテーブルに置いてから、ほとんどを取り戻す必要はありません。 次のプロパティを持つアルゴリズムを見つけたい: 入力は、人数、各人が支払うべき金額、各人の各宗派の請求書を指定します。 このアルゴリズムは、最初のラウンドでテーブルに置く請求書を各個人に伝えます。 このアルゴリズムは、2回目のラウンドでテーブルから削除する請求書を各個人に伝えます。 テーブルに置かれた請求書の数+テーブルから削除された請求書の数は最小化されます。 実行可能な解決策がない場合、アルゴリズムはエラーを返します。

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