当前位置:首页 » 存储配置 » 对称矩阵的存储压缩方法

对称矩阵的存储压缩方法

发布时间: 2023-03-27 22:58:38

❶ 设有一个 10 × 10的对称矩阵 A采用压缩方式进行存储,存储时以按行优先的顺序

对称矩阵且存储的是下三角,那你首先得看a65是在下三角还是上三角,因为上三角的值是由下三角对称的值来存储的。6>5,a65在下三角。按行存储下三角,从第一行开始分别存储1,2,3,...个元素,a65表示第7行的第6个元素,那他前面的数据占的字节就是(1+2+3+4+5+6+5)*2=52,所以a65的地址是下一个53

❷ 设有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授权的方法释出。

❸ 什么是对称矩阵有哪些特性

对称矩阵是元素以主对角线为对称轴对应相等的矩阵。那么你对对称矩阵了解多少呢?以下是由我整理关于什么是对称矩阵的内容,希望大家喜欢!

什么是对称矩阵
元素以主对角线为对称轴对应相等的矩阵。1855年,埃米特(C.Hermite,1822-1901年)证明了别的数学家发现的一些矩阵类的特征根的特殊性质,如现在称为埃米特矩阵的特征根性质等。后来,克莱伯施(A.Clebsch,1831-1872年)、布克海姆(A.Buchheim)等证明了对称矩阵的特征根性质。泰伯(H.Taber)引入矩阵的迹的概念并给出了一些有关的结论。
对称矩销闭阵的特性
1.对于任何方形矩阵X,X+XT是对称矩阵。

2.A为方形矩阵是A为对称矩阵的必要条件。

3.对角矩阵都是对称矩阵。

两个对称矩阵的积是对称矩阵枣谨,当且仅当两者的乘法可交换。两个实对称矩阵乘法可交换当且仅当两者的特征空间相同。

用<,>表示上的内积。n×n的实矩阵A是对称的,当且仅当对于所有X, Y∈ ,( A(x) , Y )=( X, A(Y))。 【1】凳斗基

任何方形矩阵X,如果它的元素属于一个特征值不为2的域(例如实数),可以用刚好一种 方法 写成一个对称矩阵和一个斜对称矩阵之和:X=1/2(X+XT)+1/2(X-XT)

每个实方形矩阵都可写作两个实对称矩阵的积,每个复方形矩阵都可写作两个复对称矩阵的积。

若对称矩阵A的每个元素均为实数,A是Hermite矩阵。

一个矩阵同时为对称矩阵及斜对称矩阵当且仅当所有元素都是零。

如果X是对称矩阵,那么AXAT也是对称矩阵.

n阶实对称矩阵,是n维欧式空间V(R)的对称变换在单位正交基下所对应的矩阵。

所谓对称变换,即对任意α、 β∈V,都有(σ(α),β)=(α,σ(β))。投影变换和镜像变换都是对称变换。
数据结构中的对称矩阵
1.对称矩阵

(1)对称矩阵

在一个n阶方阵A中,若元素满足下述性质:

aij=aji0≤i,j≤n-1

则称A为对称矩阵。

(2)对称矩阵的压缩存储

对称矩阵中的元素关于主对角线对称,故只要存储矩阵中上三角或下三角中的元素,让每两个对称的元素共享一个存储空间。这样,能节约近一半的存储空间。

①按"行优先顺序"存储主对角线(包括对角线)以下的元素

即按a00,a10,a11,……,an-1,0,an-1,1…,an-1,n-1次序存放在一个向量sa[0..n(n+1)/2-1]中(下三角矩阵中,元素总数为n(n+1)/2)。

其中:

sa[0]=a00,

sa[1]=a10,

……,

sa[n(n+1)/2-1]=an-1,n-1

②元素aij的存放位置

aij元素前有i行(从第0行到第i-1行),一共有:

1+2+…+i=i×(i+1)/2个元素;

在第i行上,aij之前恰有j个元素(即ai0,ai1,…,ai,j-1),因此有:

sa[i×(i+1)/2+j]=aij

③aij和sa[k]之间的对应关系:

若i≥j,k=i×(i+1)/2+j0≤k<n(n+1)/2

若i<j,k=j×(j+1)/2+i0≤k<n(n+1)/2

令I=max(i,j),J=min(i,j),则k和i,j的对应关系可统一为:

k=i×(i+1)/2+j0≤k<n(n+1)/2

(3)对称矩阵的地址计算公式

LOC(aij)=LOC(sa[k])

=LOC(sa[0])+k×d=LOC(sa[0])+[I×(I+1)/2+J]×d

通过下标变换公式,能立即找到矩阵元素aij在其压缩存储表示sa中的对应位置k。因此是随机存取结构。

