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

漸近表記と分析に関する質問

3
使用する時間の複雑さの分析の表記をどのように知るのですか?
ほとんどの入門アルゴリズムクラスでは、(Big O)やような表記法が導入されており、学生は通常、これらのいずれかを使用して時間の複雑さを見つけることを学びます。OOOΘΘ\Theta ただし、、およびなどの他の表記法があります。ある表記法が別の表記法よりも望ましい特定のシナリオはありますか?oooΩΩ\Omegaωω\omega

11
数列の再帰関係の解決または近似
コンピューターサイエンスでは、再帰関係を解決する必要があります。これは、再帰的に定義された一連の数値の閉じた形式を見つけることです。ランタイムを検討する際、主にシーケンスの漸近的成長に主に興味があります。 例は 本体が時間f (n )を要するnから000まで下にステップする末尾再帰関数のランタイム:nnnf(n)f(n)f(n) T(0)T(n+1)=0=T(n)+f(n)T(0)=0T(n+1)=T(n)+f(n)\qquad \begin{align} T(0) &= 0 \\ T(n+1) &= T(n) + f(n) \end{align} フィボナッチ数列: F0F1Fn+2=0=1=Fn+Fn+1F0=0F1=1Fn+2=Fn+Fn+1\qquad \begin{align} F_0 &= 0 \\ F_1 &= 1 \\ F_{n+2} &= F_n + F_{n+1} \end{align} n個の括弧ペアを持つDyckワードの数:nnn C0Cn+1=1=∑i=0nCiCn−iC0=1Cn+1=∑i=0nCiCn−i\qquad\begin{align} C_0 &= 1 \\ C_{n+1}&=\sum_{i=0}^{n}C_i\,C_{n-i} \end{align} 長さリストに対するmergesortランタイムの繰り返しnnn: T(1)T(n)=T(0)=0=T(⌊n/2⌋)+T(⌈n/2⌉)+n−1T(1)=T(0)=0T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+n−1\qquad \begin{align} T(1) &= T(0) = 0 …

9
サイズが大きくなると簡単になる問題はありますか?
これはばかげた質問かもしれませんが、入力のサイズが大きくなるにつれて実際に簡単になる問題がある可能性はありますか?実用的な問題はこのようなものではないかと思いますが、この特性を持つ退化した問題を発明できるかもしれません。例えば、おそらく、それは大きくなるか、または他の奇妙な方法で動作するときに「それ自体を解決」し始めます。

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)ますか?


4
O(n log n)で記述される関数のクラスの名前は何ですか?
「ビッグO」では、一般的な表記法に共通の名前が付けられています(「ああ、一定の要素がある」と言う代わりに)。 O(1)は「定数」です O(log n)は「対数」です O(n)は「線形」です O(n ^ 2)は「二次」です O(n * log n)は??? それは単に「n log n」ですか、それとも上記のような特別な名前を持っていますか?

6
漸近成長による関数のソート
たとえば、関数のリストがあるとします nloglog(n),2n,n!,n3,nlnn,…nlog⁡log⁡(n),2n,n!,n3,nln⁡n,…\qquad n^{\log \log(n)}, 2^n, n!, n^3, n \ln n, \dots どのようにそれらを漸近的にソートするのですか? f≤Og⟺f∈O(g)f≤Og⟺f∈O(g)\qquad f \leq_O g \iff f \in O(g)、 それらが実際にペアワイズ比較可能であると仮定すると(こちらも参照)?の定義を使用するのは厄介に思えますが、適切な定数および存在を証明するのは難しい場合がよくあり。OOOcccn0n0n_0 これは複雑さの尺度に関するものであるため、としての漸近的な挙動に興味がありn→+∞n→+∞n \to +\infty、すべての関数が非負の値()のみを取ると仮定します。∀n,f(n)≥0∀n,f(n)≥0\forall n, f(n) \ge 0

