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

タスクを完了するための明確に定義された指示、および時間/メモリ/その他に関する関連分析に関する質問。

2
キャッシュ忘却型アルゴリズムの出発点は?
キャッシュを気にしないアルゴリズムとデータ構造についてもっと学ぶのは興味深いですが、論文が多すぎてどこから始めればいいのか正直にわかりません。私はこのテーマについてProkupの元の論文を見つけました。これは良い出発点のようですが、このテーマの簡単でわかりやすい紹介がある場合は、むしろそこから始めたいと思います。この件に関する標準的な「頼りになる」参照はありますか? ありがとう!

1
ユークリッド容量設備の場所の問題
で容量制約施設配置問題(CFLP) 、私たちは、クライアントのセットが指定されているおよび潜在的な施設の集合Fを。各クライアント・J ∈ Cは需要があるのD jを 1つの以上のオープンの施設で提供されなければなりません。各施設I ∈ Fは、開口コスト有するF のI及び容量有するU I施設最大需要であり、iは機能することができるが。施設iのクライアントjの 1単位の需要に対応するコストはc i jです。CCCFFFj∈Cj∈Cj \in Cdjdjd_ji∈Fi∈Fi \in Ffifif_iuiuiu_iiiijjjiiicijcijc_{ij}。施設のサブセットを開き、すべてのクライアントの需要が満たされ、容量の制約に違反せず、施設を開いてクライアントにサービスを提供するための総コストが最小限になるように、クライアントの需要を施設に割り当てたいと考えています。サービスコストは非負で対称的で、三角形の不等式を満たします。 【でアローラ1ページ、21]と述べ「アローラ、ラガワン及びラオ[ 2 ]幾何学的場合についてPTASを与えるが、これらは容量化する場合にアルゴリズムを拡張するが、最終的な溶液は、少量容量制約に違反する可能性があります。」「少量」とはどういう意味ですか?それは、それらが任意のϵ > 0 に対して因数内の容量制約に違反するPTASを与えることを意味すると思います。これは正しいですか?(1+ϵ)(1+ϵ)(1+\epsilon)ϵ>0ϵ>0\epsilon > 0 [ 2 ] を調べたとき、関連する唯一の結果は、静電容量k-中央値問題の(1 + ϵ )近似解を見つけるための時間アルゴリズムでした。容量が均一です。Aroraは上記の結果を[ 1 ] で参照していますか?nO(log2(n/ϵ))nO(log2⁡(n/ϵ))n^{O(\log^2 (n / \epsilon))}(1+ϵ)(1+ϵ)(1+\epsilon)kkk [ 1 ] S.アローラ。NP困難な幾何学的最適化問題の近似スキーム:調査。数学では。プログラミング、Ser。B、vol。97、43-69頁、2003年。 [ 2 ] S. Arora、P。Raghavan、およびS. Rao。ユークリッドk中央値および関連する問題の近似スキーム。手続き中 コンピューティングの理論に関する第30回ACMシンポジウム、106ページから113ページ、1998年。

1
互いに素な四面体のコレクションとしてグラフを埋め込む
互いに素なインテリアを有する四面体の接続コレクション(四面体の共有のみにK-面として3Dメッシュを定義)。任意のグラフが与えられた場合、それをメッシュとして埋め込むことができるかどうかをテストする効率的な手順はありますか?K ≤ 2k≤2k \le 2 ここで、埋め込みとは、グラフの頂点を点に、エッジを直線にマッピングしたもので、エッジは頂点でのみ交差し、面はエッジでのみ交差し、2つの面は内部で交差しません。R3R3R^3

2
各エッジを許可しない最短経路
正しい方向に進むための指針や用語に感謝します。 有向グラフと、ポジティブであると仮定できる各エッジi jの長さl i jがあります。特別な開始ノードsと終了ノードtがあります。G = (V、E)G=(V,E)G=(V,E)l私はjlijl_{ij}私はjijijsssttt 各エッジについて、私たちは、からの最短経路の長さを計算したいのにトンエッジ使用していないのi jは。私はjijijsssttt私はjijij 単純な総当たりアルゴリズムは、元のグラフから異なるエッジを削除するたびに、各エッジに対して最短経路アルゴリズムを実行することです。このブルートフォースアルゴリズムで多くの繰り返し計算が行われているという事実を利用する、より効率的なアルゴリズムはありますか? 前もって感謝します。

