CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

二维数组存放的对称矩阵,将其压缩存储于一个一维数组中时,下标的转换算法

楼主rkhw(C++是啥玩意)2004-10-03 19:51:51 在 专题开发/技术/项目 / 数据结构与算法 提问

比如二维数组存放一对称矩阵a[i][j]=a[j][i]  
  将其压缩存放入一一维数组b[k]  
   
  书上只给出结论:  
  i>=j时  
  k=i(i-1)/2+j-1  
   
  i<j时  
  k=j(j-1)/2+i-1  
   
  可能答案记得不准确,但我不知道是怎么推导出来的,谁能写一下推导步骤。 问题点数:20、回复次数:5Top

1 楼metaphor(真流星蝴蝶剑)回复于 2004-10-04 15:33:00 得分 0

1)对于i>=j时  
  第一行的1个元素放在0开始的地方  
  第二行的2个元素放在0+1开始的地方  
  第三行的3个元素放在0+1+2开始的地方  
  ……  
  第i行的i个元素放在0+1+……+(i-1)的地方  
  0+1+……(i-1)=i(i-1)/2  
  而a[i][j]离这一行首地址的偏移量为j-1  
  所以k=i(i-1)/2+j-1  
   
  2)由于是对称矩阵,i<j时只要交换i,j的位置就可以了Top

2 楼rkhw(C++是啥玩意)回复于 2004-10-04 19:06:19 得分 0

如果(i-1)i/2是a[i][i]的地址,那为什么要将它加上a[i][j]对于a[i][0]的偏移量得出的是a[i][j]的地址。  
   
  还是有点抽象啊Top

3 楼metaphor(真流星蝴蝶剑)回复于 2004-10-05 10:51:54 得分 0

(i-1)i/2是a[i][0]的地址,这样就好啦Top

4 楼rkhw(C++是啥玩意)回复于 2004-10-05 12:54:37 得分 0

这回更不明白了,为什么(i-1)i/2是a[i][0]的地址?Top

5 楼metaphor(真流星蝴蝶剑)回复于 2004-10-07 10:46:38 得分 20

a[0][0]  
  a[1][0],a[1][1]  
  a[2][0],a[2][1],a[2][2]  
  ……  
  放的顺序是这样的,是下三角矩阵Top

相关问题

  • 怎样获得二维数组下标?
  • 如何获得维数组的上,下标?
  • 如何获得二维数组当前位置的下标?
  • 多维数组??
  • 一维数组?
  • 二维数组
  • 如何获取二维数组中一维二维的下标上下限?
  • 求二维数组排列,下二维的下标,~~~~~~~~~~在线等,急啊!
  • 计算2维数组中的最大元素及其下标,要求数组用行指针实现?
  • 如何动态申请三维数组,要求数组的三个下标都能动态的改变

关键词

  • 矩阵
  • 对称矩阵
  • 存放
  • 元素放在0
  • 开始的地方

得分解答快速导航

  • 帖主:rkhw
  • metaphor

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo