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

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

1
ヒープソートの最悪のケースを見つける
ACM ICPC 2004–2005 Northeastern European contestで問題Hに取り組んでいます。 問題は基本的に、ヒープを構築するためのアルゴリズム(シフトダウン)で最大数の交換を生成する最悪のケースを見つけることです。 入力:入力ファイルにはが含まれています()。nnn1≤n≤50,0001≤n≤50,0001 \le n \le 50{,}000 出力:ヒープになるように、からまでの異なる整数を含む配列を出力します。これをソートされた配列に変換すると、シフト操作の交換の合計数が最大になります。nnn111nnn 入力例:6 対応する出力:6 5 3 2 4 1 そして基本的な出力: [2, 1] [3, 2, 1] [4, 3, 1, 2] [5, 4, 3, 2, 1] [6, 5, 3, 4, 1, 2]

1
行列が1の1つの接続された領域で構成されるように、最小数1を見つける
ましょであるマトリックス。2つのエントリが水平または垂直に隣接していて、両方のエントリが1である場合、それらは隣接していると言います。追加する1の最小数を見つけたいので、すべての1は一連のネイバーを通じて別の1に到達できます。MMM(0,1)(0,1)(0, 1)111111111 例: 100 000 001 ここでは3 1が必要です111: 100 100 111 追加する111の最小数とその場所を効率的に見つけるにはどうすればよいですか?

1
選択と挿入の並べ替えに敵対的な引数を使用するにはどうすればよいですか?
選択と挿入の並べ替えの下限を見つけるために必要な敵対的な引数を見つけるように求められました。それへの参照がどこにも見つかりませんでした。 これについてはいくつか疑問があります。私は通常、「アルゴリズム」ではなく特定の「問題」の下限を見つけるために敵対的な議論が使用されることを理解しています。 マージの問題を理解しました。しかし、どのようにして選択および挿入ソート用に作成できますか?

