У меня есть большое количество 3d точек в паре с факторами важности.
У каждого пользователя есть шесть баллов. Например: Человек Чарли имеет 6 точек: (22,44,55) — его первая точка с фактором важности 3, (10,0,0) — его второй вектор с фактором важности 2,8 вплоть до его шестая точка, то есть (100 300 200) с коэффициентом важности 0,4.
Что я хотел бы сделать, так это найти человека, который больше всего похож на Чарли, не перебирая всех остальных людей. По сути, минимизация этой функции для каждого пользователя (т. е. сопоставление правильных шести баллов от этого пользователя до Чарли):
pythagoras(point, point2) * max(importance_factor, importance_factor2) * (abs(importance_factor - importance_factor2) + 1)
А затем найти пользователя, который больше всего похож на Чарли, выбрав пользователя с наименьшей стоимостью. На данный момент я написал код глупым способом (выполнив множество циклов), но я ищу способ правильно справиться с тем фактом, что существует несколько точек И факторов важности.
Я начал изучать пространственные индексы, но я не думаю, что они будут работать, поскольку у меня есть несколько точек, но, возможно, я мог бы развернуть точки в точку более высокого измерения? То есть вместо 6 точек в 3 измерениях у меня может быть 1 точка в 18 измерениях? Все еще не могу справиться с фактором важности, но это было бы лучше, чем ничего.
К сожалению, я не могу использовать здесь векторы и косинусы, так как (1,1,1) и (400,400,400) — очень противоположные вещи.
Любые идеи?