2017-03-19 25 views
0

所以我有这个算法,我试图确定算法分析问题的基本操作。这个给定算法的“基本操作”究竟是什么

这里是代码:

median(int array[]){ 
int k = array.length(); 
int n = k/2; 
    for(int i = 0; i < k; i++){ 
    int numsmaller = 0; 
    int numequal = 0; 
     for(int j = 0; j < k; k++){ 
     if(array[j] < array[i]){ 
     numsmaller++; 
     }else 
     if(array[j] == array[i]){ 
     numequal++; 
     } 
if(numsmaller < n && n <= (numsmaller + numequal){ 
return array[i] 
} 
            }//inner loop 
           }//outter loop 
}//end of function 

我目前的印象是,这个算法的基本操作是两个,如果函数的内环内的语句。 令我困惑的是,我不确定基本操作是否是每次迭代都会执行的布尔表达式本身,以检查array [j] < array [i]以及array [j]是否等于array [i] 。或者,天气的基本操作是当任何if语句为真时发生的代码执行。有人可以给我一个解释固体中的算法分析方面该算法的基本操作会是什么:)请和,不胜感谢

+0

我认为这是,当任何一个陈述是真实的 –

回答

0

基本操作可能会之类的东西:

  • 数组索引
  • 条件语句,即if (x == y)
  • 分配,即x = 10
  • 甚至基本的数学运算,即y + 2

请注意,这不是一个详尽无遗的清单。还要注意,某些代码的最坏情况需要执行最大数量的基本操作;所以在下面的代码中,你会在最差的情况下看到三个的基本操作。

if (variable == true) { 
    int x = y + 2; 
} 

...这是因为我们真的只是组成了上述几个项目。我们不得不执行第一个条件(一个基本操作),但在此之后,“最坏情况”是variable = true,因为我们继续执行任务。当然,为了计算x将通过赋值假设的非显而易见的值,我们必须执行另一个基本操作(在y和2之间的算术),这给我们总共三个基本操作。

所以你的情况,在内部循环的基本操作是条件句,给出的条件之一的变量的递增(基本任务),并且这两个条件语句加运算在

完成
if(numsmaller < n && n <= (numsmaller + numequal) 

line。

希望这会有所帮助。