1
2つの順序付け制約を同時に満たす最大長の部分列を見つける
我々は、セット与えられるの果実を。各フルーツには価格とビタミン含有量ます。果物を順序付けられたペアに関連付けました。次に、ソートされたリストに価格が昇順で、ビタミン含有量が降順で含まれるように、これらの果物を配置する必要があります。F={f1,f2,f3,…,fN}F={f1,f2,f3,…,fN}F=\{f_1, f_2, f_3, …, f_N\}NNNPiPiP_iViViV_ififif_i(Pi,Vi)(Pi,Vi)(P_i, V_i) 例1:および。N=4N=4N = 4F={(2,8),(5,11),(7,9),(10,2)}F={(2,8),(5,11),(7,9),(10,2)}F = \{(2, 8), (5, 11), (7, 9), (10, 2)\} すべての価格が昇順で、ビタミン含有量が降順であるようにリストを配置すると、有効なリストは次のようになります。 [(2,8)][(2,8)][(2, 8)] [(5,11)][(5,11)][(5, 11)] [(7,9)][(7,9)][(7, 9)] [(10,2)][(10,2)][(10, 2)] [(2,8),(10,2)][(2,8),(10,2)][(2, 8), (10, 2)] [(5,11),(7,9)][(5,11),(7,9)][(5, 11), (7, 9)] [(5,11),(10,2)][(5,11),(10,2)][(5, 11), (10, 2)] [(7,9),(10,2)][(7,9),(10,2)][(7, 9), (10, 2)] [(5,11),(7,9),(10,2)][(5,11),(7,9),(10,2)][(5, 11), (7, 9), (10, 2)] 上記のリストから、最大サイズのリストを選択したいと思います。複数のリストに最大サイズがある場合、価格の合計が最小となる最大サイズのリストを選択する必要があります。上記の例で選択する必要があるリストは、です。{(5,11),(7,9),(10,2)}{(5,11),(7,9),(10,2)}\{(5, …

3
TSPのこのロジスティックバリアントの名前は何ですか?
変種とロジスティックの問題があり。それはとても自然なことです、私はそれがオペレーションズリサーチまたは類似の何かで研究されたと確信しています。これは問題を見る1つの方法です。TSPTSP\text{TSP} 私が持っているデカルト平面上の倉庫を。倉庫から他のすべての倉庫へのパスがあり、使用される距離メトリックはユークリッド距離です。さらに、異なるアイテムがあります。各アイテムは、任意の数の倉庫に存在できます。コレクターがあり、原点開始点が与えられます。コレクターには注文が与えられるため、アイテムのリストです。ここでは、リストに個別のアイテムとそれぞれ1つだけが含まれていると想定できます。注文のすべてのアイテムを受け取るために、いくつかの倉庫を訪問するから始まる最短のツアーを決定する必要があります。PPPんんn1 ≤ I ≤n1≤私≤ん1 \leq i \leq nsss(0,0)(0、0)(0,0)sss でランダムに生成されたインスタンスの視覚化を以下に示します。倉庫は円で表されます。赤はアイテム、青はアイテム、緑はアイテムです。いくつかの開始点と注文()が与えられた場合、注文を完了するには、赤、青、緑の倉庫をそれぞれ1つ選択する必要があります。偶然にも、この例には複数の色の倉庫がないため、すべて1つのアイテムしか含まれていません。この特定のインスタンスは、set-TSPの場合です。P=35P=35P = 35111222333sss1,2,31,2,31,2,3 問題が確かにことを示すことができます。各アイテムが異なる倉庫ある場合を考えます。注文には、すべてのアイテムが含まれています。次に、すべての倉庫を訪問し、そうする最短のツアーを見つける必要があります。これはインスタンスを解決することと同じです。NPNP\mathcal{NP}iiiPiPiP_iPiPiP_iTSPTSP\text{TSP} 少なくともロジスティクス、ルーティング、および計画のコンテキストでは非常に有用であるため、これは以前に検討されたはずです。2つの質問があります。 問題の名前は何ですか? 問題を近似することをどれだけうまく期待できますか(仮定して)?P≠NPP≠NP\mathcal{P} \neq \mathcal{NP} 問題の名前や参照に非常に満足しています。たぶん、2番目のポイントへの答えは簡単に続くか、自分でそれを見つけることができます。


2
合計でのオーバーフローの検出
私はの配列を指定していたとの固定幅の整数を(彼らは幅のレジスタに収まるすなわち)、。2の補数演算を備えたマシンで合計を計算します。これは、ラップアラウンドセマンティクスでを法とする加算を実行します。それは簡単ですが、合計がレジスタサイズをオーバーフローする可能性があり、オーバーフローすると、結果が不正になります。nnnwwwa1,a2,…ana1,a2,…ana_1, a_2, \dots a_nS=a1+…+anS=a1+…+anS = a_1 + \ldots + a_n2w2w2^w 合計がオーバーフローしない場合は、それを計算し、オーバーフローがないことをできるだけ早く確認したいと考えています。合計がオーバーフローした場合、それがオーバーフローしていることだけを知りたいので、値は気にしません。 部分的な合計がオーバーフローする可能性があるため、単純に順番に数値を追加することはできません。たとえば、8ビットレジスタでは、は有効であり、合計がですが、部分合計がレジスタ範囲オーバーフローします。(120,120,−115)(120,120,−115)(120, 120, -115)125125125120+120120+120120+120[−128,127][−128,127][-128,127] 明らかに、より大きなレジスタをアキュムレータとして使用することもできますが、可能な限り最大のレジスタサイズをすでに使用している興味深いケースを想定してみましょう。 現在の部分合計とは逆の符号を持つ数値を追加するよく知られた手法があります。この手法は、キャッシュに優しくなく、分岐予測や投機的実行をあまり活用しないという犠牲を払って、すべてのステップでオーバーフローを回避します。 おそらく部分合計をオーバーフローする権限を利用し、オーバーフローフラグ、キャッシュ、分岐予測子、および投機的実行とロードを備えた一般的なマシンでより高速な手法はありますか? (これは、オーバーフローの安全な合計のフォローアップです)

4
アルゴリズムについて詳しく学ぶには
私はこのサイトを非常に興味を持って読んでいますが、多くのことが頭に浮かんでいます。これにより、アルゴリズムとCS全般についてもっと学びたいと思っています。私の研究からわかる限り、これを行うには主に2つの方法があります。 厚くて重い本で、ゆっくりと確実に読み進めることができます。 私は「実践して学ぶ」ことができ、すばらしい本を読むことができますが、一冊一冊読むのではなく、興味のある部分に移動して、好きなアルゴリズムの実装と適用に取り組みます。 ? 私の質問は、あなたは上記のどれを使用しましたか、そしてあなたは誰かに同じアプローチを勧めますか?

1
注文を照合する最も効率的な方法
2つの2Dアレイを考えます B私はjB私jB_{ij} (購入配列)および S私はjS私jS_{ij} (sell array)それぞれ 私トンの時間私thi^{th} elementは浮動小数点値の配列に関連付けられ、各浮動小数点値は整数の配列に関連付けられます。 例えば B = [ 0001 => [ 32.5 => {10, 15, 20}, 45.2 => {48, 16, 19}, ..., k1 ], 0002 => [ 35.6 => {17, 35, 89}, 68.7 => {18, 43, 74}, ..., k2 ] ] 同様に、sell配列についても同様です。 これは、株式/商品取引所の注文関連付けシステムに似ています。 BuyOrderBook = [ …

1
サブセット合計、疑似多項式時間動的プログラミングソリューション?
しばらく前にP対NPの問題を発見し、最近サブセットサム問題に取り組みました。サブセット和問題に関するWikipediaの記事と、サブセット和アルゴリズムの質問を読みました 私は問題を見ていくつかの解決策を見つけましたが、今のところそれらはNPのようですが、NP時間で十分に高速なアルゴリズムを作成できると思います。 私の問題は理論的には私が上手ではないので、クック・レビンの定理や非決定論的チューリングマシンについて話すことはあまり役に立ちません。 ウィキペディアにある疑似多項式の時間動的プログラミングのサブセットの合計について説明します。 私はそれを読みましたが、なぜPではなくNPであるかという一般的な概念は理解しています(それを使用した操作ではなく入力のサイズに関連しています)が、アルゴリズムは理解していません。 誰かがいくつかの数字とそれがどのように機能するかを例に挙げていただければ幸いです。それは次のようになるので、それは私に多くの助けになるでしょう: 将来のアルゴリズムを改善するためのアイデアを教えてください アルゴリズムがNPではなく疑似多項式である場合、直感的に理解できるようにしてください。

2
メタアルゴリズムとは何ですか?
私は現在、乗法的重み更新メタアルゴリズムに関する調査論文を読んでいます。それらが「メタアルゴリズム」によって何を意味するのか私にはよくわかりません。それは単に、さまざまな目的に使用できる一般的なアルゴリズムですか? この用語の正確な定義は見つかりませんでしたが、機械学習におけるブースティングなどのメタアルゴリズムの例を見つけました。

3
二分探索木の「ランク」とは何ですか、またどのように役立ちますか?
ランク付けされた二分探索木とは何か、なぜランク付けが重要なのかについて、ちょっと心に納得できません。誰かが私のためにいくつかのことを明確にしてくれることを期待しています。 調べた内容: 私が読んだことから、ランク付けされた二分探索木は、各ノードに変数「ランク」が付加されているツリーです。 ここでの質問では、誰かが二分探索木のノードのランクを決定するために次のことができると述べています: ランクをゼロから始めます。バイナリ検索がルートから下に進んでいくときに、検索がスキップするすべての左側のサブツリーのサイズを合計します。また、検索されたアイテムよりも小さいパスに沿ったノードも含めます。これらは、検索パス上の正しい子の親にすぎません。 質問: ランクは、ツリー内の特定のノードに到達するために必要なノードの数(ルートの場合は1つ)を反映する単なる数値のようです。そうですか?それだけではノードのランクがノードの深さと同じになるだけのように思われるので、それは私には正しくないと思われました。 また、「重量」と「ランク」の違いは何ですか?特定のバイナリ検索ツリーのノードに重みが付けられている場合、それはユーザー/開発者によってランダムな値が割り当てられているだけですか? 最後に、ランクを付ける意味は何ですか?私の最初の考えは、優先順位を示すために使用できるということです。しかし、その場合、開発者はなぜウェイトを使用しないのですか? その他:ここ のサイトも確認しました。ランクの計算方法を説明していますが、まだ概念が理解できていません。 助けてくれてありがとう。

2
ソートされた文字列の辞書式順序で文字列のリストをソートする
LETアルファベット上の文字列の集合で合計に含まれていることをのシンボル。あAA{ 0 、… 、m − 1 }{0,…,m−1}\{0,\ldots,m-1\}んnn あなたの仕事は、各文字列を内部的にソートし、結果の文字列を辞書式順序でソートすることです。(アルゴリズムはこのように動作する必要はありません。) 例: 入力:33123 15 1 0 54215 21 12 出力:0 1 12 12 12333 12455 15 時間と空間でそれを行う方法を見つけました。O (m + n )O(m+n)O(m+n)O (m n )O(mn)O(mn) サイズ配列を作成し、すべてのセルに初期値を与えるような配列を使用しているため、スペースは時間よりも大きくなっています。んnnO (1 )O(1)O(1) 各文字列(時間とスペース)をソートするためにバケットソートを使用し、コレクション自体(時間とスペース)をソートするためにワードツリーを使用しました。しかし、私の解決策は複雑すぎます。O (m + n )O(m+n)O(m+n)あAAO (m + n )O(m+n)O(m+n)O (m n )O(mn)O(mn) 時間とより少ないスペース、またはより速い、より良いソリューションがありますか?O (m + n …

1
昨日のStackOverflowの停止に続いて-正規表現のマッチングは本当に難しいですか、それとも実装は単に非効率的ですか?
昨日、StackOverflowが30分ダウンしました。その後、彼らはそれについてブログの投稿を書き、問題が正規表現マッチングの予想外に高い複雑さから生じたことを詳述しました。 つまり、正規表現a+bは、文字列aaaaaaaaaaaaaacで実行される場合、バックトラックを使用するため、時間で実行されますは文字数です。O (ん2)O(ん2)O(n^2)んんna 次のPythonコードで問題を再現できます。私のコンピューターでは、実行に4秒以上かかります。 import re, time start = time.time() re.findall(r'\s+$', ' '*20000 + 'x') print(time.time() - start) これは私にとって非常に驚きました。私が考えたのだろう必要があるだろうこれ、正規表現からDFAを構築し、それを通じて、希望の文字列を実行することにより、例えば、正規表現マッチャがより効率的に動作することを考えていると思います(DFA工事は含みません)。O (n )O(ん)O(n) (たとえば、Cormen、Leiserson、Rivestによる本のアルゴリズムの紹介は、Knuth-Morris-Prattアルゴリズムを導入する方法について同様のアルゴリズムを通過します)。 私の質問:アルゴリズムを許可しない正規表現マッチングに本質的に難しいものはありますかO (n )O(ん)O(n)、または単に非効率的な実装(Pythonで、StackOverflowが使用するものなど)について話しているだけですか?

3
アルゴリズム:ゲーム内のダンジョンを通る最短経路を見つける
バックグラウンド 最近PCゲーム「ダーケストダンジョン」をプレイしていた。ゲームでは、下の図に示すように、部屋がつながったダンジョンを探索する必要があります。 ルールは次のとおりです。 固定の部屋(入り口)から始めます。開始する場所を選択することはできません。 目標は、すべての部屋を少なくとも1回訪問することです 隣接する部屋間の距離は、すべての部屋で同じです。 部屋や散歩道は何度でも訪れることができます 質問 少なくとも一度はすべての部屋を訪れる入り口からの最短経路は何ですか? サブ質問: この問題を解決するために使用できるアルゴリズムは何ですか? 私のような人が自由に(そしてかなり簡単に)使用できる実装はありますか? 私が試したこと 私はこれまたはこれのような他の質問を答えを見つけることなく見つけました。(基本的な)TSPに精通しており、簡単なTSPをコーディングして解決できます。ハミルトニアンパスは複数回の訪問を許可しないため、私の問題を解決しませんでした。中国の郵便配達の問題は、私はすべてのエッジを訪問する必要はありませんので、また、その基本的な形で、ここでは適用されません。 更新 コメントで述べたように、私はコンピュータサイエンティストではなく、数学的なステートメントを証明することにも興味がありません(おそらく、この質問を後でスタックオーバーフローに投稿します)。また、私はプログラマーではないため、自分でソリューションをコーディングできる可能性は非常に低くなっています。しかし、私はその性質の問題を扱う最初の人ではないと思います。 @Shreeshおよび@Dibによると、次の手順を適用できます。 すべての部屋でペアワイズ距離行列を作成し、すべての部屋の間にエッジを追加します。 標準ソルバー(例:concorde)を使用してTSPを解く 入り口から始めて、解決策に従ってすべての部屋を訪れます。隣接していない部屋の場合は、それらの部屋の間の最短距離に置き換えます。 この手順は問題の答えを提供しますか?

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