我正在做一个需要大量向量数学的演示,在分析中,我发现它花费最多的时间来查找给定向量之间的距离。
现在,它遍历一组 X^2 向量,并找到每个向量之间的距离,这意味着它运行距离函数 X^4 次,即使(我认为)只有 (X^2)/2 唯一距离。
它的工作原理是这样的:(伪c)
#define MATRIX_WIDTH 8
typedef float vec2_t[2];
vec2_t matrix[MATRIX_WIDTH * MATRIX_WIDTH];
...
for(int i = 0; i < MATRIX_WIDTH; i++)
{
for(int j = 0; j < MATRIX_WIDTH; j++)
{
float xd, yd;
float distance;
for(int k = 0; k < MATRIX_WIDTH; k++)
{
for(int l = 0; l < MATRIX_WIDTH; l++)
{
int index_a = (i * MATRIX_LENGTH) + j;
int index_b = (k * MATRIX_LENGTH) + l;
xd = matrix[index_a][0] - matrix[index_b][0];
yd = matrix[index_a][1] - matrix[index_b][1];
distance = sqrtf(powf(xd, 2) + powf(yd, 2));
}
}
// More code that uses the distances between each vector
}
}
我想做的是创建并填充 (X^2) / 2 距离的数组,没有冗余,然后在我最终需要它时引用该数组。但是,我对如何以可行的方式索引该数组持空白。哈希表可以做到这一点,但我认为对于一个似乎可以通过巧妙的索引方法解决的问题来说,它太复杂和太慢了。
编辑:这是一个植绒模拟。