Я реализую матрицу расстояний, которая вычисляет расстояние между каждой точкой и всеми остальными точками, и у меня есть 100 000 точек, поэтому размер моей матрицы будет 100 000 х 100 000. Я реализовал это с использованием vector<vector<double> > dist
. Однако для этого большого размера данных он выдаёт ошибку памяти. Ниже приведен мой код, и любая помощь будет действительно оценена.Из памяти и вектора векторов
vector<vector<double> > dist(dat.size()) vector<double>(dat.size()));
size_t p,j;
ptrdiff_t i;
#pragma omp parallel for private(p,j,i) default(shared)
for(p=0;p<dat.size();++p)
{
// #pragma omp parallel for private(j,i) default(shared)
for (j = p + 1; j < dat.size(); ++j)
{
double ecl = 0.0;
for (i = 0; i < c; ++i)
{
ecl += (dat[p][i] - dat[j][i]) * (dat[p][i] - dat[j][i]);
}
ecl = sqrt(ecl);
dist[p][j] = ecl;
dist[j][p] = ecl;
}
}
10 миллиардов записей по 8 байт каждый означает, что вам нужна 80 ГБ памяти для этой структуры данных. –