Мне нужно сгенерировать 100 случайных точек в n-мерном пространстве (для этой программы я установлю 2-мерные для лучшего понимания - поэтому 1 точка имеет 2 координаты) и найду недоминируемые точки. Что такое недоминируемая точка? Если у нас есть точки (x0,y0),...,(x99,y99)
, в паре i
преобладает пара j
, если xi<xj
и yi<yj
. Чтобы найти недоминируемые точки, мы можем сравнить их все друг с другом (не сравнивая одинаковые точки).
Итак, я подумал о создании двух 2D векторов, чтобы хранить в них одинаковые точки (points
и temp
), сравнить их друг с другом, и если в данный момент проверенная точка не является доминирующей среди всех остальных - положить его в nondominated
контейнер. Проблема в том, что я не умею их сравнивать.
Вот небольшой фрагмент кода:
#include <iostream>
#include <vector>
#include <ctime>
#include <algorithm>
#include <numeric>
using namespace std;
double genRand() {
double temp = (double)rand() / RAND_MAX * 100.0 - 50.0;
return temp;
}
void fill_row(vector<double> & row) {
generate(row.begin(), row.end(), genRand);
}
void fill_matrix(vector<vector<double>> & matrix) {
for_each(matrix.begin(), matrix.end(), fill_row);
}
int main()
{
srand(time(NULL));
vector<vector<double>> points(100, vector<double>(2));
vector<vector<double>> temp(100, vector<double>(2));
vector<vector<double>> nondominated;
fill_matrix(points);
copy(points.begin(), points.end(), temp.begin());
return 0;
}
Примечание: я не могу использовать цикл в этой программе - только алгоритмы STL.