解:两个n阶矩阵A与B乘积的计算过程可描述如下(计算结果存储于矩阵C中),可根据每条语句的执行次数估算下述运算过程所需的计算时间开销。
S1: for(i = 0; i < n; i++){
// S1行语句被执行(n+1)次
S2: for(j = 0; j < n; j++){
// S2行语句被执行n * (n+1)次
S3: C[i][j] = 0; // S3行语句被执行n * n次
S4: for(k = 0; k < n; k++){
// S4行语句被执行 n * n * (n+1)次
S5: C[i][j] += A[i][k] * B[k][j]; // S5行语句被执行 n * n * n次
S6: }
S7: }
S8: }
执行一个for循环不仅仅需要n次,最后一次判断不符合条件的也要算进去,当执行到三个for循环的里面时,只有符合小于n的条件的才会走进去,所以是n^3,
综上,若执行每行语句需要一个单位的时间(即O (1)),那么在上述运算结束后,所需的总时间开销约为:
[(n+1) + n * (n+1) + n * n + n * n * (n+1) + n * n * n] * O (1) = O (n^3)。
计算O()看最高位的,其他可以省略
2^k=n
n>=2^0
所以 k>=0,k是一个正整数,要被执行k+1次
求出来是一个等比数列,求出结果 2n-1
这是两个for循环嵌套,
外面的for执行了k次
里面的for执行了j^2次
1^2 + 2^2 + … + k^2 + (k+1)^2= (1/6) * n(n+1)(2n+1)