2015-04-24 91 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是常數)