Algorithm 如何计算该算法的最坏情况分析? sum=0; 对于(int i=0;i=0;j--) sum++;
据我所知,第一行是1操作,第二行是Algorithm 如何计算该算法的最坏情况分析? sum=0; 对于(int i=0;i=0;j--) sum++;,algorithm,complexity-theory,big-o,big-theta,Algorithm,Complexity Theory,Big O,Big Theta,据我所知,第一行是1操作,第二行是(I+1)操作,第三行是(I-1)操作,第四行是n操作。这是否意味着运行时间将是1+(i+1)(i-1)+n?只是这些最后的步骤让我困惑。这不是加法:外循环的每次迭代都会发生一次内循环。所以是O(n2) 顺便说一句,这是一个很好的例子,说明了为什么我们对这类事情使用渐近表示法——根据“操作”的定义,计数的确切细节可能会有很大的不同。(比如,sum++是一个单独的操作,还是将sum加到1,给temp;load temp to sum?)但是既然我们知道所有可以隐藏
(I+1)
操作,第三行是(I-1)
操作,第四行是n
操作。这是否意味着运行时间将是1+(i+1)(i-1)+n
?只是这些最后的步骤让我困惑。这不是加法:外循环的每次迭代都会发生一次内循环。所以是O(n2)
顺便说一句,这是一个很好的例子,说明了为什么我们对这类事情使用渐近表示法——根据“操作”的定义,计数的确切细节可能会有很大的不同。(比如,
sum++
是一个单独的操作,还是将sum加到1,给temp;load temp to sum
?)但是既然我们知道所有可以隐藏在常数因子中的东西,它仍然是O(n2)。否;您不需要计算每行的特定操作数,然后将它们相加。像“for”这样的构造的全部要点是使给定的代码行可以多次运行。您应该使用思维和逻辑技能来计算“sum++”行作为N的函数将运行多少次。提示:每当遇到第三行时,它都会运行一次
第二行遇到了多少次
每次遇到第二行时,设置“i”的值。第三行使用该值i运行了多少次?因此,它将总共运行多少次?(提示:如果我在几个不同的场合给你不同的钱,你怎么知道我给了你多少钱?)
每次遇到第三行,第四行发生一次
哪一行最常发生?以N为单位,它发生的频率是多少?从内到外工作
sum = 0;
for(int i = 0; i < N; i++)
for(int j = i; j >= 0; j--)
sum++;
这是一个单独的操作,因为它不会重复
sum++
这个循环i+1次。其中有几个操作,但您可能并不打算计算asm指令的数量。对于这个问题,我假设这是一个I+1的乘数。由于循环内容是单个操作,因此循环及其块执行i+1操作
for(int j = i; j >= 0; j--)
for(int i=0;i
这个循环N次。和以前一样,这是一个N的乘法器。因为块执行i+1操作,所以这个循环总共执行N(N+1)/2个操作。这就是你的答案!如果你想考虑Big-O复杂性,那么这简化为O(N2)。< P>分析你不想逐行问的算法:“这个特定的行贡献多少时间?”原因是每一行不执行相同的次数。例如,与只运行一次的第一行相比,最内层的行执行了整整一次 要分析这样的算法,请尝试识别一些数值在算法总运行时间的常数因子内的数量。在这种情况下,该数量可能是“行
sum++
执行多少次?”,因为如果我们知道这个值,我们就知道算法中两个循环所花费的总时间。为了弄清楚这一点,让我们追踪一下这些循环会发生什么。在外部循环的第一次迭代中,i==0
,因此内部循环将执行一次(从0到0倒计时)。在外循环的第二次迭代中,i==1
,而内循环正好执行两次(首先是j==1
,然后是j==0
。更一般地说,在外循环的第k次迭代中,内循环执行k+1
次。这意味着最内循环的总迭代次数由
for(int i = 0; i < N; i++)
此数量可以显示为等于
1 + 2 + 3 + ... + N
在这两个项中,N^2/2
项是主要的增长项,因此如果我们忽略其常数因子,我们得到了O(N2)的运行时间
不要把这个答案看作是你应该记住的东西——想想得到答案所需的所有步骤。我们首先找到一些要计算的量,然后看看循环的执行对这个量的影响。从中,我们可以推导出这个量的数学表达式,然后对其进行简化.最后,我们得到了结果表达式并确定了主导项,它作为整个函数的大O。那么猜猜你感兴趣的是sum++和执行它的次数 最后的统计数字会给你这个答案 实际上,您的循环只是: 西格玛(n)n从1变为n 这等于:
N*(N+1)/2
这给了你一个大的o符号o(N^2)
此外,除了您的问题名称之外,您的算法中没有最坏的情况。
或者你可以说,最坏的情况是当N变为无穷大时。使用西格玛符号表示循环:
您需要计算与N相关的复杂度,而不是与循环计数器相关的复杂度。
N (N + 1) N^2 + N N^2 N
--------- = ------- = --- + ---
2 2 2 2