Не могли бы вы подтвердить, что я правильно понял вопрос?
Ваша таблица представляет векторы, идентифицированные groupId. Каждый вектор имеет размерность от 100 до 50000, но для измерения не определен порядок. То есть вектор из таблицы на самом деле является представителем класса эквивалентности.
Теперь вы определите сходство двух классов эквивалентности как минимальное евклидово расстояние проекций любых двух представителей классов эквивалентности до подпространства первых 30 измерений.
Примеры проекции на два измерения:
A = <1, 2, 3, 4>
B = <5, 6, 7, 8, 9, 10>
A представляет следующий класс эквивалентности векторов.
<1, 2, 3, 4> <2, 1, 2, 3> <3, 1, 2, 4> <4, 1, 2, 3>
<1, 2, 4, 4> <2, 1, 3, 2> <3, 1, 4, 2> <4, 1, 3, 2>
<1, 3, 2, 4> <2, 3, 1, 4> <3, 2, 1, 4> <4, 2, 1, 3>
<1, 3, 4, 2> <2, 3, 4, 1> <3, 2, 4, 1> <4, 2, 3, 1>
<1, 4, 2, 2> <2, 4, 1, 3> <3, 4, 1, 2> <4, 3, 1, 2>
<1, 4, 3, 2> <2, 4, 3, 1> <3, 4, 2, 1> <4, 3, 2, 1>
Проекция всех представителей этого класса эквивалентности на первые два измерения дает.
<1, 2> <1, 3> <1, 4>
<2, 1> <2, 3> <2, 4>
<3, 1> <3, 2> <3, 4>
<4, 1> <4, 2> <4, 3>
B представляет класс эквивалентности с 720 элементами. Проекция на первые два измерения дает 30 элементов.
< 5, 6> < 5, 7> < 5, 8> < 5, 9> < 5, 10>
< 6, 5> < 6, 7> < 6, 8> < 6, 9> < 6, 10>
< 7, 5> < 7, 6> < 7, 8> < 7, 9> < 7, 10>
< 8, 5> < 8, 6> < 8, 7> < 8, 9> < 8, 10>
< 9, 5> < 9, 6> < 9, 7> < 9, 8> < 9, 10>
<10, 5> <10, 6> <10, 7> <10, 8> <10, 9>
Таким образом, расстояние A и B является квадратным корнем из 8, потому что это минимальное расстояние двух векторов от проекций. Например, <3, 4> и <5, 6> дают это расстояние.
Итак, я прав в своем понимании проблемы?
Действительно наивный алгоритм для n векторов с m компонентами каждый должен был бы вычислять (n - 1) расстояния. Для каждого расстояния алгоритм будет рассчитывать расстояния m! / (м - 30)! проекция для каждого вектора. Таким образом, для 100 измерений (ваша нижняя граница) существует 2,65 * 10 ^ 32 возможных проекций для вектора. Для этого необходимо рассчитать около 7 * 10 ^ 64 расстояний между проекциями и найти минимум, чтобы найти расстояние двух векторов. А затем повторите это n раз.
Надеюсь, я вас неправильно понял или допустил ошибку. Иначе это звучит как нечто действительно сложное и неосуществимое.
Я подумал о том, чтобы упорядочить векторные компоненты и попытаться сопоставить их. Использование Манхэттенского расстояния - если возможно - может помочь упростить решение.