タグ付けされた質問 「runtime-analysis」

入力サイズの増加に伴うアルゴリズムのランタイムの増加を推定する方法に関する質問。

3
アルゴリズム分析の魔法の背後にあるシステムはありますか?
アルゴリズムの実行時間を分析する方法については、多くの質問があります(たとえば、ランタイム分析およびアルゴリズム分析を参照)。多くは似ています。たとえば、ネストされたループのコスト分析や、分割統治アルゴリズムを求めるものですが、ほとんどの答えはオーダーメイドのようです。 一方、別の一般的な質問への回答では、いくつかの例を使用してより大きな全体像(特に漸近解析に関する)を説明していますが、手を汚す方法はありません。 アルゴリズムのコストを分析するための構造化された一般的な方法はありますか?コストは、実行時間(時間の複雑さ)、または実行された比較の数、スペースの複雑さなどのコストのその他の尺度である場合があります。 これは、初心者を指すのに使用できる参照質問になるはずです。したがって、通常よりも広い範囲です。少なくとも1つの例で説明されているが、多くの状況をカバーする、一般的で教訓的に提示された答えを与えるように注意してください。ありがとう!

4
(いつ)ハッシュテーブルルックアップはO(1)ですか?
ハッシュテーブルルックアップは一定の時間で動作するとよく言われます。ハッシュ値を計算すると、配列ルックアップのインデックスが得られます。しかし、これは衝突を無視します。最悪の場合、すべてのアイテムが同じバケットに到着し、ルックアップ時間は線形()になります。Θ(n)Θ(n)\Theta(n) ハッシュテーブルルックアップを本当にすることができるデータの条件はありますか?それは平均的にのみですか、またはハッシュテーブルにO (1 )最悪のケースルックアップを含めることができますか?O(1)O(1)O(1)O(1)O(1)O(1) 注:ここではプログラマーの視点から来ています。ハッシュテーブルにデータを格納すると、ほとんど常に文字列またはいくつかの複合データ構造であり、データはハッシュテーブルの有効期間中に変更されます。したがって、完璧なハッシュについての答えはありがたいですが、それらはかわいいですが、逸話的であり、私の観点からは実用的ではありません。 PSフォローアップ:ハッシュテーブル操作O(1)はどのようなデータですか?

5
最悪の場合、このソートアルゴリズムはΘ(n³)であり、Θ(n²)ではありませんか?
データ構造とアルゴリズムの講座を始めたばかりで、ティーチングアシスタントは整数の配列を並べ替えるための次の擬似コードを提供してくれました。 void F3() { for (int i = 1; i < n; i++) { if (A[i-1] > A[i]) { swap(i-1, i) i = 0 } } } 明確ではないかもしれませんが、ここではソートしようとしている配列のサイズです。nnnA いずれにしても、ティーチングアシスタントはクラスにこのアルゴリズムは時間(最悪の場合、私は信じている)であると説明しましたが、逆に並べ替えられた配列で何度も調べても、私には、ではなくであるように思われます。Θ (n 2)Θ (n 3)Θ(n3)Θ(n3)\Theta(n^3)Θ(n2)Θ(n2)\Theta(n^2)Θ(n3)Θ(n3)\Theta(n^3) 誰かがこれがΘ(n3)Θ(n3)Θ(n^3)ではなくΘ(n ^ 3)である理由を説明できΘ(n2)Θ(n2)Θ(n^2)ますか?

3
バイナリ検索が3項検索よりも高速なのはなぜですか?
バイナリ検索を使用して要素の配列を検索するには、最悪の場合、回の反復が必要です。これは、各ステップで検索スペースの半分をトリミングするためです。代わりに、「三分探索」を使用した場合、各反復で探索空間の3分の2を切り捨てるので、最悪の場合は反復が必要です...log 2 N log 3 N &lt; log 2 NNNNlog2Nlog2⁡N\log_2 Nlog3N&lt;log2Nlog3⁡N&lt;log2⁡N\log_3 N < \log_2 N 三項検索の方が速いように思えますが、なぜ二項検索を使用するのですか?

3
関数型言語のアルゴリズムの複雑さはどのようにモデル化されますか?
アルゴリズムの複雑さは、下位レベルの詳細に依存しないように設計されていますが、命令型モデルに基づいています。たとえば、ツリー内のノードへの配列アクセスや変更にはO(1)時間かかります。これは、純粋な関数型言語では当てはまりません。Haskellリストへのアクセスには直線的な時間がかかります。ツリー内のノードを変更するには、ツリーの新しいコピーを作成する必要があります。 次に、関数型言語のアルゴリズムの複雑さの代替モデリングが必要ですか?

