当前位置:首页 » 存储配置 » 对称矩阵存储

对称矩阵存储

发布时间: 2022-05-26 09:31:14

Ⅰ 数据结构对称矩阵的压缩存储求数据地址

对对称阵进行压缩存取是将对称元素只存一个,并将数据存储在一维数组中
首先来确定a[i][j]在b[k]中的i,j与k的关系
首先是判定i与j的关系,
如果是下三角存储,则分一下两种情况
1、如果i<j,
则交换i与j的值,将上三角的位置值变换到下三角位置
2、如果i>=j,则不用执行操作直接走下面的流程
此时,i表示行坐标,j表示了坐标i之前有i行,即有1+2+...+i
=
(i+1)*i/2,在i标识的第i+1行有j+1个元素,由此可以确定k的值为(i+1)*i/2+j+1
=
k+1
由此可得k
=
(i+1)*i/2+j
由此可以的,a[3][6],
i=3,
j=6,
由于i<j,
交换得i=6,
j=3
由此
k
=
(6+1)*6/2+3
=
24
又由于&b[0]
=
1000
每个元素占两个字节,
则b[24]
=
1000+2*24
=
1048
由此便得到a[3][6]的地址为1048

Ⅱ 设有10阶对称矩阵a,采用压缩存储方式(以行序为主序存储,则a11的地址为1),则a85的地址为。

首先,压缩存储对于对称矩阵来说,等于是存对角线的右上半加对角线的元素,或者是左下半加对角线的元素,其他位置不存储。

这题是使用行优先存储,即先存a11,再a12,再a22,再a13,再a23,再a33,以此类推,一直到a85,所以a85的位置计算为:(1+2+3+4+5+6+7)+5=33,选择答案B。

对称矩阵(Symmetric Matrices)是指元素以主对角线为对称轴对应相等的矩阵。在线性代数中,对称矩阵是一个方形矩阵,其转置矩阵和自身相等。

(2)对称矩阵存储扩展阅读

LAPACK是由美国国家科学基金等资助开发的着名公开软件。LAPACK包含了求解科学与工程计算中最常见的数值线性代数问题,如求解线性方程组、线性最小二乘问题、特征值问题和奇异值问题等。

LAPACK提供了丰富的工具函式,可用于诸如解多元线性方程式、线性系统方程组的最小平方解、计算特征向量、用于计算矩阵QR分解的Householder转换、以及奇异值分解等问题。 在NetLib亦提供了API经简化的Fortran 95版本的LAPACK95。LAPACK以BSD授权的方法释出。

Ⅲ 为什么对称矩阵可将n²个元素压缩存储到n(n+1)/2个元素的一维数组。而非存到n²/2一维数组

n×n阶对称矩阵中,对称轴上的元素是没有映像的,它们不重复。
对称轴一侧有n(n-1)/2个元素,对称轴上有n个元素,这是能够压缩的最低限数量,它们的和为:
n(n-1)/2+n=(n²-n+2n)/2=(n²+n)/2
=n(n+1)/2个。
而不是总用元素个数n²/2。

Ⅳ 设对称矩阵A压缩存储在一维数组B中

首先由 a52能够得到的信息有:

  1. 针对特殊的矩阵压缩的方式是存储下三角,而且下三角计算一维数组的下标是:k=i(i+1)/2+j

  2. 由a11 存储在B[0]可以知道 从1开始存储,计算时需要减1

  3. a36位于上三角中,对应的下三角的点是a63,在根据公式就能算出下标,注意一定要找到下三角的点

Ⅳ 数据结构中对称矩阵的压缩存储的一 一对应关系怎么算的

先看上面一个:
下三角有i>=j
第1行一个,第2行两个,。。。,第i-1行i-1个(i, j下标都是从1开始的)
所以第i行前有1+2+...+(i-1)= i(i-1)/2个元素
再看本行,本元素前有j-1个元素
因为计算的是元素之间的位置差,因此就是i(i-1)/2+(j-1)了
下面一个上三角i<j:
对于对称矩阵有a(i,j)=a(j,i),即行列互换,代入上式即可得

Ⅵ n阶对称矩阵采用压缩存储,需存储的数据元素个数是

只要存对角线(含)以上的部分就行了,所以是1+2+...+n=n(n+1)/2

Ⅶ 将10阶对称矩阵压缩存储到一维数组

C
((100-10)/2)+10

Ⅷ 一个8×8的对称矩阵,采用压缩存储需要几个对应的空间

一个8×8的对称矩阵,采用压缩存储需要
1+2+3+...+7+8=36
个对应的空间。

Ⅸ 对称矩阵的压缩存储

#include<iostream>
using namespace std;

int main()
{
int temp[1000];
int t[500][500];
int arry1[1000],arry2[1000];
int n;
scanf("%d",&n);
int i;
int m;
m=n*n+n;
m=m/2;
for(i=1;i<=m;i++)
{
scanf("%d",&arry1[i]);
}
for(i=1;i<=m;i++)
{
scanf("%d",&arry2[i]);
}
for(i=1;i<=m;i++)
{
temp[i]=arry1[i]+arry2[i];
}
int j;
int k;
for(i=1,k=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{ t[i][j]=temp[k];
k++;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j>i)
printf("%d",t[j][i]);
else
printf("%d",t[i][j]);
if(j!=n)
printf(" ");
}
printf("\n");
}

return 0;
}

Ⅹ 请问一下数据结构中对称矩阵的压缩存储的一 一对应关系怎么算的呀。

其实书本上说的已经够了,我就不再赘述了,下面说说不明白的地方吧!

书本上说了 1<=i,j<=n,所以矩阵下标ij是以1开始的,但书本上的k是从0开始的

则下三角区和主对角线下标ij和一维向量下标k的关系式为i(i-1)/2+j-1如果k从1开始,则关系式为i(i-1)/2+j。

好,进入正题思路:

第1行一个,第2行两个,。。。,第i-1行i-1个;第i行元素位置在第j,也就是说,第i行截止到它有j个。

所以要分开思考,1到i-1行的元素之和+本行截止到它的元素之和=它在一维数组的位置。

第i行前面i-1行的总和为i(i-1)/2,本行第i行截止到所求元素总数为j,所以加起来为i(i-1)/2+j。然后-1,代表k从0开始。

比如想取第3行第2列矩阵元素隐射到一维数组的位置

本行第3行之前2行的元素总数为3*2/2=3 对应 [i(i-1)/2]

然后j是在本行的位置是2 对应[+j]

总的等于5

这个第3行第2列的元素应该在一维数组的第五个位置,但是一维是从零开始的,所以5-1,得到对应一维数组的下标为4.

王道书上和楼上的答案都是正确的,只不过思路和我的有点不同,我的是处的位置,他们是要求元素之前位置,区别也就+-1

热点内容
玩客云搭建游戏服务器 发布:2024-11-10 10:50:59 浏览:246
教育网站php源码 发布:2024-11-10 10:49:21 浏览:559
算法没有项目 发布:2024-11-10 10:46:27 浏览:164
windows主题文件夹 发布:2024-11-10 10:41:51 浏览:313
家中服务器一定要设置ip吗 发布:2024-11-10 10:33:56 浏览:426
数据库李建中 发布:2024-11-10 10:33:21 浏览:714
sql静噪 发布:2024-11-10 10:23:10 浏览:672
java正则表达式ip 发布:2024-11-10 09:38:13 浏览:229
数据库送餐 发布:2024-11-10 09:32:32 浏览:216
android设置大小 发布:2024-11-10 09:31:39 浏览:705