O(n)运行时算法

时间:2016-04-03 09:02:51

标签: algorithm performance big-o notation

根据我们的教授,下面的算法有运行时O(n),但我很困惑为什么不是 O(n log(n)),因为外部循环最多可以运行log(n)次,内循环最多可以运行n次。

Algoritme Loop5(n) 
i = 1 
while i ≤ n 
    j = 1 
    while j ≤ i 
       j = j + 1 
    i = i∗2

1 个答案:

答案 0 :(得分:9)

你的教授是对的,运行时间是protected override void OnStartup(StartupEventArgs e) { try { //Disable shutdown when the dialog closes Current.ShutdownMode = ShutdownMode.OnExplicitShutdown; if ( IfUpdateRequired()) { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(sessionCtx.AutoUpdateVersionInfo.SetupPath); //This should not block current program startInfo.UseShellExecute = true; startInfo.Verb = "runas"; System.Diagnostics.Process.Start(startInfo); this.Shutdown(); } else { base.OnStartup(e); } } catch (Exception ex) { } }

在外部while循环的O(n)次迭代中,当ii=2^k时,内部while循环进行k=0,1,...,log n次迭代。 (当我说O(i)时,我的意思是基数为2的对数log n。)

log_2 n的运行时间为O(1+2+2^2+2^3+...+2^k)。这总和为k=floor(log n) O(2^{k+1})。 (这来自formula for the partial sum of geometric series。)

由于O(2^{log n}),总的运行时间为2^{log n} = n

对于感兴趣的人来说,这是一个证据,证明两个人的权力真正归结为我声称他们总结的东西。 (这是一个非常特殊的一般结果。)

声明。对于任何自然O(n),我们都有k

证明。请注意1+2+2^2+...+2^k = 2^{k+1}-1所有(2-1)*(1+2+2^2+...+2^k) = (2 - 1) + (2^2 - 2) + ... + (2^{k+1} - 2^k) 2^i取消0<i<k+1i=0除外我们留下了i=k+1。 QED。