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

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

4
Floyd-Warshall、Dijkstra、Bellman-Fordアルゴリズムの違いは正しいですか?
私は3つを研究してきましたが、それらからの推測を​​以下に述べています。十分に正確に理解しているかどうかを誰かに教えてもらえますか?ありがとうございました。 ダイクストラアルゴリズムは、単一のソースがあり、あるノードから別のノードへの最小パスを知りたい場合にのみ使用されますが、このような場合は失敗します。 Floyd-Warshallアルゴリズムは、すべてのノードのいずれかがソースになる可能性がある場合に使用されるため、任意のソースノードから任意の宛先ノードに到達する最短距離が必要です。これは、負のサイクルがある場合にのみ失敗します。 ソースが1つしかない場合、Bellman-Fordはダイクストラのように使用されます。これは負の重みを処理でき、その動作は1つのソースを除き、Floyd-Warshallと同じですよね?(これは私が最も確信していないものです。)

4
クイックソートが子供に説明しました
昨年、私は「幼稚園のための量子力学」に関する素晴らしい論文を読んでいました。簡単な紙ではありませんでした。 今、私は可能な限り簡単な言葉でクイックソートを説明する方法を疑問に思います。平均複雑度がであることを(または少なくとも手波で)どのように証明できますか?または少なくとも小学校では?O(nlogn)O(nlog⁡n)O(n \log n)

3
文字列の切断に関する動的プログラミング演習
私はこの本から次の問題に取り組んできました。 特定の文字列処理言語は、文字列を2つの部分に分割する基本的な操作を提供します。この操作には元の文字列のコピーが含まれるため、カットの位置に関係なく、長さnの文字列に対してn単位の時間がかかります。今、文字列を多くの部分に分割したいとします。休憩が行われる順序は、合計実行時間に影響を与える可能性があります。あなたがた位置に20文字の文字列をカットしたい場合たとえば、と、その後の位置に最初のカットを作り、負うの総コスト位置10をしている間、最初のより良いコスト持ち。3333 20 + 17 = 37 20 + 10 = 3010101033320 + 17 = 3720+17=3720 + 17 = 3720 + 10 = 3020+10=3020 + 10 = 30 カットが与えられ、ストリングを個にカットする最小コストを見つける動的プログラミングアルゴリズムが必要です。m + 1mmmm + 1m+1m +1

6
重みのないグラフで最短パスを見つけるためにDFSを使用できないのはなぜですか?
「現状のまま」のDFSを使用しても、重み付けされていないグラフでは最短経路が見つからないことを理解しています。 しかし、DFSを微調整して、重みのないグラフで最短パスを見つけることができるのはなぜですか?件名に関するすべてのテキストは、単にそれを実行できないと述べています。私は(自分で試したことがなく)納得していません。 DFSが重み付けされていないグラフで最短パスを見つけることを可能にする変更を知っていますか?そうでない場合、アルゴリズムをそれほど難しくしているのは何ですか?

2
点のプロットが空間へのパーティションを定義するこのデータ構造/概念とは
実世界の問題を解決するためのアルゴリズムに遭遇し、宿題の問題のために非常によく似たものを作成したクラスを覚えています。 基本的にはポイントのプロットであり、線は2つのポイント間で等距離になるように描画されます。これは、ポイントの周囲の線がそのポイントに最も近いエリアの形状を形成する完全なパーティションを形成します。これは誰かに鐘を鳴らしますか?説明をグーグルで調べて結果を得るのは大変でした。そして、それを他にどのように説明するかわかりません。うまくいけば、画像が役立ちます。

8
アルゴリズムセットのカーディナリティ
議論の誰かが、特定の問題に取り組むための少なくとも連続した数の戦略が存在する可能性があると考えています。特定の問題は取引戦略(アルゴリズムではなく戦略)でしたが、それは私の質問の要点の横にあると思います。 これにより、一連のアルゴリズムの基数について考えるようになりました。私は少し探していましたが、何も思いつきませんでした。チューリングマシンは有限のアルファベットセットで動作し、テープはインデックス付け可能でなければならず、したがってカウント可能でなければならないため、数え切れないほどの数のアルゴリズムを持つことは不可能だと考えてきました。私の集合論は確かに錆びているので、私の推論が有効であるかどうかは確かではなく、おそらくそれを証明することはできないでしょうが、それは興味深い考えです。 アルゴリズムのセットの基数は何ですか?

9
O(n)時間で5つの繰り返し値を見つける方法は?
あなたはサイズの配列があるとのn ≥ 6n≥6n \geq 6から整数含むにちょうど5を繰り返して、包括的に。時間で繰り返される数を見つけることができるアルゴリズムを提案する必要があります。私の人生では何も考えられません。ソートは、せいぜい思いますか?配列を走査するとになり、ます。ただし、リンクリスト、キュー、スタックなどのトリッキーなものを見たので、並べ替えが必要かどうかはわかりません。111n−5n−5n − 5O(n)O(n)O(n)O(nlogn)O(nlogn)O(n\log n)O(n)O(n)O(n)O(n2logn)O(n2logn)O(n^2\log n)

