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

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

4
DAGの推移的な削減
DAGが与えられた場合に推移的削減を見つけるためのO(V + E)アルゴリズムを探しています。 これは、可能な限り多くのエッジを削除するため、uからvに到達できる場合、任意のvおよびuに対して、エッジの削除後も到達できます。 これが標準的な問題である場合は、モデルの解決策を示してください。
13 algorithms  graphs  dag 


2
トリプルネストループの時間の複雑さ
次のトリプルネストループを検討してください。 for (int i = 1; i <= n; ++i) for (int j = i; j <= n; ++j) for (int k = j; k <= n; ++k) // statement ここでのステ​​ートメントは、正確にn (n + 1 )(n + 2 )実行されます回。誰かがこの式がどのように得られたか説明してもらえますか?ありがとうございました。n(n+1)(n+2)6n(n+1)(n+2)6n(n+1)(n+2)\over6


1
オーバーフロー安全合計
合計が幅レジスタにも収まるように、固定幅整数(幅レジスタに収まる)、が与えられたとします。w a 1、a 2、… a n a 1 + a 2 + ⋯ + a n = S wnnnwwwa1、2、… ana1,a2,…ana_1, a_2, \dots a_na1+ a2+ ⋯ + an= Sa1+a2+⋯+an=Sa_1 + a_2 + \dots + a_n = Swww 各プレフィックスの和も幅レジスタに収まるように番号をいつでも置換できるように思えます。S i = b 1 + b 2 + ⋯ + b i wb1、b2、… …

1
ランダム数独ジェネレータ
完全にランダムな数独を生成したい。 数独グリッドの定義間の整数のグリッドといくつかの要素を省略することができます。グリッドは、数独の制約(各行、列、整列された正方形に繰り返し要素がない)に一致する独自の方法があれば有効なパズルであり、その点で最小です(つまり、これ以上省略した場合)要素にはパズルに複数の解決策があります)。9 × 99×99\times91119993 × 33×33\times3 すべての数独パズルが同等になるように、ランダムな数独パズルを生成するにはどうすればよいですか?

2
段落内の日付に関連するイベントの特定
段落で指定された日付が、段落内の特定のイベント(フレーズ)に関連していることを識別するアルゴリズム的アプローチはありますか? 例として、次の段落を検討してください。 1970年6月、偉大な指導者が誓いを立てました。しかし、彼が国の手綱を引き継いだのは、国務大臣の死後の1972年5月以降でした。1980年半ばまで人気の支持を得ていた彼は、その後影響力を失い始めました。 2タプル(日付、イベント)を生成できるアルゴリズム(決定論的または確率的)がありますか?日付で発生したイベントは段落によって暗示されますか?上記の場合: (1970年6月、偉大な指導者が誓いを立てた) (1972年5月、手綱を引き継いだ) またはそれ以上 (1972年5月、偉大な指導者が手綱を引き継ぎました) (1980年、影響力の低下) #後期追加

