c++ - 将二维上三角和下三角中的元素映射到线性结构

标签 c++ arrays algorithm matrix indexing

我有一个 NxN 维的矩阵 M,其中 M(i,j) = M(j,i)

我想将此结构表示为 (N²+N)/2 线性数组 K,以节省空间。我的问题是想出将 M(min(i,j),min(i,j)) 映射到范围 [0,(N^2)/2)

的公式

下面是带有 K 线性数组索引的 3x3 矩阵的映射,X 表示这些单元不存在,而是使用它们的转置:

0123
X456
XX78
XXX9

这是一个 7x7 矩阵,其中包含 K 个线性数组的索引

     0  1  2  3  4  5  6
 0  00 01 02 03 04 05 06
 1     07 08 09 10 11 12
 2        13 14 15 16 17
 3           18 19 20 21
 4              22 23 24
 5                 25 26
 6                    27

目前我有以下内容

int main()
{
   const unsigned int N = 10;
   int M[N][N];

   int* M_ = &(M[0][0]);

   assert(M[i][j] = M_[N * min(i,j) + max(i,j)]);

   //int* K = .....
   //assert(M[i][j] = K[.....]);

   return 0;
}

最佳答案

去相反的方向,这是我需要的:

void printxy(int index)  
{  
    int y = (int)((-1+sqrt(8*index+1))/2);  
    int x = index - y*(y+1)/2;  
}

关于c++ - 将二维上三角和下三角中的元素映射到线性结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4803180/

相关文章:

algorithm - 24游戏/倒计时/数字游戏求解器,但答案中没有括号

arrays - 为 RSpec 数组匹配器启用差异

c - 我正在创建一个程序,它接受用户的五个输入并使用另一个函数显示最大的输入

arrays - 将 R 数组列表与暗淡名称绑定(bind)在一起?

c++ - 算法 C/C++ : Fastest way to compute (2^n)%d with a n and d 32 or 64 bit integers

c++ 如何修复 std::cin 错误或解决它

c++ - 我对缓冲区的理解是否正确?

c++ - main 已经在 main.obj 中定义

c++ - GEOS C++ geos::Geometry Buffer(0) 对 convexHull 的错误断言

php - 以类似 HTML 的方式计算列宽(基于单元格内容)