1
最適化のヒューリスティック
金曜日なので、今度はCWの質問です。最適化の問題で広く使用されているヒューリスティックを探しています。スコープをより「理論に適した」ヒューリスティックに制限するために、ここにルールがあります(任意のものもあれば、そうでないものもあります)。 多数のパラメータがなく、具体的な実行時間(反復ごとの可能性があります)を備えた、明確に定義されたメソッドである必要があります それに関連するいくつかの既知の理論的結果(収束率、存在する場合は近似境界、定常特性など)が必要です。 それは幅広い適用性と、それが選択した方法またはいくつかの方法のいずれかである少なくとも1つのフラグシップアプリケーションを持つ必要があります。 それは自然に触発されるべきではありません(これは軽薄な異論のようですが、私は遺伝的アルゴリズム、アリのコロニーの最適化などを除外しようとしています)。 回答は、理想的には次の形式にする必要があります。ここに例を示します。 名前:交互最適化 目標:(一般に非凸)関数f (x 、y )を最小化するf(x,y)f(x,y)f(x,y) 条件:関連する関数およびh (y )= 最小x f (x 、y )は凸g(x)=minyf(x,y)g(x)=minyf(x,y)g(x) = \min_y f(x,y)h(y)=minxf(x,y)h(y)=minxf(x,y)h(y) = \min_x f(x,y) アルゴリズム:反復はx i、y iで始まります。ithithi^{\text{th}}xi,yixi,yix_i, y_i xi+1←argminxf(x,yi)xi+1←arg⁡minxf(x,yi)x_{i+1} \leftarrow \arg \min_x f(x, y_i) yi+1←argminyf(xi+1,y)yi+1←arg⁡minyf(xi+1,y)y_{i+1} \leftarrow \arg\min_y f(x_{i+1}, y) kkk kkk psあなたの答えは、私が計画しているアルゴリズムセミナーの講義として終わるかもしれません:)

2
クイックリスト操作と注文クエリのためのデータ構造はありますか?
セットからの要素のリストのセットがあります。各要素は単一のリストに表示されます。次の更新を実行できるデータ構造を探しています。N = { 1 、2 、3 、。。。、n } N LLLLN= { 1 、2 、3 、。。。、n }N={1,2,3,...,n}N = \{ 1, 2, 3, ..., n \}NNNLLL c o n c a t (x 、y)concat(x,y)concat(x, y):を含むリストをを含むリストの最後に連結しますxyyyバツxx s p l i t (x )split(x)split(x):含むリスト分割直後xバツxxバツxx また、次のクエリを実行する必要もあります。 follows(x,y)follows(x,y)follows(x, y):とが同じリストにあり、が後に場合に返し(ただし、必ずしも隣接している必要はありません)x y y x xtruetruetruexxxyyyyyyxxxバツxx fi r s …

