【数据结构】对称矩阵及对称矩阵的压缩存储

原创 2016年05月30日 17:18:31

对称矩阵:


设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵。以矩阵的对角线为分隔,分为上三角和下三角。


如下面矩阵:

spacer.gif

wKioL1cNhDTx1gApAAAO50iPSO8800.png

spacer.gif对称矩阵压缩存储时只需要存储i*(i+1)/2个数据。


对称矩阵与压缩矩阵的关系是:

对称矩阵SymmetricMatrix[i][j] =压缩矩阵Array(i*(i+1)/2+j)。


spacer.gif下面我实现一下对称矩阵存储在压缩矩阵以及将压缩矩阵中的元素还原成对称矩阵打印出来的代码。

代码如下:


#include<iostream>
using namespace std;
template<class T>
class SymmtrixMatrix
{
public:
    SymmtrixMatrix(T* a, size_t size)
        :_a(new T[size*(size+1)/2])
        , _size(size*(size + 1) / 2)
    {
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                if (i >= j)
                {
                    //将对称矩阵转换为压缩矩阵
                    _a[i*(i + 1) / 2+j] = a[i*size+j];
                }
                
            }
        }
    }
//压缩矩阵的访问打印
    void Print(size_t size)
    {
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                int row = i;
                int col = j;
                if (row < col)
                {
                    swap(row, col);
                }
                cout << _a[row*(row + 1)/2 + col] << " ";
            
            }
            cout << endl;
        }
        cout << endl;
    }

private:
    T* _a;
    size_t _size;    //即n,对称矩阵为方阵
};

void Test()
{
    int a[5][5] = { 
                    { 0, 1, 2, 3, 4 },
                    { 1, 0, 1, 2, 3 },
                    { 2, 1, 0, 1, 2 },
                    { 3, 2, 1, 0, 1 },
                    { 4, 3, 2, 1, 0 }, 
                  };

    SymmtrixMatrix<int> sm((int*)a, 5);
    sm.Print(5);
    
}

int main()
{
    Test();
    system("pause");
    return 0;
}


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1763267

2015年大二上-数据结构-数组与广义表(2)-2.压缩存储的对称矩阵的运算

/* *Copyright (c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:Annpion.cpp *作者:王耀鹏 *完成日期:2015年12月14日 *...
  • Annpion
  • Annpion
  • 2015年12月14日 18:48
  • 382

数据结构第八周项目3--对称矩阵压缩存储的实现与应用

/*   *Copyright(c)2017,烟台大学计算机与控制工程学院   *All rights reserved.   *作    者:刘浩   *版 本 号:v1.0   问题描述...

第九周 数据结构实现项目--数组和广义表【项目2.2 - 压缩存储的对称矩阵的运算】

/* 1.Copyright(c)2015,烟台大学计算机学院 2. *All rights reserved 3. *文件名称:第九周 数据结构实现项目--数组和广义表【项目2.2 - 压缩存储的对...

数据结构实践——压缩存储的对称矩阵的运算 .

/* * Copyright (c) 2015, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称: main.cpp * 作者:唐子健* 完成日...
  • ytdxtzj
  • ytdxtzj
  • 2015年10月30日 08:14
  • 224

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

对称矩阵的压缩存储及基本运算 知识拓展: 所以,本次的项目实践要求如下: 用压缩形式存储对称矩阵,实现下面的操作并测试 void Ini...

数据结构实践——压缩存储的对称矩阵的运算

本文针对数据结构基础系列网络课程(5):数组与广义表的实践项目。【项目 - 压缩存储的对称矩阵的运算】 设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。实现中请使用好前面设计的基本运...

数据结构第八周项目3--对称矩阵压缩存储的实现与应用

/*  *Copyright(c)2017,烟台大学计算机与控制工程学院  *All rights reserved.  *作    者:李哲  *版 本 号:v1.0  问题描述:(1)用压缩形式存...

第九周--数据结构--对称矩阵压缩存储的实现

光棍节,写篇小文章

【数据结构】对称矩阵和稀疏矩阵的压缩存储

1.对称矩阵 假设有一个N*N的方阵A,A中任意元素Aij,当且仅当Aij==Aji(0 对称矩阵又以对角线为分隔分为上三角和下三角。 压缩存储的目的就是为了减小存储空间,对称矩阵的元素有N*(N...

数据结构 对称矩阵的压缩存储与稀疏矩阵的转置

对称矩阵的压缩存储与稀疏矩阵的转置
  • demi_hu
  • demi_hu
  • 2017年03月18日 12:39
  • 491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【数据结构】对称矩阵及对称矩阵的压缩存储
举报原因:
原因补充:

(最多只允许输入30个字)