私は多くのベクトル計算を必要とするデモに取り組んでおり、プロファイリングでは、与えられたベクトル間の距離を見つけるのに最も時間がかかることがわかりました。
現在、X ^ 2ベクトルの配列をループし、それぞれの間の距離を見つけます。つまり、(X ^ 2)/ 2の一意のベクトルしかない場合でも、距離関数をX^4回実行します。距離。
これは次のように機能します:(疑似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距離の配列を作成して入力し、最終的に必要になったときにその配列を参照することです。ただし、この配列に適切な方法でインデックスを付ける方法については空白を描いています。ハッシュテーブルで十分ですが、巧妙なインデックス作成方法で解決できると思われる問題には、複雑すぎて時間がかかると思います。
編集:これは群れのシミュレーション用です。