2
反転の数を最小限に抑えながらリストに効率的に挿入する
比較可能なアイテムの2つのリストuおよびsを想定します。INV(u)をuの反転数とします。 INV(u)の最小の増加でsの項目をuに挿入する効率的なアルゴリズムを探しています。 基本的に、リストにオブジェクトを挿入し、最初のリストの順序を維持しながら、「可能な限りソートされた」状態に保ちたいと思います。 例: u = [4,6,2,9,7] INV(u) = 3 ((4, 2), (6, 2) and (9, 7) s = [8,3,10] one optimal solution u' = [3, 4, 6, 2, 8, 9, 7, 10] INV(u') = 5 ((4, 2), (7, 2) and (9, 7) + (3,2), (8,7)) different optimal solution u' …

4
巨大なグラフでのダイクストラのアルゴリズム
私はダイクストラに非常に精通しており、アルゴリズムについて具体的な質問があります。35億ノード(すべてOpenStreetMapデータ)などの巨大なグラフがある場合、グラフをメモリに格納できないことは明らかなので、グラフはデータベースのディスクに保存されます。 そのようなグラフの最短経路を計算するために利用可能なライブラリがあります。彼らはどうやってこれをしますか?より具体的には、ダイクストラのアルゴリズムを実行するためにグラフの必要な部分をどのようにロードしますか? 訪問した各頂点の隣接リストを取得するには、統計データによると10,000ノードあたり約1,500のデータベースクエリが必要になるため、明らかにそうではありません。それはとても遅すぎるでしょう。 どうやってやっているの?自分で実装しようとしています。

1
四面体が多面体の内側にあるかどうかのテスト
私が持っている、四面体 と多面体。は、すべての頂点を常にと共有するように制約されます。私がいるかどうかを判断したいあるの内側。ttt t p tppptttpppttt ppp 解決に貢献する可能性がある場合に、問題に詳細を1つ追加しますはDelaunay四面体であり、面は三角形であり、頂点に関して強くDelaunayです。四面体は、その頂点の外接球に内部に他の頂点が含まれていない場合、ドロネーです。面上にその面の頂点を含む外接球が存在するが、面上または面内に他の頂点が存在しない場合、面は強くドローネです。tttpppppp 次の図は、空間での同じ問題を示しています。 2D2D2D 元のポリゴンppp: の頂点のドロネー三角形分割ppp: 三角形に対する内側/外側テストの結果ttt(影付きの三角形は内側に あり、残りは外側にあります):ppp 望ましい結果(三角形の外側の剪定): 私の元々の問題は3D空間にあるため、上の図の三角形は四面体に変換され、多角形は任意の多面体変換されます。この問題のいくつかの定式化を見つけました。ptttpppppp 公式1 pの外側になりうるtの 部分は、そのエッジと三角形の面だけですが、一般に、その表面にすべての外側tのエッジを持つpが存在する可能性があるため、この問題は四面体tに対してpの外側にある面が存在するかどうかをテストしますか?tttpppppp tttttt ppp 公式2この問題に対する別の見方がありますが、正式なアイデアはありません。 幾何学的に、が外側の場合、常にpの外側の表面に付着します。私たちは計算することができる場合輪郭(非公式に、外側境界) C V及びC VのPようにV = VのT ∪ VのP及びVのT、Vのpはの頂点の集合であり、T 、P、次にそれぞれ、CをtttpppCVCVC_{V}CVpCVpC_{V_{p}}V=Vt∪VpV=Vt∪VpV=V_{t}\cup V_{p}Vt、VpVt、VpV_t,V_pt 、pt、pt,p tがp内にある場合に限ります。 CV=CVpCV=CVpC_{V}=C_{V_p} tttppp 私が知りたいのですが: 配合1または配合2のどちらを解決できますか? または、これを解決するためのまったく異なるアプローチがありますか? 更新: この問題は、多面体の点の問題に還元できることがわかりました。以来外部面体あります少なくとも外側に位置する一方の面Pを常に存在します(一般的にはその頂点を除いて、)その面上の任意の点に、外Pを。したがって、tの各面について、任意の点を取り、その点がpの外側にあるかどうかをテストする必要があります。tttppp pppttt ppp ポリゴンの記事のポイントから、レイキャスティングアルゴリズムとワインディングナンバーアルゴリズムについて知りました。ポイントがpの表面にある場合、レイキャスティングは数値的に安定しません。しかし、ワインディング数アルゴリズムの数値的堅牢性はそこに対処されていません。 ppp 上記に基づいて、私の中心的な問題は次のようになります(別の質問として尋ねるべきかどうかを提案してください):多角形問題の 数値的に堅牢なアルゴリズムはありますか?