【例】a21和a12均存储在sa[4]中,这是因为

❹ 1个10×10的对称矩阵采用压缩存储方式以行优先方式第一行存储一个元素

选D.
因为你用的存贮方式之存下三角部分,所慎银以实际渗早上存贮的是第8行第5列.前7行一共7*8/2=28个元宽喊宴素,所以这个元素在第33个单元.

❺ 多维数组之压缩对称矩阵

接近4M数据,压缩到2M左右即可满足不超过4M内存保存。


因为是对称矩阵,只需要保存左下这个三角形中的数据即可。

也就缺姿是说对于n*n的矩阵需要的数组大小是(1+n)*n/2


索引的时候位置(i, j)的数保存在a[(1+i)*i/2 + j]里面(i >= j)。


程序如下:

#include<iostream>
usingnamespacestd;

intmain()
{
intn;
cin>>n;
int*a=newint[(1+n)*n/2];
for(inti=0;i<n;i++)
{
for(intj=0;j<=i;j++)cin猜扮粗>>a[(1+i)*i/2+j];
intt;
for(intj=i+1;j<n;j++)cin>>t;
}

intm;
cin>>m;
for(inti=0;i<m;i++)
{
intx,y;
cin>穗镇>x>>y;
x=x-1;
y=y-1;
if(x<y)
{
intt=x;
x=y;
y=t;
}
cout<<a[(1+x)*x/2+y]<<endl;
}

deletea;
return0;
}

❻ 特殊矩阵的压缩存储

数组是一组偶对(下标值,数据元素值)的集合。在数组中,对于一组有意义的下标,都存在一个与其对应的值。一维数组对应着一个下标值,二维数组对应着两个下标值,如此类推。
数组是由 n(n>1)个具有相同数据类型的数据元素 组成的有序序列,且该序列必须存储在一块地址连续的存储单元中。
数组中的数据元素具有相同数据类型。闭凯敏
数组是一种随机存取结构,给定一组下标,就可以访问与其对应的数据元素。
数组中的数据元素个数是固定的。

计算机的内存结构是一维(线性)地址结构,对于多维数组,将其存放(映射)到内存一维结构时,有个次序约定问题。即必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放到内存中。
二维数组是最简单的多维数组,以此为例说明多维数组存放(映射)到内存一维结构时的次序约定问题。

对于 ,通常有两种顺序存储方式
(1) 行优先顺序(Row Major Order) :将数组元素按行排列,第 i+1个行向量紧接在第 i 个行向量后面。对二维数组,按行优先顺序存储的线性序列为:
PASCAL、C 是按行优先顺序存储的。
(2) 列优先顺序(Column Major Order) :将数组元素按列向量排列,第 j+1 个列向量紧接在第 j 个列向量之后,对二维数组,按列优先顺序存储的线性序列为:

FORTRAN 是按列优先顺序存储的。

设有二维数组 ,若每个元素占用的存储单元数为L个, 表示元素 的首地址,即数组的首地址
(1)以“行优先顺序”存储
第 1 行中的每个元素对应的(首)地址是:
第 m 行中的每个元素对应的(首)地址是:
(2)以“列优先顺序”存储
(1) 第 1 列中的每个元素对应的(首)地址是:

(3) 第 n 列中的每个元素对应的(首)地址是:

特殊矩阵(对称矩阵,对角矩阵,三角矩阵)压缩存储:
多个相同的非零元素只分配一个元素值的存储空间;
零元素不分配空间。
(1)对称矩阵
对称矩阵的特点是:在一个 n 阶方阵中,有 ,其中 1≤i,j≤n,对称矩阵关于主对角线对称,因此只需存储上三角或下三角部分即可。
设有对称矩阵A[i][j]如下图示:

(2)三角矩阵
①下三角矩阵:
设有下三角矩阵 A[i][j]如下图所示:

在下三角矩阵中,主对角线以上的元素是一个常量。存完下三角中的元素之后,紧接着存储对角线上方的常量,因为是同一个常数,所以存一个即可,其压缩存储后如下图所示:

②上三角矩阵
设有上三角矩阵 A[i][j]如下图所示:

在上三角矩阵中, K 与 i,j 的对应关系为:

(3)对轿枝角矩阵
对角矩阵也称为带状矩阵,如下图所示:

在这种三对角矩阵中,所有非零元素都集中在以主对角线为中心的对角区域中,即除了主对角线和它的上下方若干条对角线的元素外,所有其他元素都为零(或同一个常数 C)。
对角矩阵 A 也可以采用压缩存储,将三对角矩阵压缩到向量 SA[k]中去,按以行为主序,顺序的存储其非零元素,按其压缩规律,孙桥找到相应的映象函数。k与i,j的对应关系为:

稀疏矩阵:设矩阵 A 是一个 n*m 的矩阵中有 s 个非零元素,设 δ=s/(n m),称δ为稀疏因子,如果某一矩阵的稀疏因子δ满足δ≦0.05 时称为稀疏矩阵。对于稀疏矩阵,采用压缩存储方法时,只存储非 0 元素。必须存储非 0 元素的行下标值、列下标值、元素值。

(1)三元组顺序表
若以行序为主序,稀疏矩阵中所有非 0 元素的三元组,就可以得构成该稀疏矩阵的一个三元组顺序表。相应的数据结构定义如下:

(2)十字链表
对于稀疏矩阵,当非 0 元素的个数和位置在操作过程中变化较大时,采用链式存储结构表示比三元组的线性表更方便。
矩阵中非 0 元素的结点所含的域有:行、列、值、行指针(指向同一行的下一个非 0 元)、 列指针(指向同一列的下一个非 0 元)。其次,十字交叉链表还有一个头结点,结点的结构如图所示。

由定义知,稀疏矩阵中同一行的非 0 元素的由 right 指针域链接成一个行链表,由 down指针域链接成一个列链表。则每个非 0 元素既是某个行链表中的一个结点,同时又是某个列链表中的一个结点,所有的非 0 元素构成一个十字交叉的链表。称为十字链表。
此外,还可用两个一维数组分别存储行链表的头指针和列链表的头指针。

广义表是线性表的推广和扩充,在人工智能领域中应用十分广泛。
把线性表定义为 n(n≧0 )个元素 a1, a2 ,..., an 的有穷序列,该序列中的所有元素具有相 同的数据类型且只能是原子项(Atom)。所谓原子项可以是一个数或一个结构,是指结构上不 可再分的。若放松对元素的这种限制,容许它们具有其自身结构,就产生了广义表的概念。
广义表(Lists,又称为列表 ):是由 n(n ≧0)个元素组成的有穷序列: LS= 其中 或者是原子项,或者是一个广义表。LS是广义表的名字,n 为它的长度。若 是广义表,则称为 LS 的子表。习惯上:原子用小写字母,子表用大写字母。

若广义表 LS 非空时:
(表中第一个元素)称为表头; 其余元素组成的子表称为表尾; 。 广义表中所包含的元素(包括原子和子表)的个数称为表的长度。
广义表中括号的最大层数称为表深 (度)。
两个基本操作 GetHead() GetTail()。

广义表的重要结论:
(1) 广义表的元素可以是原子,也可以是子表,子表的元素又可以是子表, ...。即广义 表是一个多层次的结构。
(2) 广义表可以被其它广义表所共享,也可以共享其它广义表。广义表共享其它广义表 时通过表名引用。
(3) 广义表本身可以是一个递归表。
(4) 根据对表头、表尾的定义,任何一个非空广义表的表头可以是原子,也可以是子表, 而表尾必定是广义表。

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

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

书本上说了 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

❽ 矩阵的压缩存储是什么

二维数组在形式上是矩阵,因此一般用二维数组来存储矩阵。在不压缩存储的情况下,矩阵采用按行优先或按列优先方式存储,占用的存储单元数等于矩阵的元素个数。在实际应用中,经常出现一些阶数很高的矩阵,同时在矩阵中非零元素呈某种规律分布或者矩阵中有大量的零元素,若仍然用常规方法存储,可能存储重复的非零元素或零元素,这将造成存储空间的大量浪费。因此对这类矩阵进行压缩存储,从而合理地利用存储空间。

为了节省存储空间,可以利用特殊矩阵的规律,对它们进行压缩存储,也就是说为多个值相同的元素只分配一个存储单元,对零元素不分配空间。适合压缩存储的矩阵一般是值相同的元素或者零元素在矩阵中分布有一定规律的特殊矩阵和稀疏矩阵。常见的特殊矩阵有对称矩阵、三角矩阵和对角矩阵。

❾ 对称矩阵的压缩存储

#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;
}

❿ 对于n阶对称矩阵A,请写出计算任一矩阵元素的压缩存储地址

算i<=j的情形
aij先算如果不压缩的地址(i-1)n+j,再算压缩后,压缩后相当于少了一个下三角矩阵,大小是1+2+。。。+j-1=(j-1)j/2;所以地址是(i-1)n-(j-3)j/2;
i>j的情形转换为i<j的地址,也就是算aji。

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:333
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:374
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:608
java用什么软件写 发布:2025-05-18 03:56:19 浏览:29
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:102
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:937
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:736
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:800
网卡访问 发布:2025-05-18 03:35:04 浏览:507
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:369