私はアルゴリズムの質問を解決していますが、私の分析では、O(2 ^ sqrt(n))で実行されます。どれくらい大きいの?O(2 ^ n)と同等ですか?まだ非多項式時間ですか?
私はアルゴリズムの質問を解決していますが、私の分析では、O(2 ^ sqrt(n))で実行されます。どれくらい大きいの?O(2 ^ n)と同等ですか?まだ非多項式時間ですか?
回答:
これは興味深い質問です。幸いなことに、それを解決する方法がわかれば、それほど難しくありません。
機能のためにF:N → R +およびG:N → R +、我々は、F ∈ O(G)場合にのみLIM SUP場合、N →∞ F(N)/ G(N)∈ R。
関数F:N → R +があれば、ほとんどの多項式成長であり、定数が存在する場合にのみ、kは ∈ Nように、F ∈ O(N ↦ N K)。レッツ・仕事任意であるが固定のため、このうちのk ∈ N。
LIM SUP N →∞ 2 (N 1/2) / N K =
LIM N →∞ 2 (N 1/2) / N K =
LIM N →∞ Eのログ(2)N 1/2 / Eのログ(N)K =
LIM N →∞ Eのログ(2)のn 1/2 -ログ(N)K =∞∉ R
分母と分母の両方が単調に成長する定常関数であるため、最初の等式は真です。2番目の等式は、アイデンティティx y = e log(x)yを使用します。最終式の指数が上に制限されていないため、制限は有限ではありません。正式な証明を与えることなく、n 1/2が漸近的にlog(n)を支配していることがわかっていると仮定することができます。したがって、問題の関数は多項式成長を超えています。
しかし、その成長は、(この目的のために、私が)厳密に小さい指数関数が定義されている場合、指数よりれているようにO(N ↦2 CのNの場合)、C >これを表示0であっても、より簡単です。
LIM SUP N →∞ 2 、C N / 2 (N 1/2) = LIM N →∞ 2 C N - N 1/2 =∞∉ R
固定c > 0の場合。したがって、関数の複雑さは、多項式と指数の中間にあります。
どれくらい大きいの?さて、O(2 ^ sqrt(n))はまさにその大きさです:-(
意味を理解するために、アルゴリズムが単なるO(2 ^ sqrt(n))ではなく、実際にコンピューター上で正確に2 ^ sqrt(n)ナノ秒かかると想像してください。
n = 100:2 ^ 10 = 1024ナノ秒。まったく時間がありません。n = 1000:2 ^ 31.xxx = 20億ナノ秒。2秒、それは顕著です。n = 10,000:2 ^ 100≈10 ^ 30ナノ秒= 10 ^ 21秒= 30兆年
これは、n = 100で30兆年かかる2 ^ nナノ秒よりもはるかに優れていますが、解決できる問題のサイズは非常に限られています。コンピュータが1週間で問題を解決できる場合、その問題を「解決可能」と考えると、それは約6 x 10 ^ 14ナノ秒、つまり約n = 2,400です。一方、ミリ秒で最大n = 400まで解くことができます。
(実際には、n = 10,000の場合、O(2 ^ sqrt(n))とO(2 ^ n)の両方にまったく同じ時間がかかります。それを待つには長すぎます。)
多項式を超えています。n ^ 1000秒かかる別のアルゴリズムを使用します。これは、n = 2の場合、実際には解決できません。このアルゴリズムは、nが約8億8,500万になるまで時間がかかります。しかし、本当に、誰が気にしますか?その時点で、両方のアルゴリズムにかかる年数は9,000桁です。