对于矩阵这样由n行n列构成的数据集合,可以通过二维数组来进行存储。

在实际工程中也会用到一些特殊的矩阵, 特殊矩阵可以“压缩”的一种思维来降低空间需求。
(1)对角矩阵
(2)对称矩阵
(3)上三角矩阵/下三角矩阵

1. 对称矩阵的压缩存储

若一个n阶方阵A[n][n]中的元素满足aij=aji(0≤i,j≤n-1),则称其为n阶对称矩阵。

对称矩阵的压缩存储的策略:
存储时可只存储对称矩阵中上三角或下三角中的元素,使得对称的元素共享一个存储空间。

当在确定了这样的策略后,在原有的n阶矩阵中一共有n2个元素,在以行序为主序存储其下三角+对角线的元素时,只需要存储n(n+1)/2个元素。当在以行序为主序存储其上三角+对角线的元素时也只需要存储n(n+1)/2个元素。

2. 对称矩阵的压缩存储

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define N 4//为N阶对称矩阵初始化存储空间
void Init_arr(int **p)
{if(p == NULL){return;}//当确定了矩阵的压缩存储方式后,就可以分配存储空间了*p = (int *)malloc(sizeof(int) *(N*(N+1)/2));
}//将A[i][j]的值e存储到b中
void arr_Assign(int *b , int e , int i , int j)
{if(i >= j){   //存储下三角的数据元素到数组B中b[i*(i+1)/2 + j] = e;}else{//存储上三角的数据元素到数组B中b[j*(j+1)/2 +i] = e;}
}//返回存储在b[M]中的A[i][j]值
int arr_Value(int *b , int i, int j)
{//取出数组b中的下三角数据元素if(i >= j){return b[ i * (i + 1) / 2 + j];}else{return b[j * (j + 1) / 2 + i];}
}//输出压缩存储在b中的对称矩阵
void Disp(int *b)
{int i;int j;for(i = 0; i < N; i++){for(j = 0; j < N; j++){printf("%4d" , arr_Value(b , i,j));}printf("\n");}
}//销毁存储空间
void Destroy(int *b)
{free(b);b = NULL;
}int main(void)
{int *arrB = NULL;int i = 0;int j = 0;int value = 0;Init_arr(&arrB);printf("请输入对称矩阵的下三角部分:\n");for(i = 0; i < N; i++){printf("输入第%d行的%d个数据元素: ", i+1, i+1);for(j = 0; j <= i; j++){scanf("%d" , &value);arr_Assign(arrB,value , i,j);}}//打印输出printf("输出对称矩阵;\n");Disp(arrB);Destroy(arrB);return 0;
}

34-对称矩阵的压缩存储相关推荐

  1. 矩阵-----对称矩阵及其压缩存储稀疏矩阵

    什么是对称矩阵(SymmetricMatrix)? 对称对称-------看 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 & ...

  2. 数据结构上机实践第八周项目7—对称矩阵的压缩存储及基本运算

    对称矩阵的压缩存储及基本运算 贺老师的慕课当中,给我们拓展了这样的知识. 所以,本次的项目实践要求如下: 用压缩形式存储对称矩阵,实现下面的操作并测试 void Init(int *&b);/ ...

  3. 第八周实践项目7 对称矩阵的压缩存储及基本运算

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目7- *作 者:邵雪源 *完成日期:2017年12月14日 *版 ...

  4. c语言对称矩阵的压缩存储_【数据结构】对称矩阵及对称矩阵的压缩存储

    对称矩阵: 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对 ...

  5. c语言对称矩阵的压缩存储_C++实现对称矩阵的压缩存储 | 术与道的分享

    压缩存储数据是一个比较高效.节省空间的方法,当我们存储的数据足够大时,我们要尽量避免数据的冗余重复,减少空间的浪费.对阵矩阵的压缩存储就是一个简单的实例. 算法分析与设计 如下图所示,我们要存储的是一 ...

  6. c语言对称矩阵的压缩存储_线性代数(三) 特殊矩阵

    本文将以知识点的形式展开介绍,读者可根据需要自动跳转至相应部分,具体内容如下: (1)单位矩阵(2)对称矩阵(3)对角矩阵(4)正交矩阵(5)伴随矩阵(6)可逆矩阵(7)奇异矩阵(8)初等矩阵(9)行 ...

  7. java数据结构至对称矩阵压缩存储

    刚刚刷java选择题,遇到的对称矩阵压缩存储问题,我们知道对称矩阵是aij=aji的矩阵,压缩存储可以采用一维数组和二维数组存储. 此处只讨论一维数组存储的形式,设数组下标从0开始,对称矩阵为n维矩阵 ...

  8. 数据结构-拓展突破-特殊矩阵(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)的压缩存储)

    文章目录 1. 对称矩阵 2. 三角矩阵 3. 三对角矩阵 4. 稀疏矩阵 1. 对称矩阵 对称矩阵的定义: 若n阶方阵中任意一个元素a,都有a(i,j)=a(j,i)则该矩阵为对称矩阵 也就是说对称 ...

  9. 数据结构--三角矩阵的压缩存储

    三角矩阵 三角矩阵的常用压缩方式有两种: 线性压缩 使用三角形的二维数组压缩 线性压缩存储三角矩阵 下三角矩阵: 上三角矩阵: 以下三角矩阵的线性压缩存储为例,进行实现: package pers.z ...

最新文章

  1. 2021年春季学期-信号与系统-第八次作业参考答案-第十二小题
  2. 《多处理器编程的艺术》读书笔记(4)--- 自旋锁(1)
  3. python with 打开多个文件
  4. 图像的读取,显示与保存(基于skimage模块)
  5. Eclipse与MyEclipse增强代码提示
  6. Delphi 与 DirectX 之 DelphiX(72): TDIB.SephiaEffect();
  7. java handlersocket_HandlerSocket java客户端
  8. usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动
  9. 3.Event Delegate
  10. flink的watermark简单理解
  11. 多线程—— Queue(储存进程结果)
  12. rabbitmq消费者设置手动ack
  13. 【echarts 中国地图】vue实现中国地图,省份居中china.json文件下载
  14. VAssistX使用总结
  15. 大学生计算机vfp,计算机vfp教学课件
  16. 为酒店设计一套计算机网络管理系统,酒店管理系统设计与方案.doc
  17. 【Simscape】用Simscape实现三维物理仿真(二)——创建一个斜坡滚球系统
  18. java 带根号的开平方
  19. zcmu1684 求余数
  20. Word高效指南 - 快速合并多个文档

热门文章

  1. 信息学奥赛训练体系(2023.02.21)
  2. linux命令封装sh,Linux命令(31):zip/unzip命令-打包压缩
  3. 数据库常用函数的使用案例
  4. 无线网卡抓包小记--我的无线网卡终于能抓包了
  5. HTML基本语法学习
  6. [Cadence Sigrity] PowerDC打开提示No license available
  7. ubuntu 18使用国内版firefox
  8. 12月8日(第八天)
  9. 详解 TCP 和 UDP的概念、特点和区别
  10. 算法实践:武士风度的牛