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

原创 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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

对称矩阵的压缩存储与稀疏矩阵的转置

【第九周项目2-对称矩阵压缩存储的实现与应用(1)】

问题及代码: /* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:Cube007.cpp * 作 ...

c++实现对称矩阵的压缩存储

c++实现对称矩阵的压缩存储

第九周 项目二--对称矩阵压缩存储的实现与应用

(1) /* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. ...

项目 2 - 对称矩阵压缩存储的实现应用

/*      *Copyright (c) 2016,烟台大学计算机学院  *All right reserved.      *文件名称:test.cpp    &...

对称矩阵的压缩存储

矩阵对于学数学的都不陌生,说白了就是一个二维数组嘛,不过矩阵里有一些很有特色的矩阵,今天我们就来看一种——对称矩阵。下面来看一个对称矩阵,顺便分析一下,对称矩阵的性质,以便我们随后的研究。我们看,中间...

对称矩阵与压缩存储算法(java实现)

一、问题描述 实现一个对称矩阵的压缩存储 二、算法分析 对称矩阵的特点:a[i][j] = a[j][i].即所有元素关于对角线对称 所以可以将对称矩阵的下三角存储在一个数组对象SA中,存储方...

【第九周项目2-对称矩阵压缩存储的实现与应用(2)】

问题及代码: /* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:Cube007.cpp * 作 ...

第9周项目2 对称矩阵压缩存储的实现与应用

问题及代码: 文件名:main.cpp 作者:郑孚嘉 问题描述:(1)用压缩形式存储对称矩阵,实现下面的操作并测试 void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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