计算算法中的操作数

时间:2014-09-04 17:10:58

标签: algorithm complexity-theory

我必须计算算法执行的确切操作次数:

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)?或者我错了?

我怎么算他们?

3 个答案:

答案 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次迭代。