zoukankan      html  css  js  c++  java
  • 特殊矩阵的压缩存储

    所谓特殊矩阵:是指矩阵中值相同的元素或者零元素的分布有一定的规律。常见的特殊矩阵有:对称矩阵、三角矩阵、对角矩阵。注意:它们都是方阵,即行数和列数相同。

    主对角线:在矩阵中每个元素的行标等于纵标(i==j)。

    上三角:在矩阵中每个元素的行标小于纵标(i<j)。

    下三角:在矩阵中每个元素的行标大于纵标(i>j)。

    一、对称矩阵的压缩存储

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

    压缩存储:由于元素关于主对角线对称,在存储时只存储对称矩阵的上三角或下三角元素,使得对称的元素共享一个存储空间。(以行序为主序存储其下三角+主对角线的元素,一共要存储n*(n+1)/2个元素)

     

     由于k的序号=所有它前面元素的个数=所在行前面行的所有元素+所在行它前面的元素(包括本身)。

    一维数组k与与二维数组元素的i、j之间的关系:

    当i>=j时,k=i*(i+1)/2 + j;//本例都是以0为开始的下标,以下也是类同。

    当i<j时,k=j*(j+1)/2+i;

    二、三角矩阵的压缩矩阵

    上三角矩阵:当一个方阵的主角线以下的所有元素皆为零;

    当i<=j时,k=(i-1)*(2n-i+2)/2+j-2;(以下公式为了方便理解,i,j,k都是从1开始)

    矩阵元素压缩放在一维数组上,可以理解为:

    如5*5矩阵上三角矩阵第一行为5个元素,第二行为4个元素...最后一行为1个元素(也就是元素个数逐减的等差数列an=n-i+1,an代表每行的个数,i代表的是第几项(第几行),所以a1=n-1+1=n,当前行的前面所有行的元素和:s(i-1)=n(a1+an)/2=(i-1)*[n+(n-(i-1)+1)]=(i-1)*(2n-i+2)/2)

    如:a[3][3]=b[10],s2=5+4=9,所以k=s2+j-2=10。

     

    下三角矩阵:当一个方阵的主角线以上的所有元素皆为零;

    当i>=j时,k=i*(i+1)/2+j-2;

    不忘初心,方得始终。只有走过弯路,才更确信当初最想要的是什么。
  • 相关阅读:
    ADO.NET API+MVC实现文件上传及文件下载
    ASP.NET MVC+ajax实现文件上传及文件下载
    js实现cookie读写的简单操作
    数据库 DML、DDL、DCL的简单介绍
    winfrom 控件Chrat 代码实现
    C# Redis简单存储string
    MVC AJAX方法 文件上传下载
    MVC 文件上传下载
    js设置cookie(简单保存cookie)
    cookie的执行过程
  • 原文地址:https://www.cnblogs.com/wszhu/p/12234473.html
Copyright © 2011-2022 走看看