2
バイナリ検索のbig-Oのログがベース2ではないのはなぜですか?
コンピューターサイエンスアルゴリズムを理解するのは初めてです。私はバイナリ検索のプロセスを理解していますが、その効率性について少し誤解しています。 要素のサイズでは、特定の要素を見つけるのに平均でnステップかかります。両側の底2の対数を取ると、log 2(s )= nが得られます。それでは、バイナリ検索アルゴリズムの平均ステップ数はlog 2(s )ではありませんか?s = 2ns=2ns = 2^nnnnログ2(s )= nログ2⁡(s)=n\log_2(s) = nログ2(s )ログ2⁡(s)\log_2(s) バイナリ検索アルゴリズムに関するこのウィキペディアの記事では、平均パフォーマンスはと述べてい。これはなぜですか?なぜこの数字ははないのですか?O (ログn )O(ログ⁡n)O(\log n)ログ2(n )ログ2⁡(n)\log_2(n)

3
ハードウェア/実装は、アルゴリズムの時間/空間の複雑さに影響しますか?
私はCSの学生でもないので、これはばかげた質問かもしれませんが、どうか私に耐えてください... プレコンピューター時代では、引き出しの配列のようなものでのみ配列データ構造を実装できます。値を抽出する前に、対応するインデックスでドロワーを見つける必要があるため、配列検索の時間の複雑さはバイナリ検索を想定。O(log(n))O(log(n))O(log(n)) しかし、コンピューターの発明は大きな違いをもたらしました。最近のコンピューターはRAMから非常に高速に読み取ることができるため、配列ルックアップの時間の複雑さはと考えています(技術的にはそうではありません。O(1)O(1)O(1) 別の例は、Python辞書です。誤って記述されたオーバーロードマジックメソッド(または、途方もなく不運、つまり、多くのハッシュ衝突を伴うキーで辞書アクセスの複雑さを得るかもしれませんが、通常はと推定されます。この場合、時間の複雑さは、Python辞書のハッシュテーブル実装と、ハッシュ関数のキーの実装の両方に依存します。O(n)O(n)O(n)__hash__O(1)O(1)O(1) これは、ハードウェア/実装がアルゴリズムの時間の複雑さに影響する可能性があることを意味しますか?(両方の例はアルゴリズムではなくデータ構造に関するものですが、後者は前者に基づいて構築されており、データ構造の時間の複雑さを聞いたことがないため、ここでは「アルゴリズム」という用語を使用しています) 私にとって、アルゴリズムは抽象的かつ概念的であり、時間/空間の複雑さなどの特性は、特定の方法で実装されているかどうかによって影響されるべきではありませんが、そうですか?

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

3
選択ソートがバブルソートよりも速いのはなぜですか?
ウィキペディアには、「...選択ソートはほとんど常にバブルソートおよびGNOMEソートよりも優れている」と書かれています。どちらもバブルソートよりも選択ソートが速いと考えられる理由を誰にでも説明してください: 最悪の場合の時間の複雑さ:O( n2)O(n2)\mathcal O(n^2) 比較の数: O( n2)O(n2)\mathcal O(n^2) 最適な時間の複雑さ: バブルソート:O(n )O(n)\mathcal O(n) 選択ソート:O( n2)O(n2)\mathcal O(n^2) 平均ケース時間の複雑さ: バブルソート:O( n2)O(n2)\mathcal O(n^2) 選択ソート:O( n2)O(n2)\mathcal O(n^2)

3
逆アッカーマンよりも成長が遅い関数は、実行時の境界に表示されますか?
一部の複雑なアルゴリズム(union-find)には、漸近時間の複雑さに現れるほぼ一定の逆アッカーマン関数があり、ほぼ一定の逆アッカーマン項が無視される場合、最悪の場合の最適時間です。 最もよく知られている最悪の場合の時間を与える、逆アッカーマンよりも基本的に遅くなる関数(多項式または指数などの変換の下でアッカーマンと等価ではない関数の逆関数)を含む実行時間を持つ既知のアルゴリズムの例はありますか根本的な問題を解決するための複雑さ?

2
アルゴリズムを記述し、それらを証明し、分析する方法は?
The Art of Computer Programming(TAOCP)を読む前に、これらの質問を深く考えたことはありません。擬似コードを使用してアルゴリズムを記述し、それらを理解し、成長の順序についてのみ実行時間を推定します。TAOCPは徹底的に私の心を変更します。 TAOCPは、ステップとgotoを組み合わせた英語を使用してアルゴリズムを説明し、フローチャートを使用してアルゴリズムをより簡単に描写します。低レベルのように見えますが、特にフローチャートにはいくつかの利点があることに気付きました。計算がその矢印をたどるときの現在の状態についてのアサーションで各矢印にラベルを付け、アルゴリズムの帰納的証明を行うことができます。著者は言う: 著者の主張は、図4で行われたように、すべてのアサーションが暗黙的に満たされた点に到達した場合にのみアルゴリズムが有効である理由を本当に理解しているということです。 私はそのようなことを経験していません。別の利点は、各ステップが実行される回数をカウントできることです。キルヒホッフの最初の法則で確認するのは簡単です。実行時間を正確に分析していないため、実行時間を推定するときに一部が省略された可能性があります。±1±1\pm1 成長の順序の分析は役に立たない場合があります。たとえば、クイックソートとヒープソートはすべてであるため区別できません。ここで、はランダム変数予想数です。したがって、定数を分析する必要があります。およびしたがって、と良い。また、場合によっては、分散などの他の量を比較する必要があります。実行時間の増加順序の大まかな分析だけでは十分ではありません。TAOCPとしてE(T(n))=Θ(nlogn)E(T(n))=Θ(nログ⁡n)E(T(n))=\Theta(n\log n)EXEバツEXXバツXE(T1(n))=A1nlgn+B1n+O(logn)E(T1(n))=A1nlg⁡n+B1n+O(ログ⁡n)E(T_1(n))=A_1n\lg n+B_1n+O(\log n)E(T2(n))=A2lgn+B2n+O(logn)E(T2(n))=A2lg⁡n+B2n+O(log⁡n)E(T_2(n))=A_2\lg n+B_2n+O(\log n)T1T1T_1T2T2T_2 アルゴリズムをアセンブリ言語に変換し、実行時間を計算します。私にとっては難しすぎるので、実行時間をもう少し大まかに分析するためのテクニックを知りたいと思います。これは、C、C ++または擬似コード。 そして、主に研究活動で使用されている記述スタイルと、これらの問題の処理方法を知りたいです。

5
Collat​​z再帰の実行時間
次のPythonコードがあります。 def collatz(n): if n &lt;= 1: return True elif (n%2==0): return collatz(n/2) else: return collatz(3*n+1) このアルゴリズムの実行時間は? 試してください: 場合関数の実行時間を示します。そして、私は T(n)T(n)T(n)collatz(n)⎧⎩⎨T(n)=1 for n≤1T(n)=T(n/2) for n evenT(n)=T(3n+1) for n odd{T(n)=1 for n≤1T(n)=T(n/2) for n evenT(n)=T(3n+1) for n odd\begin{cases} T(n)=1 \text{ for } n\le 1\\ T(n)=T(n/2) \text{ for } n\text{ even}\\ T(n)=T(3n+1) \text{ …

3
2つのアルゴリズムの比較にランタイムではなく比較を使用する理由
いくつかのCS研究論文では、2つのアルゴリズムの効率を比較するために、実際の計算時間自体ではなく、アルゴリズムの主要な比較の総数が使用されていることに気付きました。両方のプログラムを実行し、アルゴリズムの実行に必要な合計時間をカウントすることで、どちらが優れているかを比較できないのはなぜですか?

5
ハッシュテーブル操作O(1)とはどのようなデータですか?
答えから(いつ)ハッシュテーブルルックアップはO(1)ですか?、データが特定の統計条件を満たしている場合、ハッシュテーブルには少なくとも償却されたO(1)O(1)O(1)最悪の場合の振る舞いがあり、これらの条件を広くするのに役立つテクニックがあります。 しかし、プログラマーの観点から、私は自分のデータが何であるかを事前に知りません。それはしばしば外部ソースから来ます。そして、一度にすべてのデータを取得することはめったにありません。挿入と削除は、ルックアップの速度をそれほど下回らない速度で行われることが多いため、データを前処理してハッシュ関数を微調整します。 だから、一歩を踏み出す:データソースに関する知識があれば、ハッシュテーブルにO(1)O(1)O(1)操作の可能性があるかどうか、そしておそらくハッシュ関数で使用するテクニックを判断するにはどうすればよいですか?

4
Randomized QuicksortにO(n log n)のワーストケースランタイムコストがあるのはなぜですか
ランダムクイックソートは、ピボットエレメントがランダムに選択されるクイックソートの拡張機能です。このアルゴリズムの最悪の場合の時間の複雑さは何ですか。私によると、それがあるべきであるO(n2)O(n2)O(n^2)ランダムに選択されたピボットが選択される場合、最悪の場合に起こるように、ソートまたは逆ソート順序。しかし、いくつかのテキスト[1] [2]では、最悪の場合の時間の複雑さはO(nlogn)O(nlog⁡n)O(n\log{n}) 何が正しいの?

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