Для такого общего F
не так-то просто составить оптимизированный алгоритм, в отличие от подхода brute force .
Например, так как мы хотим найти связку из CS , где F ( CS ) максимизирована, мы должны предположить, что мы действительно хотим найти max (Σ F ( CS )) для всех CS или самое высокое F
значение из всех возможных CS , не более (F (cs i ) )? Мы не знаем наверняка.
Кроме того, если F произвольно, мы не можем оценить вероятность наличия F(cs+p1) > F(cs) => F(cs+p1+p2) > F(cs)
.
Однако мы все еще можем это обсудить:
Кажется, мы можем вывести из проблемы, что мы можем обрабатывать каждую CS независимо, то есть, если n = F(cs1)
добавить любую cs2 (будучи не связанной с cs1 ) не будет влиять на значение n
.
Кажется также правдоподобным, и именно здесь мы должны быть в состоянии получить некоторую выгоду, что вычисление F может быть сделано, начиная с любой точки CS , и, в общем, если CS = cs1+cs2
, F(CS) = F(cs1+cs2) = F(cs2+cs1)
.
Затем мы хотим внедрить памятку в алгоритм, чтобы ускорить процесс, когда CS постепенно увеличивается, чтобы найти максимум (F (* 1044). * cs )) [учитывая F general, подход к динамическому программированию, например, начиная с CS, состоящего из всех точек, а затем уменьшая его постепенно, не представляет большого интереса].
В идеале мы могли бы начать с CS, состоящего из точки, увеличив ее на единицу, проверяя и сохраняя значения F (для каждого подмножества). Каждый тест сначала проверяет, существует ли значение F
, чтобы не вычислять его; затем повторите процедуру для другой точки и т. д., найдите лучшие подмножества, которые максимизируют F. Для большого количества точек это очень длительный опыт.
Более разумным подходом было бы попробовать случайные точки и увеличить CS до заданного размера, а затем попробовать другую область, отличную от большей CS, полученной на предыдущем этапе. Можно попытаться оценить вероятность, описанную выше, и направить алгоритм определенным образом в зависимости от результата.
Но, опять же, из-за отсутствия свойств F, мы можем ожидать экспоненциального пробела в виде напоминаний (например, сохранение F (p1, ..., pn) для всех подмножеств). И экспоненциальная сложность.