【数据结构&算法】二:上三角、下三角中求数组地址--【下标的计算】

一.三角矩阵的概念

以主对角线划分三角矩阵有下三角矩阵和上三角矩阵

下三角矩阵:矩阵(除主对角线)的上三角部分的值均为一个常数C或者0

上三角矩阵:与下三角矩阵相反

图示:(图中蓝色主对角线部分元素(一般情况)永远不都为一个常数或者0)

二.压缩原理
根据上、下三角矩阵的特殊性(有一小半部分的元素都为一个常数C或者0)我们可以考虑将这一半的空间压缩到一个元素(多对一的映射),然后另一半的部分就类似对称矩阵一半部分的压缩存储了。

三.矩阵坐标[i,j]转换为一维数组下标K的方法
1>下三角矩阵:

(1).首先考虑,非重复部分的存储,见图:

可以得出k = i(i-1)/2+j-1 (推导过程可以参考:对称矩阵的压缩

(2).重复部分只需一个元素即可,为不影响前面的存储,考虑放到所有非重复元素的后面即可, 由于前面部分总共的元素个数为:

n(1+n)/2(等差数列求和,每行元素逐级递增)又由于数组以0为起点,所以放到n(1+n)/2的位置即可。

总结:
k = i(i-1)/2+j-1 (i<=j)  
k = n(n+1)/2 (i>j)   
2>上三角矩阵

(1).先考虑非重复部分的存储,图示:

  

 

按行优先存储,矩阵中元素对应一维数组的元素规则为:

由图显而易见,某元素在一维数组中的下标就是它按行优先存储时在半个矩阵中的序号

(1-1)序号 = 所有在它前面元素的个数 = 它所在行前面行的所有元素+它所在行它前面的元素

由于每行元素个数逐级递减,构成一个等差数列,公差:d = 1,首项:a1 = n ,末项:an = n-(i-1) = n-i+1(经评论区提醒,已自纠)

(1-2)前i-1行元素个数为:sn = n(a1+an)/2 = (i-1){n+[n-(i-1)+1]}/2=(i-1)(2n-i+2)/2  

(1-3)第i行中在它前面的元素个数为:j-1

(1-4)公式:K =(i-1)(2n-i+2)/2+j-1

(2).考虑重复部分元素和下三角一样:k = n(n+1)/2

总结:
K = (i-1)(2n-i+2)/2+j-1(i<=j)
K = n(n+1)/2 (i>j)
————————————————


原文链接:https://blog.csdn.net/SWEENEY_HE/article/details/85956176

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值