関数のビッグOの複雑さは何ですか(log n)k どんなk?
ランタイムの形式が(log n)である関数k はO((log n)k)。この式は、単純な変換を使用して他のプリミティブ関数に還元することはできません。また、O(n(log n)のようなランタイムを持つアルゴリズムを参照することはかなり一般的です2)。この成長率の関数はpolylogarithmic。と呼ばれます。
ちなみに、通常(log n)k ログとして書き込まれますk n、したがって、上記のアルゴリズムはランタイムO(n log2 n。あなたの場合、関数ログ2 n + log nはO(log2 n)。
ただし、フォームログ(nk)にはランタイムO(log n)があり、kは定数であると仮定しています。これは、log(nk)= k log nは、対数IDを使用します。kは定数であるため、k log nはO(log n)です。むやみにO(log(nk))はO(log n)ですが、 kが関数のパラメーターであるか、nに依存している場合、この場合、正しいbig-O計算はO(k log n)になります。
作業しているコンテキストによっては、Õ(f(n))という表記がO(f(n) logk n)定数kの場合。これは、「 soft-O 」と呼ばれることもあり、対数項が関係ないコンテキストで使用されます。その場合、両方の関数はÕ(1)であると言えますが、この使用法は単純なアルゴリズム分析では一般的ではありません(実際、Wikipediaの外では、これが正確に1回使用されたのを確認しました)。
お役に立てれば!
(log n)^ kは:
どれがあなたにとって意味があるかは、定数とコンテキストに依存します。
log(n)
はO((log(n))^2)
なので、式全体はO((log(n))^2)
です
それでも(log(n))^2
。累乗された対数は、すでに最低/最も単純な形式になっています。