1
不等価なバイナリ行列の構築
要素0または1を使用して、すべての非等価行列(または必要に応じて)を構築しようとしています。等価行列を与える操作は、iおよびj行とiおよびj列の同時交換です。 。例えば。for8×88×88\times 8n×nn×nn\times n1↔21↔21\leftrightarrow2 ⎛⎝⎜001010010⎞⎠⎟〜⎛⎝⎜100001100⎞⎠⎟(000011100)〜(101000010)\begin{equation} \left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \end{array} \right) \sim \left( \begin{array}{ccc} 1 & 0 & 1 \\ 0 & 0 & 0 \\ 0 & 1 & 0 \end{array} \right) \end{equation} 最終的には、各クラス内に等価なマトリックスがいくつあるかをカウントする必要がありますが、Polyaのカウント定理はそれを行うことができると思います。今のところ、各非等価クラスに1つのマトリックスを構築するアルゴリズム的な方法が必要です。何か案は?

2
高速アルゴリズムを使用しない
多項式時間で解くことができる難しい決定問題の例は何ですか?最適なアルゴリズムが「遅い」問題、または既知の最速のアルゴリズムが「遅い」問題を探しています。 以下に2つの例を示します。 完全なグラフの認識。FOCS'03の論文[1]Cornuéjolsで、LiuとVuskovicは問題に対して時間アルゴリズムを与えました。ここでnは頂点の数です。この限界が改善されたかどうかはわかりませんが、理解しているように、より高速なアルゴリズムを取得するには、多少のブレークスルーが必要です。(著者は[1]のジャーナルバージョンでO (n 9)時間アルゴリズムを提供しています。こちらを参照してください)。O(n10)O(n10)O(n^{10})nnnO(n9)O(n9)O(n^9) マップグラフの認識。Thorup [2]は、指数が(約?)かなり複雑なアルゴリズムを提供しました。おそらくこれはさらに劇的に改善されたかもしれませんが、私は良い参考資料を持っていません。120120120 私は特に実用的な重要性を持つ問題に興味があり、「高速」(または実用的な)アルゴリズムの取得は数年前から開かれています。 [1]Cornuéjols、Gérard、Xinming Liu、Kristina Vuskovic。「完全なグラフを認識する多項式アルゴリズム。」Foundation of Computer Science、2003。Proceedings。第44回IEEEシンポジウム。IEEE、2003。 [2]ソラップ、ミケル。「多項式時間でグラフをマップします。」1998年のコンピューターサイエンスの基礎。議事録。第39回年次シンポジウム。IEEE、1998年。

3
DAGを新しいDAGに縮小する最小サイズ
DAGがあります。ノード関数がありますF:V→NF:V→NF\colon V\to \mathbb N(大まかに言うと、ノードに番号を付けます)。これらのルールを使用して、新しい有向グラフを作成します。 F(x)≠F(y)⇒x′≠y′F(x)≠F(y)⇒x′≠y′F(x) \neq F(y) \Rightarrow x' \neq y'x′≠y′⇏F(x)≠F(y)x′≠y′⇏F(x)≠F(y)x' \neq y'\nRightarrow F(x) \neq F(y) :私たちは、新しいノード間のすべての古いエッジ追加。(x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,y) \in E \land x' \neq y' \iff (x',y')\in E' この新しいグラフはまだDAGです。 最小値は何ですか?最小限の新しいグラフを作成するアルゴリズムとは何ですか?|V′||V′||V'|

4
グラフには2つまたは3つの異なる最小全域木がありますか?
特定のグラフGに2つの異なる最小全域木があるかどうかを検出する効率的な方法を見つけようとしています。また、3つの異なる最小スパニングツリーがあるかどうかを確認する方法を探しています。私が考えた素朴な解決策は、クラスカルのアルゴリズムを一度実行して、最小スパニングツリーの総重量を見つけることです。後で、グラフからエッジを削除してクラスカルのアルゴリズムを再度実行し、新しいツリーの重みが元の最小スパニングツリーの重みであるかどうかをチェックします。グラフの各エッジについても同様です。ランタイムはO(| V || E | log | V |)であり、これはまったく良くありません。もっと良い方法があると思います。 どんな提案でも役立つでしょう、事前に感謝します

2
この明らかにO(n lg n)乗算アルゴリズムの間違いはどこにありますか?
等間隔の3つを見つけることに関する最近のパズルブログの投稿で、私はO(n lg n)時間内にそれを行うと主張するトップアンサーを持つstackoverflowの質問に導かれました。興味深い部分は、解が多項式の2乗を伴い、O(n lg n)時間でそれを行う方法を説明する論文を参照することです。 現在、多項式の乗算は、数値の乗算と実質的に同じです。唯一の本当の違いは、キャリーがないことです。しかし...キャリーはO(n lg n)時間で行うこともできます。例えば: var value = 100; // = 0b1100100 var inputBitCount = value.BitCount(); // 7 (because 2^7 > 100 >= 2^6) var n = inputBitCount * 2; // 14 var lgn = n.BitCount(); // 4 (because 2^4 > 14 => 2^3) var c = …

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