矩阵大 O 表示法
Posted
技术标签:
【中文标题】矩阵大 O 表示法【英文标题】:Matrix Big O Notation 【发布时间】:2015-07-03 07:15:36 【问题描述】:我在为下面的代码计算大 O 表示法时遇到问题...我知道如果不知道矩阵的大小它将是 O(n^3),但因为这是 16 x 16个矩阵(即大小已知)是否使其成为O(1)?
#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;
【问题讨论】:
O(1),但有一个 huge 常量被 big-oh 符号隐藏,并且只能与其他乘法 16x16 矩阵的算法进行有意义的比较。 如果事先知道大小、固定且可以忽略不计,您几乎不必关心 Big-O 符号 感谢您的帮助。我很怀疑,因为我需要在我的学校项目中提到它。再次感谢! 【参考方案1】:时间复杂度是算法运行所花费的时间,是表示输入的字符串长度的函数
给定的矩阵长度 = SIZE * SIZE * SIZE。
所以时间复杂度 = O(SIZE * SIZE * SIZE)(假设 SIZE = n)
时间复杂度为 O(n^3)。
这里的问题是 SIZE 是预定义的。因此它成为一个常数
我们消除了采用 Big-Oh 符号的常量。因此时间复杂度将是 T(n) = C^3 = O(1)(其中 C 是一个常数)
【讨论】:
以上是关于矩阵大 O 表示法的主要内容,如果未能解决你的问题,请参考以下文章