2
素朴なシャッフルはどの程度漸近的に悪いのでしょうか?
各アイテムをランダムに選択された別のアイテムと交換して配列をシャッフルするこの「ナイーブ」アルゴリズムが正しく機能しないことはよく知られています。 for (i=0..n-1) swap(A[i], A[random(n)]); 具体的には、nnn回の反復のそれぞれで、n nnn選択肢の1つが(一様な確率で)行われるため、計算にはnnnnn^n可能な「パス」があります。可能な順列のn!n!n!は、パスの数に均等に分割されないnnnnn^nため、このアルゴリズムがそれぞれを生成することは不可能です!n!n!n!等しい確率の順列。(代わりに、いわゆるFischer-Yatesシャッフルを使用する必要があります。これは基本的に[0..nから乱数を選択する呼び出しを変更する]と[i..n)から乱数を選択する呼び出しです。それは私の質問には意味がありません。) 私が疑問に思っているのは、素朴なシャッフルはどの程度「悪い」のでしょうか?より具体的には、せるP(n)P(n)P(n)すべての順列及び組ことC(ρ)C(ρ)C(\rho)得られた順列生成ナイーブアルゴリズムを通じてパスの数であるρ∈P(n)ρ∈P(n)\rho\in P(n)、関数の漸近挙動が何を M(n)=n!nnmaxρ∈P(n)C(ρ)M(n)=n!nnmaxρ∈P(n)C(ρ)\qquad \displaystyle M(n) = \frac{n!}{n^n}\max_{\rho\in P(n)} C(\rho) そして m(n)=n!nnminρ∈P(n)C(ρ)m(n)=n!nnminρ∈P(n)C(ρ)\qquad \displaystyle m(n) = \frac{n!}{n^n}\min_{\rho\in P(n)} C(\rho)? 主な要因は、これらの値を「正規化」することです。ナイーブシャッフルが「漸近的に良好」であれば、 limn→∞M(n)=limn→∞m(n)=1limn→∞M(n)=limn→∞m(n)=1\qquad \displaystyle \lim_{n\to\infty}M(n) = \lim_{n\to\infty}m(n) = 1。 私は(私が見たいくつかのコンピューターシミュレーションに基づいて)実際の値は1から離れていると疑っていますが、が有限であるか、が0?これらの量の振る舞いについて何がわかっていますか?lim m (n )limM(n)limM(n)\lim M(n)limm(n)limm(n)\lim m(n)

4
OとΩは最悪の場合と最良の場合にどのように関係しますか?
今日の講義では、バイナリサーチを使ってソートされた配列の要素を見つけるための非常に簡単なアルゴリズムについて議論しました。要素の配列の漸近的な複雑さを判断するように求められました。nnn 私の考えは、は最悪の場合の操作の数であるため、より具体的にはまたはことは明らかです。しかし、たとえば、最初に検索された要素にヒットした場合など、より良い結果を得ることができます-下限はです。O(logn)O(log⁡n)O(\log n)O(log2n)O(log2⁡n)O(\log_2 n)log2nlog2⁡n\log_2 nΩ(1)Ω(1)\Omega(1) 通常、アルゴリズムの最悪の場合の入力のみを考慮するため、講師はソリューションをとして提示しました。Θ(logn)Θ(log⁡n)\Theta(\log n) しかし、最悪の場合のみを考えるとき、与えられた問題のすべての最悪の場合が同じ複雑さを持っているとき、と表記を持つことのポイントは何ですか(は私たちが必要なすべてでしょう?)。OOOΩΩ\OmegaΘΘ\Theta ここで何が欠けていますか?

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 

