数据结构 设计算法实现矩阵的相加,并分析该算法的时间复杂度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 设计算法实现矩阵的相加,并分析该算法的时间复杂度相关的知识,希望对你有一定的参考价值。

设计算法实现矩阵的相加,并分析该算法的时间复杂度

数据结构的题目

急用,谢谢

按照分析惯例,假设所有单一运算的时间复杂度均为1
x=n;
......1
while(x>=(y+1)*(y+1))
......4(两次加法、1次乘法、1次比较)
y=y+1
......1
时间复杂度
=
1
+
(4
+
1)
x
循环次数
循环次数是由n和y的初始值决定的,假设循环次数为n,y的初始值为y0,y的结束状态为yn,有
x
<
(yn
+
1)*(yn
+
1)
......假设y的初始值为整数,则yn为满足该式的最小整数
n
=
(yn
-
y0)
/
1
......因为每次循环y的递增量为1
1式简化为
x
=
(yn
+
1)*(yn
+
1),可得:yn
=
n^(1/2)
-
1
所以n
=
n^(1/2)
-
1
-
y0
采用大o表示法,仅考虑最高次项,则求n的复杂度为o(n^(1/2))
进而求得你这3行代码的
总体复杂度
=
1
+
(4
+
1)
x
o(n^(1/2))
由于已知的常数项及非最高次项通常会被忽略(大o精神),所以总时间复杂度为o(n^(1/2))
参考技术A 开三个二维数组,两个用于相加,一个存放结果。二重循环将数组对应位置元素的和置倒结果数组的对应位置。

m*n的矩阵,时间复杂度为O(m*n)本回答被提问者采纳
参考技术B void matrixadd(int a[m][n],int b[m][n],int c[m][n])

int j,k;
for(j=0;j<m;j++)
for(k=0;k<n;k++)
c[j][k]=a[j][k]+b[j][k];

算法设计与分析 1.1 Joyvan的矩阵

★题目描述

Joyvan有一个大小为n * m的矩阵,现在他要对矩阵进行q次操作,操作分为如下三种:

0 x y:交换矩阵的x、y两行。

1 x y:交换矩阵的x、y两列。

2 x y:求当前矩阵第x行第y列的元素。

★输入格式

第一行三个正整数n、m、q,表示矩阵大小和操作次数。

接下来n行,每行m个空格隔开的整数,表示矩阵的元素。

接下来q行,每行三个数op、x、y,表示上述操作中的一种。

对于80%的数据,1 <= n、m、q <= 1000。

对于100%的数据,1 <= n、m <= 1000,1 <= q <= 1000000,矩阵元素大小在int范围内且非负。

★输出格式

对于操作2,输出一个整数,表示对应的元素。

★样例输入

2 2 6
1 2
3 4
0 1 2
1 1 2
2 1 1
2 1 2
2 2 1
2 2 2

★样例输出

4
3
2
1

★提示

输入规模较大,请使用scanf/printf。

/*
不要再原矩阵上坐变换
用列表C记录矩阵列序号
用列表R记录矩阵行序号
行列的交换再列表C、R上做表示 
*/
#include<bits/stdc++.h>
using namespace std;

int M[1001][1001];//记录矩阵 
int C[1001];
int R[1001];

int main(){
    int n,m,q;
    cin>>n>>m>>q;
    for(int i=1; i<=n; ++i){
        R[i]=i;
        for(int j=1; j<=m; ++j){
            scanf("%d",&M[i][j]);
            C[j]=j; 
        }
    }
    
    int opt,x,y;
    while(q--){
        scanf("%d%d%d",&opt,&x,&y);
        if(opt==0) 
            swap(R[x],R[y]);
        else if(opt==1)
            swap(C[x],C[y]);
        else
            printf("%d
",M[R[x]][C[y]]);   
    }
    return 0;
}

以上是关于数据结构 设计算法实现矩阵的相加,并分析该算法的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

编程实现以邻接表或邻接矩阵为存储结构,图的广度和深度优先搜索

算法设计与分析 1.1 Joyvan的矩阵

算法设计与分析——矩阵连乘问题

挑战程序设计竞赛(算法和数据结构)——11.4矩阵连乘法的JAVA实现

数据结构与算法之深入解析“随机翻转矩阵”的求解思路与算法示例

案例分析:设计模式与代码的结构特性