1
カードゲーム「戦争」の修正版の分析
通常子供たちがプレイする単純なゲームである戦争ゲームは、52枚のトランプの標準デッキを使用して2人でプレイされます。最初は、デッキがシャッフルされ、すべてのカードが2人のプレイヤーに2枚配られます。そのため、それぞれにランダムな順序で26枚のランダムカードがあります。各プレイヤーが両方のデッキのカードとカードの順序を知ることができるように、プレイヤーは両方のデッキを調べることができます(変更はできません)。これは通常、実際に行われるメモですが、ゲームのプレイ方法については何も変更せず、質問のこのバージョンを完全に決定論的に保つのに役立ちます。 次に、プレイヤーはそれぞれのデッキの一番上のカードを公開します。大きい方のカードを公開したプレーヤー(通常の順序:2、3、4、5、6、7、8、9、10、ジャック、クイーン、キング、エース)がラウンドに勝利し、最初にカードを置きます(デッキの一番下にある高いカード)、デッキの一番下にある相手のカード(低いカード)(通常、この順序は強制されませんが、この質問の最初のバージョンを決定論的に保つため、順序が強制されます)。 同点の場合、各プレイヤーは自分のデッキの上から4枚の追加カードを公開します。1人のプレイヤーが示す4枚目のカードが他のプレイヤーが示す4枚目のカードよりも高い場合、より高い4枚目のカードを持つプレイヤーがタイブレーカー中にプレイしたすべてのカードを獲得します。勝者のデッキ(先入れ先出し、つまり古いカードが一番下に配置されます)に続き、敗者のカードが(同じ順序で)続きます。 その後の同点の場合、同点の勝者が決定されるまでプロセスが繰り返されます。一人のプレイヤーがカードを使い果たし、引き分けを続けることができない場合、まだカードを持っているプレイヤーが勝者として宣言されます。両方のプレイヤーが同時にプレイするカードを使い果たした場合、ゲームはタイと宣言されます。 ラウンドは、1人のプレイヤーがカードを使い果たすまで(つまり、デッキにカードがなくなるまで)行われ、その時点で、まだカードを持っているプレイヤーが勝者として宣言されます。 ゲームについてこれまで説明してきたように、結果の決定にはスキルも運も関与していません。52枚のカードの順列の数には限りがあるため、最初にデッキに対処する方法には限りがあり、それに従っています(ゲーム内の唯一の状態情報は両方のプレイヤーのデッキの現在の状態なので)各ゲーム設定の結果はアプリオリに決定できます。確かに、戦争のゲームに勝つことと、同じトークンで負けることです。また、戦争のゲームがネクタイまたは無限ループになる可能性を残します。上記の完全に決定的なバージョンでは、そのような場合もそうでない場合もあります。 ゲームをより面白くしようとするゲームのいくつかのバリエーション(そして、いや、すべてが飲みゲームになるわけではありません)。ゲームをより面白くするために私が考えた1つの方法は、プレイヤーが特定のラウンドで自動「トランプ」を宣言できるようにすることです。各ラウンドで、いずれかのプレイヤー(または両方のプレイヤー)が「トランプ」を宣言できます。一人のプレイヤーが「切り札」を宣言した場合、そのプレイヤーはプレイされているカードに関係なくラウンドに勝ちます。両方のプレイヤーが「切り札」を宣言した場合、ラウンドは同点として扱われ、それに応じてプレイが続行されます。 プレイヤーのトランプ能力を制限するさまざまなルールを想像できます(無制限のトランプは、プレイヤーが毎ターントランプするので、常にタイゲームになります)。このアイデアに基づいて、異なるトランプ制限メカニズムを使用した戦争の2つのバージョン(私の頭のすぐ上。これらの線に沿ったより興味深いバージョンがおそらく可能です)を提案します。 フリークエンシーウォー:プレイヤーは、前のラウンドでトランプしなかった場合にのみトランプすることができます。kkk Revenge-War:プレイヤーは、前のラウンドでラウンドに勝っていない場合にのみトランプすることができます。kkk 次に、上記の各バージョンに適用される質問について説明します。 いくつかの可能な初期ゲーム構成のセットに対して、それを使用するプレイヤーが常に勝つような戦略はありますか(強く勝つ戦略)?もしそうなら、この戦略は何ですか?そうでない場合は、なぜですか? いくつかの可能な初期ゲーム構成のセットに対して、それを使用するプレイヤーが常に勝つか、または引き分けをすることができるような戦略がありますか(勝ち戦略)。もしそうなら、この戦略は何ですか?そうでない場合は、なぜですか? 彼らの初期のゲームの設定には必勝法(すなわち、任意の固定の戦略を用いるプレーヤーが存在しないようなものである常に一定の戦略を用いるプレーヤーで敗北することができますSが" )?もしそうなら、彼らは何であり、説明しますか?SSSS′S′S' 明確にするために、私は「戦略」を、戦略を使用しているプレイヤーが何ラウンドで切り捨てるべきかを決定する固定アルゴリズムとして考えています。たとえば、「できる限りトランプ」アルゴリズムは戦略であり、アルゴリズム(ヒューリスティックアルゴリズム)です。私が尋ねている別の方法はこれです: これらのゲームをプレイするための優れた(またはおそらく最適な)ヒューリスティックはありますか? kkkk = 0k=0k=0

3
このアルゴリズムはまだバイナリ検索アルゴリズムと見なされますか?
2番目のコードカタ(毎回異なるメソッドを使用してバイナリ検索アルゴリズムを5回実装するように要求する)を実行している間に、次のように機能するわずかに異なるソリューションを思い付きました。 長さ100のソートされた配列があり、その開始フィールドに数字200が含まれ、その終了フィールドに数字400が含まれている場合、人間を研究する数学として、私は通常のバイナリ検索アルゴリズムのようなフィールド50ではなく、番号270です。 次に、配列のフィールド35の数が270の場合、35は検索したインデックスです。 そうでない場合は、取得した数値(280など)を比較し、配列の下部を取得する操作を繰り返します(したがって、開始フィールドに200を含み、終了フィールドに280を含む35フィールドがあります)。私が見つけた数は、私が探しているもの、または配列の上部よりも大きいです(たとえば260を取得しました:現在、65のインデックスがあり、最初のインデックスには260が含まれ、最後のインデックスには400が含まれています。取得した数値が検索している数値よりも小さい場合、このサブ配列のインデックス4(配列全体のインデックス39)。 問題は、このアルゴリズムをバイナリ検索アルゴリズムと見なすことはできますか?そうでない場合、独自の名前を持っていますか?

2
動的プログラミングを使用して再帰アルゴリズムの時間の複雑さを軽減できるのはいつですか?
動的プログラミングは、再帰アルゴリズムの実行に必要な時間を短縮できます。動的プログラミングは、アルゴリズムの時間の複雑さを軽減するのに役立つことを知っています。再帰的アルゴリズムで満たされた場合、動的計画法を使用するとアルゴリズムの時間の複雑さが軽減されるという一般的な条件はありますか?動的プログラミングはいつ使用する必要がありますか?

4
巡回セールスマン問題に適用されたダイスクトラのアルゴリズム
私は初心者(計算複雑性理論の初心者)で、質問があります。 「巡回セールスマン問題」があるとしましょう。ダイクストラのアルゴリズムの次のアプリケーションはそれを解決しますか? 開始点から、2点間の最短距離を計算します。ポイントに行きます。ソースポイントを削除します。次に、現在のポイントから次の最短距離ポイントを計算します... 次の利用可能な最短距離ポイントを移動しながら、すべてのステップでグラフを小さくします。すべてのポイントを訪問するまで。 これは巡回セールスマンの問題を解決しますか。

2
PTAS定義とFPTAS
私が読んだものから preliminary version of a chapter of the book “Lectures on Scheduling” edited by R.H. M¨ohring, C.N. Potts, A.S. Schulz, G.J. Woeginger, L.A. Wolsey, to appear around 2011 A.D. これはPTASの定義です。 問題の多項式時間近似スキーム(PTAS)は、時間サイズが入力サイズで多項式である近似スキームです。XXX およびFPTASの定義 問題の完全多項式時間近似スキーム(FPTAS) は、時間の複雑さが入力サイズの多項式であり、1 /多項式でもある近似スキームです。XXXϵϵ\epsilon それから作家は言う: したがって、PTASの場合、に比例する時間の複雑さを許容できます入力サイズです。ただし、この時間の複雑さは指数関数的です。FPTASは指数関数的に増加する時間の複雑さを持つことはできませんが、比例する時間の複雑さは問題ありません。最悪の場合の近似に関して、FPTASは、NP困難な問題に対して導出できる最も強力な結果です。|I|1/ϵ|I|1/ϵ|I|^{1/\epsilon}|I||I||I|1/ϵ1/ϵ1/\epsilon1/ϵ1/ϵ1/\epsilon|I|8/ϵ3|I|8/ϵ3|I|^8/\epsilon^3 次に、次の図を提案して、問題のクラス間の関係を示します。 これが私の質問です: PTASとFPTASの定義、どのライターがあると結論んFPTASが指数関数的に成長する時間複雑持つことはできません?そして、それがそのような時間の複雑さを持つことができるならば、それはどんな違いを作りますか?1/ϵ1/ϵ1/\epsilon 時間複雑さのようなのために許容可能であるFPTASそれがためではないPTAS、なぜFPTASはのサブセットであると考えられるPTAS?(n+1/ϵ)3(n+1/ϵ)3(n+1/\epsilon)^3 彼の意味:FPTASは、NP困難な問題について導出できる最も強力な結果です。 全体として、これらが概念に対して正確に何を意味するか、そしてそれらの明確な特性は何かを知りたいのです。 前もって感謝します。

3
抽象ゲームの最適戦略
私はインタビューで次の問題を与えられました(過去に自分のやり方をだまそうとするのではなく、すでに解決できていません):ゲームは正の整数始まります。(たとえば、A 0 = 1234。)この数値はバイナリ表現に変換され、Nは1に設定されたビット数です。(たとえば、A 0 = b 100 1101 0010、N = 5。)A0A0A_0A0=1234A0=1234A_0 = 1234NNN111A0=b100 1101 0010A0=b100 1101 0010A_0 = b100\ 1101\ 0010N=5.N=5.N = 5. プレイヤー1は、A 0よりも小さい数字選択します。B 0は 1に1ビットのみが設定されていなければならない(例:B 0 = B 10 0000 0000 = 512ましょう。)A 1 = A 0 - B 0。(例A 1 = 1234 - 512 = 722 …

1
サンタよりもルパートにとってプレゼントの袋を詰めるのは簡単ですか?
または:プレゼントを受け取るためにルパートが必要ですか? ルーティングの問題は別として、サンタは次の問題に直面しています(何度も何度も): capacity¹とバッグを考えるとCCCやプレゼントの集合{ p1、… 、pn}{p1、…、pn}\{p_1, \dots, p_n\}サイズでそれぞれ、s私s私s_iは、彼は子供たちが作りたい{ c1、… 、ck}{c1、…、ck}\{c_1, \dots, c_k\}幸せ。彼は子供のことを、すべての希望リストから知っているcjcjc_j値存在p私p私p_i正確にvi 、j∈ Q≥ 0v私、j∈Q≥0v_{i,j} \in \mathbb{Q}_{\geq 0}多くを。 これはプレゼントの(対で互いに素)セットそのすべてフィットして、それぞれの子のために選択すること、すなわち私j⊆ [ 1 .. n ]私j⊆[1 ..n]I_j \subseteq [1..n] 、∑J ∈ [ 1 .. K ]∑I ∈ Ijs私≤ C∑j∈[1 ..k]∑私∈私js私≤C\qquad\displaystyle \sum_{j \in [1..k]} \sum_{i \in I_j} s_i \leq C そして、可能な限り多くの幸福が続きます²、すなわち ?マックス!∑J ∈ [ …

4
n個の設定ビットを持つ数値を正確に生成するためのPRNG
現在、バイナリデータを生成するコードを書いています。具体的には、指定されたビット数で64ビットの数値を生成する必要があります。より正確には、プロシージャはを取り、正確にビットがに設定され、残りが0に設定された擬似ランダム64ビット数を返す必要があります。0&lt;n&lt;640&lt;n&lt;640 < n < 64nnn111 私の現在のアプローチには、次のようなものが含まれます。 擬似乱数64ビット数を生成します。kkk のビットをカウントし、結果を保存します。kkkbbb 場合、出力します。それ以外の場合は1に進みます。b=nb=nb = nkkk これは機能しますが、洗練されていないようです。これよりもエレガントにセットビットの数を生成できるPRNGアルゴリズムの種類はありますか?nnn

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