Comments 6
Оптимальный вариант решения задачи поиска минимума — деление отрезка золотым сечением. Ваш вариант сокращает отрезок вдвое за три вычисления функции, а метод золотого сечения — более чем вчетверо. en.wikipedia.org/wiki/Golden_section_search
Поправлюсь: Ваш вариант сокращает отрезок вдвое за два вычисления функции, а метод золотого сечения — в 2.62 раза.
Оптимизация имеет право на существование в определённом классе задач.
Хочу также отметить, что уменьшение количества расчётов значения функции идёт за счёт использования дополнительной памяти: на «глубоких» шагах рекурсии количество хранимых значений может в общем случае быть довольно большим. Поэтому ваша оптимизация (уменьшение числа расчётных точек) будет работать только в том случае, если число шагов рекурсии будет гарантированно меньше соответствующего ему объёма памяти.
Хочу также отметить, что уменьшение количества расчётов значения функции идёт за счёт использования дополнительной памяти: на «глубоких» шагах рекурсии количество хранимых значений может в общем случае быть довольно большим. Поэтому ваша оптимизация (уменьшение числа расчётных точек) будет работать только в том случае, если число шагов рекурсии будет гарантированно меньше соответствующего ему объёма памяти.
… объёма памяти, который мы можем выделить для расчёта.
Вы правы. Однако, надо заметить, что тот же недостаток имеется и у тернарного поиска (правда, в меньшей степени), и у метода золотого сечения. Кроме того надо заметить, что этот метод допускает и нерекурсивную реализацию (что, опять же, в равной степени касается и тернарного поиска и поиска золотого сечения):
double quadSearch(double L, double R) {
double midValue = f((L + R)/2);
double leftValue;
double rightValue;
while (R - L > eps) {
leftValue = f((3*L + R)/4);
if (leftValue < midValue) {
midValue = leftValue;
R = (L + R)/2;
} else {
rightValue = f((L + 3*R)/2);
if (rightValue > midValue) {
midValue = rightValue;
L = (R + L)/2;
} else {
L = (3*L + R)/4;
R = (L + 3*R)/4;
}
}
}
return (R + L) / 2;
}
Sign up to leave a comment.
Квадрарный поиск