gpt4 book ai didi

c++ - 对称矩阵,值转换为 C++ vector

转载 作者:行者123 更新时间:2023-11-28 04:47:58 24 4
gpt4 key购买 nike

我正在尝试解决以下问题。假设我有一个大小为 n 的对称矩阵。我想获取所有“重要值”,并将它们存储到一个 vector 中。让我举个例子来更好地解释它。

假设我有以下矩阵 A = [1, 2, 3 // 2, 5, 6 // 3, 6, 9] .我想定义大小为 n*(n+1)/2 的 vector 这样:

V = [A(0,0), A(0,1), A(0,2), A(1,1), A(1,2), A(2,2) ] 

我想找到一个接收两个整数 i 作为输入的函数和 j , 并输出矩阵的对应值。问题是我不想直接访问矩阵,而是想访问 vector 。

到目前为止,这是我的推理。如果我输入 j < i ,我只是交换它们,因为矩阵是对称的。如果我有那个 i == 0 ,数组中的位置就是j .如果不是这样,我想我需要做这样的事情。 (n是矩阵的维数,position是我做数组时需要的整数。)

int position = 0;
for(int k = 0; k < i; k++){
position = position + (n-k);
}
position = position + j % i;

但是,这段代码失败了。我想我已经接近解决方案了,但我遗漏了一些东西。有帮助吗?

最佳答案

最后的 j % i 应该是 j - i


另外,循环本质上是在做

position = n + (n - 1) + ... + (n - i + 1);

可以简化为

position = (n * 2 - i + 1) * i / 2;

所以你可以简单地写

position = (n * 2 - i + 1) * i / 2 + j - i;

position = (n * 2 - i - 1) * i / 2 + j;

关于c++ - 对称矩阵,值转换为 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com