2015-04-24 54 views
0

我在计算下面代码的大O符号时遇到了一个问题......我知道没有知道矩阵的大小是O(n^3),但是因为这个是一个16×16矩阵(即大小已知)是否使它成为O(1)?Matrix Big O Notation

#include<stdio.h> 
#include<time.h> 
#include<stdlib.h> 
#define SIZE 16 
int main() 
{ 
     float matrix1 [SIZE][SIZE]; 
     float matrix2 [SIZE][SIZE]; 
     float result [SIZE][SIZE]; 

     srand(time(NULL)); 
     int s,j,k=0; 

     //Generating and displaying matrix 1 
     printf("Matrix 1\n"); 

     for(s=0; s<SIZE;s++) 
     { 
      for(j=0;j<SIZE;j++) 
      { 
       matrix1[s][j] = ((float)rand()/RAND_MAX)*10; 
       printf("%.3f\t" ,matrix1[s][j]); 
      } 
      printf("\n"); 
     } 

     //Generating and displaying matrix 2 
     printf("\n\nMatrix 2\n"); 

     for(s=0; s<SIZE;s++) 
     { 
      for(j=0;j<SIZE;j++) 
      { 
       matrix2[s][j] = ((float)rand()/RAND_MAX)*10; 
       printf("%.3f\t" ,matrix2[s][j]); 
      } 
      printf("\n"); 
     } 

     //Generating and displaying Result Matrix 
     printf("\n\nResult Matrix\n"); 

     for(s=0;s<SIZE;s++) 
     { 
      for(j=0;j<SIZE;j++) 
      { 
       float sum=0.0; 
       for(k=0;k<SIZE;k++) 
       { 
        sum=sum+(matrix1[s][k]*matrix2[k][j]); 
       } 
       result[s][j]=sum; 
       printf("%.3f\t" ,result[s][j]); 
      } 

      printf("\n"); 
     } 

    fflush(stdin); 
    getchar(); 
    return 0; 
} 
+0

它是O(1),但是*巨大*常数被大哦表示法隐藏,并且只能有意义地与其他算法相比较来乘以16x16矩阵。 – chepner

+1

如果事先知道尺寸大小,并且可以忽略不计,您几乎不必关心Big-O符号 –

+0

感谢您的帮助。我很怀疑,因为我需要在我的学校项目中提及它。再次感谢 ! – cgeekmt

回答

0

时间复杂度是通过一种算法来作为字符串的表示输入

给出= SIZE * SIZE * SIZE矩阵的长度的长度的函数的运行所花费的时间。

所以时间复杂度= O(SIZE * SIZE * SIZE)(假设SIZE = N)

时间复杂度是O(n^3)。

这里的问题是SIZE是预定义的。因此,它变成一个常数

我们消除了用大哦符号表示的常量。因此,时间复杂度将是T(n)= C^3 = O(1)(其中C是常数)