Странная задача.
Есть куча (
) атомов, у каждого импульс
. Они сгруппированы в 3D пространстве (допустим простая решетка), то есть имеют соседей (ближайший атом).
Импульсы
случайно направленны в разные стороны. Нужно найти количество блоков из
атомов, таких, чтобы любой атом блока был связан с остальными хотя бы через одного соседа, при этом сумма их импульсов была бы равна x.
Начал думать. В голову приходит 2 пути решения:
1. Нужно задать как-то пространственное положение атомов, что бы выявить соседей. Допустим, создать граф, который объединяет соседние атомы своими ребрами. в VertexWeight вершины запихаем собственно, вектор. Обходим граф, ищем удовлетворяющие фрагменты, удаляем повторы и те, которые на самом деле объединены в один больший блок.
2. Пускай вектора задаются множеством. Каждый элемент множества - список из координат атома и его вектора
. При помощи SubSet формируем кучу N-атомных подмножеств. Проверяем их функцией, подходят под критерий или нет. Исключаем повторы.
Собственно, может подскажет кто: какой вариант позволит обработать большие объемы информации? или есть какой-нибудь другой эффективный путь?