精华内容
下载资源
问答
  • 要求编写算法把矩阵A采用压缩存储,存储到一维数组B[16]中, 并且依次输出B中各元素的值以验证该算法功能已实现 */ #include using namespace std; const int m=5; const int n=5; const int c=16; int B[c]; //...
    /*1.  已知矩阵A[5][5]是一个下三角矩阵,如下图
    要求编写算法把矩阵A采用压缩存储,存储到一维数组B[16]中,
    并且依次输出B中各元素的值以验证该算法功能已实现
    */
    #include<iostream>
    using namespace std;
    const int m=5;
    const int n=5; 
    const int c=16;
    int B[c];               //定义一维数组B[16],长度为16
    //初始化数组A[5][5]
    int A[m][n]={{1},{4,7},{6,9,5},{1,8,4,1},{2,3,0,9,6}};
    int main()
    {
    	int i,j;
    	int k;
    	cout<<"输出二维数组的三角矩阵:"<<endl;
    	for(i=0;i<m;i++)  //输出二维数组A的矩阵
    		{
    			for(j=0;j<n;j++)
    			cout<<A[i][j]<<" ";
    			cout<<endl;
    	}
    	cout<<endl;
    	//对三角矩阵进行压缩
    	for(i=0;i<m;i++)                //遍历三角矩阵
    		{
    			for(j=0;j<n;j++)
    			if(i>=j)				//如果行号大于等于列号
    			{   
    				k=i*(i+1)/2+j;		//求出各元素的下标
    
    				B[k]=A[i][j];		//存储元素
    				
    			}
    			else					//如果行号小于列号
    			{
    				k=c-1;				//将元素下标定为c-1
    				B[k]=0;				//元素的值存储为0
    			}
    			
    	}
    	cout<<"输出三角矩阵压缩后的一维矩阵:"<<endl;
    		for(k=0;k<c;k++)					//按顺序输出压缩后的元素
    		cout<<B[k]<<" ";
    		cout<<endl;
    	    system("pause");
    		return 0;
    }
    
    

    展开全文
  • 数据结构-二维数组-三角矩阵压缩存储

    万次阅读 多人点赞 2017-09-29 16:01:41
    数据结构-二维数组-三角矩阵压缩存储一、什么是三角矩阵前情提要三角矩阵也是属于一类特殊的二维数组矩阵,同样也用压缩的存储方式,能够更好的节约存储空间,二维数组的三角矩阵分为上三角矩阵和下三角矩阵,其实现...

    数据结构-二维数组-三角矩阵压缩存储

    一、什么是三角矩阵

    前情提要

    三角矩阵也是属于一类特殊的二维数组矩阵,同样也用压缩的存储方式,能够更好的节约存储空间,二维数组的三角矩阵分为上三角矩阵和下三角矩阵,其实现的原理差不多类似,下面就细细道来。

    三角矩阵的特点

    此处讨论的三角矩阵的行数和列数是一样的,不妨设都设为n。如下所示:

    a11a12a22a13a23a33δa14a24a34a44a1n1a2n1a3n1a4n1an1n1a1na2na3na4nan1nann

    如上所示,为上三角矩阵,矩阵的对角线以下的所有元素均为同一常数δ,或者无效的数据。从上往下逐行的元素总数是比上一行少一个,构成等差数列条件,以下会用的等差数列数学知识。若δ为常数,则需要在所有元素的最后一个另外加一个元素位置单独存放该数据,毕竟只要是有效数据就需要存储的嘛。对于下三角矩阵有类似的特点,这里放到公式推导里面去介绍。

    二、三角矩阵压缩存储

    上三角矩阵的存储

    如下所示:
    上三角矩阵
    对于元素处于上三角区域,即元素aij,其中ij,可得如下规律:
    1行有n个元素,第2行有(n1)个元素,第3行有(n2)个元素,第i行有(ni+1)个元素,…第n行有(nn+1)(即只有1个元素)个元素;可得对于元素aij,第(i1)行(即元素aij前一行)共有:

    k=1i1(nk+1)=(i1)(2ni+2)2
    个元素,元素aij,在第i行中是第(ji+1)个元素,规定:每个元素所占的长度为e,所以:
    address(aij)=address(a11)+((i1)(2ni+2)2+ji)e

    对于元素处于下三角区域,即元素aij,其中i>j,因为下三角区的元素值都一样(如果元素的值有效),则把它放到存储区的最后一个单元,即:(n+1)n2+1的位置,可得地址公式:
    address(aij)=address(a11)+((n+1)n2)e

    下三角矩阵的存储

    如下所示:
    下三角矩阵
    对于元素处于下三角区域,即元素aij,其中ij,可得如下规律:
    1行有1个元素,第2行有2个元素,第3行有3个元素,第i行有i个元素,…第n行有n个元素;可得对于元素aij,第(i1)行(即元素aij前一行)共有:

    k=1i1k=(i1)(1+i1)2=(i1)i2
    个元素,元素aij在第i行为第j个元素,现规定每个元素占用的单位为e,可得:
    address(aij)=address(a11)+((i1)i2+j1)e
    ,对于上三角区的元素将其放到存储区的最后一个单元,即(n+1)n2+1的位置,可得地址公式:
    address(aij)=address(a11)+((n+1)n2)e
    ,和上三角存储的一样。

    矩阵的压缩存储暂时写到这,写得不好,多多指教哈。

    展开全文
  • 三角矩阵储存为一维数组

    千次阅读 2017-12-24 19:43:52
    压缩矩阵 ,将矩阵存储为一维矩阵,同时...你应该是用一个一维数组存储数据,这样才能达到节省空间的目的,然后输出的时候显示式n*n的矩阵。。。。然后我又重新改了,以下是我的答案,如有错误,添加微信macforyou1

    压缩矩阵  ,将矩阵存储为一维矩阵,同时可以解压缩 

    其实题目记不太清了 。。。。刚刚开始做这道题的时候 ,我是用n*n矩阵来储存数据 ,然后定义了一个压缩方法和解压方法,交完作业老师说,这道题的原意不是这样。。。。。。你应该是用一个一维数组存储数据,这样才能达到节省空间的目的,然后输出的时候显示式n*n的矩阵。。。。然后我又重新改了,以下是我的答案,如有错误,添加微信macforyou1。




    Matrix.java  

    public class  Matrix {
    	int r;
    	int c;
    	int[] values;//定义一个一维数组储存元素
    
    	public Matrix() {
    		r = 1;
    		c = 1;
    		values = new int[1];
    		values[0] = 1;//定义的构造函数为1*1矩阵,默认值为0
    	}
    
    	public Matrix(int r, int c, int[] values) {
    		super();
    		this.r = r;
    		this.c = c;
    		this.values = values;
    	}
            
            //将一维数组解压缩为上三角矩阵
    
     public static void recover(Matrix b) throws Exception{
    int length = b.values.length;
    int n = (int) Math.sqrt(2 * length);
    int[][] a = new int[n][n];
    for (int i = 0, k = 0; i <n; i++) 
    {
    for (int j = 0; j <= i; j++, k++)
     {
    a[i][j] = b.values[k];
    }
    }
     show2(a);
    }


     

     public Matrix add( Matrix y) {
    
    int n = y.values.length;
    
    int[] z = new int[n];
    
    if (this.values.length != y.values.length)
    
    {System.out.println("两个矩阵大小不一样无法相加");
    
    } else
    
    {for (int i = 0; i < n; i++)
    
    {z[i] = this.values[i] + y.values[i];}}
    
    Matrix m=new Matrix(1, this.values.length, z); return m;}
    
    //将储存的一维数组输出
    
    public static void show1(Matrix m)
    
    {
    
    for(int i = 0; i < m.values.length; i++)
    
    {
    
    System.out.print("\t"+m.values[i]);}System.out.println();}
    //将储存的一维数组以矩阵n*n矩阵形式输出,
    
     public static void show2(int[][] array)
    
    {for (int i = 0; i < array.length;i++)
    
    {for (int j = 0; j < array[i].length; j++)
    
    {
    
    System.out.print("\t"+array[i][j]);}
    
    System.out.println();}
    
    }
    
    }


     

    然后定义一个MatrixTest类来测试

    import java.util.zip.ZipEntry;
    
    import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
    
    public class Matrixtest {  
           public static void main(String[] args) throws Exception {
    		Matrix m=new Matrix();
    		m.show1(m);
    		int[] values1={1,2,3,4,5,6};
    		Matrix m1=new Matrix(1, values1.length, values1);
    //		m1.show1(m1);
    		int[] values2={2,3,4,5,6,7};
    		Matrix m2=new Matrix(1, values2.length, values2);
    		m2.show1(m2);
    		m2.recover(m2);
    		Matrix m3=m1.add(m2);
    		m3.show1(m3);
    		
    	}
           
      
          
    }


    展开全文
  • 2010-11-14 00:42在这里就不解释什么是三矩阵了,直接上代码。1#include 2#include 3#define dataType int4#define n 456int main()7{8 dataType A[n][n]={9 {1,4,0,0},10 {3,4,1,0},11 {0,2,3,4},12 {0,0,...
    2010-11-14 00:42

    在这里就不解释什么是三对角矩阵了,直接上代码。

    1 #include <stdio.h>
    2 #include <math.h>
    3 #define dataType int
    4 #define n 4
    5
    6 int main()
    7 {
    8      dataType A[n][n]={
    9          {1,4,0,0},
    10          {3,4,1,0},
    11          {0,2,3,4},
    12          {0,0,1,3}};
    13      dataType B[10];
    14     int i,j,k;
    15
    16     for(i=0;i<n;i++)
    17      {
    18         for(j=0;j<n;j++)
    19          {
    20             if(abs(i-j)<2)
    21              {
    22                  k=2*i+j;
    23                  B[k]=A[i][j];
    24              }
    25          }
    26      }
    27
    28     for(i=0;i<10;i++)
    29      {
    30         printf("%3d",B[i]);
    31      }
    32
    33      printf("/n");
    34      getchar();
    35     return 0;
    36 }

     

    展开全文
  • 一维数组的地址计算 设每个元素的大小是size,首元素的地址是a[1],则 a[i] = a[1] + (i-1)*size 若首元素的地址是a[0] 则a[i] = a[0] + i*size 二维数组的地址计算 (m*n的矩阵) 行优先 设每个元素的大小是size,首...
  • 数组矩阵压缩存储
  • 数据结构-二维数组-特殊矩阵压缩存储一、什么是压缩存储计算机中的存储就是将数据写到主存储器(或者外部辅存)中用于即将到来的计算服务。对于主存储器来说,存储空间十分珍贵,在矩阵的表示中有几类特殊的矩阵,如:...
  • 三角矩阵压缩存储

    千次阅读 2017-11-01 11:50:12
    输出压缩后的一维数组;根据输入的行号列号,从压缩矩阵中计算出元素的值 #include<stdio.h> int main(){ inta[5][5]={ //定义原二维数组 1,0, 0, 0, 0, 5,9, 0, 0, 0, 4,6,...
  • 存储原理 对三角矩阵:|i-j|<=1的位置上非零元素,也就是我们要存储的元素;...如果要存入一维数组中,那么还要减一,即在数组中的位置2i+j-3。   代码 #include <iostream> #include<stdl
  • 数据结构--三角矩阵压缩存储

    千次阅读 2020-01-19 13:56:47
    三角矩阵 三角矩阵的常用压缩方式有两...以下三角矩阵的线性压缩存储为例,进行实现: package pers.zhang.array; /** * @author zhang * @date 2020/1/19 - 13:34 * * 下三角矩阵线性压缩存储 */ public cl...
  • 下三角形数组转换为一维数组

    千次阅读 2013-12-09 12:04:43
    (1) 将大小n*n的下三角数组转换成以行主的一维数组,且不存储内容0的元素! data[i][j]的位置 =i*(i+1)/2+j;   (2) 将大小n*n的下三角数组转换成以列主的一维数组,且不存储内容0的元素! data[i][j]...
  • 编写一个算法,将一个以行为主序存储的一维数组转换以列为主序压缩存储一维数组。例如,设有n×n的上三角矩阵A的上三角元素已按行为主序连续存放在数组b中,请设计一个算法Trans将b中元素按列为主序存放在数组c...
  • 对称矩阵 n阶矩阵中任意一个元素aij都有aij=aji,则...只存储角线+下三角区(按行优先存储一维数组中) 数组大小:(1+n)*n/2 三角矩阵角矩阵 稀疏矩阵 三元表(行,列,值) 十字链表 ...
  • 数据结构-二维数组-对称矩阵压缩存储一、什么是对称矩阵对称矩阵,顾名思义就是矩阵中的元素是对称的,那具体是关于什么对称呢?就是关于角线对策,即关于左上角到右下角的角线对称
  • 特殊矩阵压缩存储数组下标从0开始存储)

    千次阅读 多人点赞 2019-01-05 15:15:51
    一维数组压缩存储 对称矩阵 对称矩阵的特点: a[i][j] = a[j][i] a[i][j] 是 第 i+1 行、第 j+1列 的元素 如何压缩存储? 只存储下三角部分的元素 从a[0][0] 开始,把每行元素都依次存储进一维数组 存储...
  • 简介 使用结构体的一维数组进行对称矩阵的相加与相乘的操作。
  • c++实现下三角矩阵压缩存储

    千次阅读 2015-04-04 19:52:48
    c++实现下三角矩阵压缩存储
  • 数组对特殊矩阵压缩存储一数组1、定义2、与线性表的关系3、存储结构二、特殊矩阵的压缩存储1、特殊矩阵2、对称阵的压缩存储3、三角阵的压缩存储 一、数组 1、定义 数组是由 n(n>=1) 个相同类型的元素构成的...
  • 多维数组与特殊矩阵压缩存储

    千次阅读 2016-09-28 14:15:19
    数组是由类型相同的数据元素构成的有序集合,每个数据元素称为个数组元素,每个元素受(n>=1)个线性关系的的约束,每个元素在n个线性关系中的序号i1,i2...in称为该元素的下标,并称该数组为n维数组. 数组的存储结构与...
  • 目录数组数组的顺序存储结构矩阵的压缩存储对称矩阵三角矩阵对角矩阵稀疏矩阵定义稀疏矩阵的顺序压缩存储三元组表伪地址表示法稀疏矩阵转置——基于三元组表按M的列序转置快速转置稀疏矩阵的链式压缩存储:十字链表 ...
  • 3.所以有时我们为了节省空间需要这些矩阵进行压缩存储。 4.当我们想要压缩的矩阵的数值分布具有一定的规律时我们才可能去实现压缩存储。 二.此类矩阵主要包括三类: 1.对称矩阵 对于它我们只需要记住条规则: 若...
  • 特殊矩阵压缩存储

    2020-08-03 18:48:39
    一维数组的存储结构 二维数组的存储结构 行优先存储 列优先存储 对称矩阵的压缩存储 三角矩阵压缩存储三角矩阵行优先 上三角矩阵行优先 三角矩阵的压缩存储 稀疏矩阵的压缩存储 ...
  • /* ...*All rights reserved. *文件名称:Annpion.cpp *作者:王耀鹏 ...*问题描述:下三角矩阵压缩存储及基本运算 *输入描述:输入第n行的n个数 *输出描述:输出下三角矩阵 */ #include #include #define N 4 vo
  • /* ...*All rights reserved. *文件名称:Annpion.cpp *作者:王耀鹏 ...*问题描述:上三角矩阵压缩存储及基本运算 *输入描述:输入第n行的阶层-n+1个数 *输出描述:输出上三角矩阵 */ #include #include #define N
  • 编写一个程序,实现对称矩阵、上(下)三角矩阵、三角矩阵的压缩存储,要求具有如下功能: (1)输入:以行序主序输入矩阵的全部元素,压缩存储一维数组中。 (2)输出:顺序输出压缩存储一维数组中的矩阵...
  • 要求n阶下半三角矩阵采用一维数组压缩存储(即只存储下半三角)。 程序先从键盘(或字符文件)输入n值,建立三个矩阵的一维数组动态存储结构,然后从键盘(或字符文件)输入两个半三角矩阵,最后输出计算结果到屏幕上(或...
  • 1、数组:由类型相同的数据元素(可以是线性表)构成的有序集合,每个元素受n(n≥1)个线性关系的约束,并称该数组为 n 维数组。 广义表:元素为线性表,类型可不同。 ...一维数组:设一维数组的...
  • 源代码:// 4_a1.cpp -- 下三角矩阵压缩存储定义 /* * -> 题目要求: * 1.已知矩阵A[5][5]是一个下三角矩阵,如下图 ... * 2.要求编写算法把矩阵A采用压缩存储,存储到一维数组B[16]中;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,705
精华内容 1,482
关键字:

对三角矩阵进行压缩存储为一维数组