矩阵大 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 表示法的主要内容,如果未能解决你的问题,请参考以下文章

[HNOI2001]矩阵乘积

第六章学习小结

图的表示(邻接矩阵的优缺点)

基于MapReduce的并行化大矩阵乘法

图的存储方式

如何删除重复的矩阵(以数组表示)?