计算生成多项式的运算

时间:2017-05-06 23:16:19

标签: big-o counting polynomials operations

我正在努力准确计算此方法的操作,以便生成多项式f(x):

public static int numOccurrences(int n){   
    int count = 0;  
    for(int i = 0; i < n; i++){   
        for(int j = 0; j < n; j++){    
           if(i == j) {
              continue; 
           }       
           if(strings[i] == strings[j]){
              count++;    
           }   
        } 
     }  
    return count; 
}

到目前为止,这是我的理解:

    int count = 0;  //1 time
    int i = 0;      //1 time
    while(i < n)    //n times
    int j = 0;      //n times
    while(j<n)      //n*n times 
    if(i == j)      //n*n times
    continue;       //n times
    if(strings[i] == strings[j]) //n*n+2 times
    count++;        //n*n times  
    i++             //n*n times
    j++             //n*n times
    return count;   //1 time

我们在一个带有if语句的嵌套循环中,我想知道如果我上面的内容不正确,我如何计算操作?

另外,对于行if(strings[i] == strings[j]),我计算1为测试,1为抓取strings[i],1为strings[j]。它是否正确?

我的最终答案是: f(x)= 5n ^ 4 + 10n ^ 3 + 3n + 3

我真诚地道歉,如果这是非常不正确的!

1 个答案:

答案 0 :(得分:0)

我想分享我的答案,万一有人偶然发现这篇文章。 我今天从导师那里发现的一种产生多项式的更容易方法是计算每个操作,但不是写出循环内的所有内容都发生了n * n次,我们只需要计算单个步骤并在n中嵌套那些单独的步骤(如i ++)。

例如:

int count = 0;  //1 
int i = 0;      //+ 1 
while(i < n)    //+ n(
i++;            //+ 1
int j = 0;      //+ 1
while(j < n)    //+ n(
j++             //+ 1
if(i == j)      //+ 1
continue;       //+ 1
if(strings[i] == strings[j]) //+ 3
count++;        //+ 1
return count;   //+ 1

将它们全部加起来,得到= 1 + 1 + n(1 + 1 + n(1 + 1 + 1 + 3 + 1))+ 1

简化= 6n ^ 2 + 2n + 3