Так, у Вас есть
точек (ну или векторов), из которых возможно построить
множеств точек Каждый симплекс, ну или тетраэдр, взаимно однозначно определяется множеством точек. Множества точек буде обозначать буквами
с индексами. Под словом "симплекс" ниже будем понимать невырожденный симплекс, то есть для которого множество точек
линейно независимо. Теперь, если
и
- симплекс, то
- симплекс. И наоборот: если
- не симплекс, то и
- не симплекс (Образно выражаясь, у Вас структура этих множеств - это кусок снизу булеана k-элементого множества). Тогда Вам надо найти среди этих всех
максимальные множества, причем максимальной мощности, либо мощности, не меньшей
(вроде как
нужна только здесь, больше нигде). Для каждого множества
у нас есть способ определить, является ли оно симплексом - проверить линейную независимость векторов по матрице. Остается организовать оптимальный перебор всех (ну или некоторых)
.
Есть такая аналогия: рассматривать каждую точку как вершину графа
мощности
, и будем считать, что любая пара вершин множества
соединена ребром тогда и только тогда, когда
- симплекс. Тогда получится, что Вы ищете в графе
клику максимальной мощности или мощности не меньшей
, что, как известно, NP- полная задача. Но это только аналогия, так как в графе если
связано с
и
- клика, то
- клика, а у нас, если
- симплекс, то для
надо проверять матрицу на линейную зависимость и оттуда находить - симплекс ли
или нет.
То, что Вы делаете - вариант случайного поиска симплекса, если случайный поиск устраивает, то можете возможное количество раз строить симплексы
до тех пор, пока не наткнетесь на максимальный, а затем среди множества получившихся выбрать максимальный.
Можно жадный алгоритм + точный перебор. Ищите хоть какой-то максимальный симплекс по Вашей схеме (можно найти несколько и выбрать симплекс максимальной мощности). Пусть его мощность
, тогда осуществляете перебор всех
-элементных множеств, среди них отбираете симплексы, потом пробуете их укрупнять на один элемент, среди укрупненных тоже отбираете симплексы и т.д. до конца, пока их не останется ни одного.
В общем, трудная задача. Я не думаю, что какая-то еще связь может быть между этими множествами, кроме описанной выше, поэтому придется перебирать кусок булеана снизу.