1
ワイルドカード文字列がセット内の別のワイルドカード文字列と完全に一致するかどうかの判断
ここに私をしばらく悩ませてきた問題があります。さんが言ってみましょう文字列は、1と0のシーケンスであり、そしてワイルドカード文字列は 1のシーケンスであり、0、および?の。すべての文字列とワイルドカード文字列は同じ長さです。これらは標準のUNIXワイルドカードです。10 ?? 1は10011、10111などと一致します。その位置で1または0に一致します。場合はおよびWは、ワイルドカード文字列である、我々は書きV ≤ Wにマッチしたすべての文字列ならばvはまたで一致しているワットを。vvvwwwv≤wv≤wv \leq wvvvwww 問題:集合与えられたワイルドカード文字列の、およびクエリV(ワイルドカード文字列)は、存在しないwが∈ SようにV ≤ ワット?そうでない場合、vをSに効率的に追加できますか?SSSvvvw∈Sw∈Sw \in Sv≤wv≤wv \leq wvvvSSS ここに明らかなソリューション(kは文字列のサイズ、mはRAMのワードサイズ(通常32または64)):リストの各要素を調べ、条件をテストします(2または3回の操作で実行できます)ビットいじりを使用して)。また、テストであれば、V≥wは任意の項目について成り立つワットながら、僕らだスキャン。vがテストに失敗した場合は、vをセットに追加し、マークしたwを削除します。O(kmn)O(kmn)O(\frac{k}{m}n)kkkmmmv≥wv≥wv \geq wwwwvvvvvvwww しかし、それは十分に速くありません。ソリューション、または完全な世界では、基数ツリー(O (k ))に似た複雑さがあったら、それは本当にすばらしいでしょう。クエリはほぼ正確であることがもOKです:場合、であるV ≤ wが、その後、yesまたはno返しません。しかし、条件が成立しない場合は、間違いなくノーを返します。O(logn)O(log⁡n)O(\log n)O(k)O(k)O(k)v≤wv≤wv \leq w これは最悪の場合の複雑さには役立ちませんが、内のすべての要素はワイルドカード文字列で区切られていると想定できます。つまり、いくつか存在するVなど、すべてのそれのw ∈ S、V ≥ wは。SSSvvvw∈Sw∈Sw \in Sv≥wv≥wv \geq w 私が試したアイデア ワイルドカード文字列は結合セミラティスを形成します。ワイルドカード文字列を保持するn-aryツリーを持つことができます。葉はワイルドカード文字列であり、枝はすべての子の結合を表します。クエリと結合が比較できない場合、そのブランチのすべての子と比較するために時間を無駄にする必要はありません。さらに、更新を行い、その更新が結合よりも大きい場合は、ブランチ全体を削除するだけで済みます。残念ながら、これは最悪の場合でも依然としてであり、要素を追加するためにツリーをスキャンするときに、常に「最適な」結合を見つけることができるとは限りません。O(n)O(n)O(n) 基数トライを形成できます。Sはいくつかのワイルドカード文字列で区切られていることがわかります。?0?0であると仮定します。次に、トライのすべてのブランチは、文字列の1番目と3番目のビットにある必要があります。クエリで分岐している現在のビットが1の場合、?そして1つの枝; 0の場合、?そして0の枝; ?の場合、チェックするのは?ブランチ。潜在的に複数のブランチをとる必要があるため、これはあまりよくありません(同じ理由でトライを更新するのは困難です)。マッチングは非常に高速な操作であるため、ツリー内で多くのトラバースを実行する単純な戦略と比較すると、害があります(ポインターの束を追跡することは、いくつかのORやANDを実行するよりもはるかにコストがかかります)。SSSSSS 関連作業 ネットワーキングコミュニティでは、この問題は「パケット分類」として現れます。ここでは、既知のアルゴリズムとデータ構造の良い調査を示します。残念ながら、ほとんどの場合、ワイルドカード文字列はプレフィックスにのみ一致すると想定されており、クエリはそのような文字列のタプルです。もちろん、常に次の基準を満たすように一般的なワイルドカード文字列を変換できます:1?00?1 ?? は(1、?、0、0、?、1、?、?)です。ただし、これは効率的ではありません。他の前提として、これらのタプルは「色」に関連付けられており、クエリで色が返される必要があります(一致した色だけではありません)。これは、タプルを順序付けする必要があるため(または(0、?)と(?、1)のどちらが(0、1)に一致するかが不明確)、問題がはるかに困難になります。 アルゴリズムコミュニティでは、「気にしない」と一致する部分文字列の検索に関連する多くの結果を見つけました。これはかなり難しい問題であり、実際にはどのテクニックも利用できません。 結論として 助けてくれてありがとう!

1
実装するのが難しすぎる強力なアルゴリズム—それらが正しいことを確認するにはどうすればよいですか?
私はここで質問を参照しています:実装するには複雑すぎる強力なアルゴリズム。 アルゴリズムが強力であるが、実装するには複雑すぎる場合、アルゴリズムが正しいことをどのように確認できますか?実装なしでは、実際のシナリオでアルゴリズムをテストすることはできません。そのような複雑なアルゴリズムには、アルゴリズムを無効にするバグが含まれている可能性があります。 これは私が理解していないことです。アルゴリズムの正当性を証明する手法があれば、そのアルゴリズムをすでに実装しているでしょうね。それとも、証明テクニックが正しいことをどのように確認できますか? 初級に聞こえてすみません! Kavehからの更新(引数の方が良いため、ここで再現!): Coqのような形式システムでアルゴリズムの正しさを正式に証明できれば、アルゴリズムを抽出することもできます(本質的にはアルゴリズムを実装したため)。しかし、重要な事実は、ほとんどのアルゴリズムで、アルゴリズムの正確さ、私たちは正確さの非公式の証明を使用します。証明は誤りである場合があり、これは時々発生します。正確性の正式な証明でさえ、アルゴリズムが正しいことを完全に確信させることはできません。

3
ポリゴンの三角形分割のアルゴリズム
私はアルゴリズムを見つけるのに苦労したか、自己交差するポリゴン(また、穴構造のあるポリゴン)の三角形分割に関する論文を発表しました。 誰かが私に公開された論文/アルゴリズムを見つけるように案内できますか? PS:誰かがこの質問に適切にタグを付けてください。私にはそれを行うのに十分な評判ポイントがありません。

3
制限された高さのスパニングツリーをランダムに生成するにはどうすればよいですか?
私が取り組んでいるプロジェクトでは、高さが制限されたランダムスパニングツリーを生成する必要があります。 基本的に私は次のことを行います。1)スパニングツリーを生成します。2)実行可能かどうかを確認します。 1)最小スパニングツリー(プリムまたはクラスカル)から開始して、存在しないエッジを追加し、これによりサイクルを作成します。このサイクルを検出し、新しいスパニングツリーを与えるこのサイクルのエッジの1つを削除します。新しいエッジを追加することでこのスパニングツリー... 2)特別な頂点ます。すべての頂点について、からへのパスの長さは未満である必要があります。ここで、は特定のパラメーターです。 V V V C E N T E R δ δvc e n t e rvceんterv_{center}vvvvvvVc e n t erVceんterV_{center}δδ\deltaδδ\delta これを行うより良い(賢い)方法はありますか? PS私は他の制約を指定するのを忘れていました(私の間違い):頂点の次数も制限されるべきです。

