从压缩三角矩阵的线性索引转换为密集索引

计算科学 线性代数 矩阵 算法
2021-11-25 03:52:35

给定索引i,j英石0ij<n, 功能f(i,j)=i+j(j+1)/2按列主要顺序将 2d 索引映射到线性索引。反转此功能的最快方法是什么?我的第一个倾向是在第一个列表上进行二进制搜索n三角形数字,但是否有更快的(也许O(1),除了具有二次存储复杂度的查找表)解决方案?

1个回答

给定线性索引f, 你可以反转

f(i,j)=i+j(j+1)2

通过首先计算j-索引通过

j=1+1+8f2

在哪里是地板函数。那么显然i微不足道地如下

i=fj(j+1)2

公式为j是基于求解二次方程

j^2+j^2f=0

在哪里j^是整数的真正对应物j=j^. 分支切割的选择是显而易见的。

请注意,如果f是一个三角形数,j^是一个整数。