根据我们的教授,下面的算法有运行时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
答案 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)
次迭代中,当i
为i=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+1
和i=0
除外我们留下了i=k+1
。 QED。