1
与えられた長さの通常の言語の単語数の漸近
通常の言語場合、をの長さ単語数とします。ジョーダン正準形(の一部のDFAの注釈なし遷移行列に適用)を使用すると、十分に大きい、 ここで、は複素多項式で、は複素「固有値」です。(小さい、という形式の追加の項があり。ここで、および場合、はですC N(L )L N L N C N(L )= kのΣを iは= 1つの P I(N )λをN I、P I λ I N CとK [ N = K ] [ N = K ] 1 N = k 0LLLcn(L )cn(L)c_n(L)LLLnnnLLLnnncn(L )= ∑i = 1kP私(n )λn私、cn(L)=∑i=1kPi(n)λin, c_n(L) = \sum_{i=1}^k P_i(n) \lambda_i^n, P私PiP_iλ私λi\lambda_innnCk[ n …

10
「nの値が小さい場合、O(n)はあたかもO(1)であるかのように扱うことができます」
私は、nの十分に小さい値に対して、O(n)がO(1)であるかのように考えられたり、扱われたりすることを何度か聞いたことがあります。 例: そうする動機は、O(1)は常にO(lg n)よりも優れており、常にO(n)よりも優れているという誤った考えに基づいています。操作の漸近的順序は、現実的な条件下で問題のサイズが実際に大きくなる場合にのみ関係します。nが小さいままであれば、すべての問題はO(1)です! 十分に小さいのは何ですか?10?100?1,000?どの時点で「これをもはや無料の操作のように扱うことはできません」と言いますか?経験則はありますか? これはドメイン固有またはケース固有の可能性があるように見えますが、これについて考える方法に関する一般的な経験則はありますか?

2
償却時間での検索、挿入、削除を伴うデータ構造?
償却時間で次の操作をサポートする順序付きリストを維持するためのデータ構造はありますか?O(1)O(1)O(1) GetElement(k):リストの番目の要素を返します。kkk InsertAfter(x、y):新しい要素yをリストのxの直後に挿入します。 Delete(x):リストからxを削除します。 最後の2つの操作では、xがデータ構造への直接のポインターとして与えられていると仮定できます。InsertElementは、yに対応するポインターを返します。InsertAfter(NULL、y)は、リストの先頭にyを挿入します。 たとえば、空のデータ構造から始めて、次の操作は順序付きリストを次のように更新します。 InsertAfter(NULL、a) [a]⟹⟹\implies InsertAfter(NULL、b) [b、a]⟹⟹\implies InsertAfter(b、c) [b、c、a]⟹⟹\implies InsertAfter(a、d) [b、c、a、d]⟹⟹\implies Delete(c) [b、a、d]⟹⟹\implies これらの5つの更新後、GetElement(2)はdを返し、GetElement(3)はエラーを返します。

5
O(mn)は「線形」または「2次」成長と見なされますか?
時間の複雑さがO(mn)で、mとnが2つの入力のサイズである関数がある場合、その時間の複雑さを「線形」(mとnの両方で線形であるため)または「2次」(それは2つのサイズの製品だから)?または、他の何か? O(m + n)も線形ですが、はるかに高速であるため、「線形」と呼ぶのは紛らわしいと感じますが、各変数で線形であるため、「二次」と呼ぶのも奇妙だと感じます。

4
プロット検査ヒューリスティックをだます方法は?
上ここで、デイブ・クラークは、漸近的な成長を比較するために、あなたが手で関数をプロットすべきであると提案しました。理論的に傾倒したコンピューター科学者として、私はこのブードゥーをプロットとして証明しません。考え直して、これは非常に有用なアプローチであり、時には十分に活用されていないことにも同意する必要があります。プロットは、最初のアイデアを得るための効率的な方法であり、時にはそれだけで十分です。 TCSを教えるとき、「常に機能するXだけを実行できる場合、正式な証明は何に必要ですか?」と尋ねる学生が常にいます。誤fallを指摘して説明するのは、彼の先生次第です。math.SEで最終的にフェールオーバーする見かけのパターンの素晴らしい例のセットがありますが、それらはかなり数学的なシナリオです。 それでは、どのようにプロット検査ヒューリスティックをだますのでしょうか?違いを見分けるのが難しい場合がいくつかあります。例えば [ ソース ] 推測してから、実際の関数のソースを確認してください。しかし、それらは私が期待するほど壮観ではありません。特に初心者にとっても、実際の関係は機能だけから簡単に見つけることができるからです。 関数定義と合理的なプロット検査から真実が明らかではない(相対的な)漸近的成長の例はありnnnますか?数学関数と実際のデータセット(特定のアルゴリズムの実行時間など)はどちらも歓迎です。ただし、区分的に定義された関数は控えてください。

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