Автор оригинала: Dileep kumar.
Террительный поиск Алгоритм – это быстрый алгоритм поиска для нахождения максимального или минимума Унимодал функция. Он похож на двоичный поиск и поставляется под делением и завоеванию парадигмы. Это также может быть использовано для поиска максимального значения
Что такое унимодальная функция
Говорят, что функция является однозначным, если она подчиняется одному из следующих свойств.
- Функция строго увеличивается сначала, достигает максимума, а затем строго уменьшается.
- Функция строго уменьшается первым, достигает минимума, а затем строго увеличивается.
Визуальное представление функции унимодальной (Источник: GeeksForGeeks)
Пример
Постановка задачи
Учитывая унимодальную функцию
Решение грубой силы
Простой подход грубой силы для вышеуказанной проблемы состоит в том, чтобы перечислить все возможные значения
Эффективный подход с использованием тройного поиска
Хотя эта проблема также может быть решена с использованием двоичного поиска, позволяет попробовать исследовать решение, используя Террительный поиск алгоритм. Приведенная выше функция – это квадратичное уравнение и является однородным уравнением, таким образом, мы можем применить поиск в наличии на эту проблему.
Здесь позвольте мне объяснить, работающий на рыболовный поиск. Начнем с пространства поиска, равным полному диапазону
Рассмотрим наш ассортимент обозначен
p 1 = l + r − l 3 P1 + \ FRAC {R – L} {3} p 1 = l + 3 r − l
p 2 = r − r − l 3 P2 – \ FRAC {R – L} {3} p 2 = r − 3 r − l
- Если
F ( P 1 ) < F ( P 2 ) f (p1) F ( P 1 ) < F ( P 2 ) Наш максимум не может быть в пределах досягаемости [ л , P 1 ] [l, p1] [ л , P 1 ] Так что наш новый ассортимент будет( p 1 , r ] (p1, r] ( p 1 , r ] - Если
F ( P 1 ) > F ( P 2 ) f (p1)> f (p2) F ( P 1 ) > F ( P 2 ) Наш максимум не может быть в пределах досягаемости[ P 2 , R ] [P2, R] [ P 2 , R ] Так что наш новый ассортимент будет[ л , P 2 ) [l, p2) [ л , P 2 Несомненно - Если
F ( P 1 ) = = F ( P 2 ) F (P1) (P2) F ( P 1 ) = = F ( P 2 ) Наш максимум не может быть в пределах досягаемости[ л , P 1 ) [l, p1) [ л , P 1 ) &&( p 2 , r ] (p2, r] ( p 2 , r ] , поэтому наш новый ассортимент будет[ p 1 , p 2 ] [p1, p2] [ p 1 , p 2 ]
Теперь давайте напишем код Python для реализации вышеуказанной техники и решить данную проблему.
# returns the value of f(x) def f(x): return 6 + x - 0.5 * x * x low = -1e9 high = 1e9 ans_index = None while low <= high: # p1 represents the one-third part of the range p1 = low + (high - low) // 3 # p2 represents the two third part of the range p2 = high - (high - low) // 3 if f(p1) < f(p2): # the final answer can be p2 at this instance, hence update the answer ans_index = p2 # reduce the search space to (p1, high] low = p1 + 1 else: # reduce the search space to [low, p2) high = p2 - 1 # Final answer print(f(ans_index))
Выход
Приведенный выше код печати
Сложность времени
Если начальная длина диапазона есть
T ( n ) = T ( 2 n / 3 ) + 1 T (n) (2n/3) + 1 T ( n ) = T ( 2 n / 3 ) + 1
Решение вышеуказанного уравнения, мы получаем временную сложность быть
Заключение
Торговый поиск может быть использован для решения многих проблем, которые включают в себя униводильное поведение в них. Он имеет очень простую реализацию и очень легко понять.