zoukankan      html  css  js  c++  java
  • 对称矩阵及对称矩阵的压缩存储

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

    以矩阵的对角线为分隔,分为上三角和下三角。

    wKiom1cMz5zzQr_rAAAb3l_RgBs093.png

    如上图,对称矩阵压缩存储存储时只需要存储上三角/下三角的数据,一般情况下用下三角存储,所以最多存储n(n+1)/2个数据。

    对称矩阵和压缩存储的对应关系:

    下三角存储i>=j,  SymmetricMatrix[i][j] == Array[i*(i+1)/2+j]

    template<class T>
    class SymmetricMatrix
    {
    public:
        SymmetricMatrix(T* array, size_t n)
        {
            _arraySize = n*(n + 1) / 2;
            _size = n;
            _array = new T[_arraySize];
            assert(array);
            for (size_t i = 0; i < n; i++)
            {
                for (size_t j = 0; j < n; j++)
                {
                    _array[i*(i + 1) / 2 + j] = array[i*n + j];
                }
            }
        }
        T& GetPos(size_t row, size_t col)    // 获取节点
        {
              //如果该位置为上三角的,利用对称原理,交换该位置的行和列即可
            if (row < col)   
            {
                swap(row, col);
            }
            return _array[row*(row + 1) / 2 + col];
        } 
        void Display()     //打印
        {
            for (int i = 0; i < _size; i++)
            {
                for (int j = 0; j < _size; j++)
                {
                    if (i >= j)
                    {
                        cout << _array[i*(i + 1) / 2 + j] << " ";
                    }
                    else if (i<j)
                    {
                        cout << _array[j*(j + 1) / 2 + i] << " ";
                    }
                }
                cout << endl;
            }
            cout << endl;
        }
    private:
        T *_array;      //压缩矩阵
        size_t _size;   //方阵大小_size*_size
        size_t _arraySize;   //压缩矩阵的总大小
    };
    

      

  • 相关阅读:
    //删除字符串值的某个值
    disabled和readonly 的用法区别
    Js判断为空或不是对象或是否相等
    1.类型分析:
    多行内容放到一行中(内容的合并)
    sql split
    sql修改列名
    对oracle数字类型的研究
    kettle--组件(3)--行转列
    kettle--组件(2)--计算器
  • 原文地址:https://www.cnblogs.com/Lynn-Zhang/p/5407751.html
Copyright © 2011-2022 走看看