我必须计算算法执行的确切操作次数:
count = 0
for( i=0 ; i<=10 ; i++ )
for( i=0 ; i<=10 ; i++ )
count += (i + 10) / 2
我知道其复杂性为O(1)
。确切的CPU操作数等于:
10 * 10 (outer and inner cycle) + 100 (s += i + 10) + 100 (sum/2) + 1 (declaration of count variable)
?或者我错了?
我怎么算他们?
答案 0 :(得分:1)
计算我们计算的每项操作:
count = 0 // 1
for( i=0 ; i<=10 ; i++ ) // 1 => (i = 0) + 1 => (i <= 10)
for( i=0 ; i<=10 ; i++ ) // 1 => (i = 0) + 11 => (i <= 11) + 11 => (i++)
count += (i + 10) / 2 // 11* (1 => (i+10) + 1 => (/2) + 1 => (+=))
总操作次数= 1 + 1 + 1 + 1 + 11 + 11 + 11 *(1 + 1 + 1)= 59
编辑:请注意,由于您在两个循环中都使用了i,因此不会运行外循环。
答案 1 :(得分:1)
i
吗? (使外环无意义)?
假设您打算使用不同的变量:
for()
循环中,我们有一个赋值,11个比较和11个增量(是的,0到10是11)总共23个“操作”。for()
循环中,我们进行了相同的23次操作,每次执行11次,进行253次操作。在体内,我们有两个加法,一个分区和一个任务,重复进行了121次操作,共计484次。
23 + 253 + 484 = 760“操作”。
更新: 现在,使用相同变量的想法是有意的:
for()
循环中,我们有一个赋值,一个比较和一个增量,总共3个“操作”。for()
循环中,我们执行了相同的23次操作(见上文),执行一次。在体内,我们有两个加法,一个分区和一个任务,重复11次操作4次,总共44次。
3 + 23 + 44 = 70
但请注意,所有操作都不相同。分裂将比增量花费更长的时间。
答案 2 :(得分:0)
如果你想为内循环设置一个不同的变量,那么你是对的,复杂度是O(n ^ 2)。
我的想法总是从最内层的循环开始。它会迭代多少次?在这种情况下,它将执行10次迭代。
然后专注于外循环:那个迭代的次数是多少次?它还执行10次迭代,并且在每次迭代中,内部循环有10次迭代。