1
VRP / VRPTWのSAT / SMT形式(TSP、ジョブショップスケジューリング)はありますか?
それらがSAT / SMTインスタンスとして(決定問題として)時間ウィンドウ(VRPTW)を使用した車両ルーティング問題を定式化するアプローチであるかどうか疑問に思いますか?(代替:TSP) 例: 「n = 10台の車で時間枠内にすべての顧客を訪問する有効なソリューションはありますか?」 この決定問題は、使用する車両の数を最小限に抑える最初のステップに役立ちます。 私はSMTの経験はありませんが、座標/時間を実数として処理する場合に必要になると思います。 通常、すべてのTSP / VRPの定式化は、混合整数プログラミングドメインで行われますが、sat / smtの定式化は、上記の決定問題に対して(実際の解決時間に関して)競争力があるのだろうかと思います。 それで、あなたはどう思いますか: 参考文献を知っていますか? sat / smtアプローチは競争力があると思いますか? 他に言及したいことはありますか? ご協力ありがとうございます。 サシャ 編集:VRPTWに関連するTCSのより一般的な問題としてTSPについて述べたので、VRPTW の他の「部分的な問題」であるJob Shop Scheduling問題についても言及する必要があります。たぶん、この分野の研究者たちはSAT / SMTで何かを試みました。

2
TSPのHeld-Karpアルゴリズムの時間の複雑さ
Michael HeldとRichard M. Karpによる「シーケンス問題への動的プログラミングアプローチ」を調べたところ、TSPのアルゴリズムの複雑さが(∑n−1k=2k(k−1)(n−1k))+(n−1)(∑k=2n−1k(k−1)(n−1k))+(n−1)(\sum_{k=2}^{n-1}k(k-1)\binom{n-1}{k})+(n-1)(p。199)、それらは係数kkkどこで取るのですか?私が正しく理解していれば、k−1k−1k-1は都市の各サブセットの追加数を意味します。それでは、各加算演算が未知のkkk演算と結合されるのはなぜですか?どういうわけか最小値を取ることに関係していると思いますが、最小値を計算することはそれほど多くの操作を必要としないようです。 次のように保持し、カープと独立ベルマン実行によって動的プログラミングアルゴリズム:各ペアのための(S,ci)(S,ci)(S,c_i)を経由する経路を意味し、c1c1c_1、すべての要素SSSとで終端cicic_i計算 OPT[S,ci]=min{OPT[S∖{ci},cj]+d(cj,ci):cj∈S∖{ci}},OPT[S,ci]=min{OPT[S∖{ci},cj]+d(cj,ci):cj∈S∖{ci}},OPT[S,c_i]=min\{OPT[S\setminus\{c_i\},c_j]+d(c_j,c_i):c_j\in S\setminus\{c_i\}\}, ここで、d(cj,ci)d(cj,ci)d(c_j,c_i)は、都市cjcjc_jとc_iの間の距離を意味しcicic_iます。次に、紙の公式では、kkkはSのサイズを意味しますSSS。

3
平面グラフのツリー分解
最初にmath.SEに応答なしで尋ねました。 平面埋め込みを備えた平面グラフがあると仮定すると、ツリー分解をどのように見つけますか? 行d列の正方グリッドの最適なツリー分解は何ですか?「最適」の定義方法は完全にはわかりませんが、1つの大きなバッグによる分解と多数の大きなバッグによる分解を区別する必要があります。dddddd

1
*対称*行列の固有分解を見つけることの複雑さ
これは、前の質問の特殊版です: マトリックスの固有分解を見つけることの複雑さ。 NxN対称行列の場合、固有分解を計算するにはO(N ^ 3)時間で十分であることがわかっています。問題は、サブキュービックな複雑さを実現できるかどうかです。ありがとう。

8
最悪の場合の実行時間が指数関数的である一方で、シンプレックスアルゴリズム以外のアルゴリズムが実際に非常にうまく機能する他のアルゴリズムはありますか?
最悪の場合、実行時間が多項式である場合、一般にアルゴリズムを「良いアルゴリズム」と呼びます。ただし、場合によっては(たとえば、シンプレックスアルゴリズム)、アルゴリズムの最悪のケースは指数関数的ですが、実際には非常にうまく機能します。 シンプレックスアルゴリズム以外に、この状況の(確定的な)例はありますか?

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