當前位置:首頁 » 服務存儲 » 對稱雙地址結構的存儲矩陣
擴展閱讀
熱帶魚缸水草怎麼配置 2022-09-25 19:06:08
sftp映射埠拒絕訪問 2022-09-25 19:02:57

對稱雙地址結構的存儲矩陣

發布時間: 2022-08-09 05:46:06

『壹』 對稱矩陣的壓縮存儲

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

『貳』 數據結構,根據對稱矩陣,求某位置的地址

碰到這種,別去管什麼0不0的,先弄清楚他的方式,下三角:

XOOOOOOOOO
XXOOOOOOOO
XXXOOOOOOO
XXXXOOOOOO
XXXXXOOOOO
XXXXXXOOOO
XXXXXXXOOO
XXXXXXXXOO
XXXXXXXXXO
XXXXXXXXXX
既然是從a[0][0]開始,a[7][5]是第8行第6個,一共多少個X?
前7行:1+2+3+4+5+6+7 = 28
第8行:6
28+6=34

『叄』 數據結構對稱矩陣的壓縮存儲求數據地址

對對稱陣進行壓縮存取是將對稱元素只存一個,並將數據存儲在一維數組中
首先來確定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

『肆』 數據結構,對稱矩陣.

k=i*(i+1)/2+j

『伍』 請問一下數據結構中對稱矩陣的壓縮存儲的一 一對應關系怎麼算的呀。

先看上面一個:
下三角有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),即行列互換,代入上式即可得