Троичный поиск

Троичный поиск

Трои́чный по́иск (Тернарный поиск) — это метод в информатике для поиска максимумов и минимумов функции, которая либо сначала строго возрастает, затем строго убывает, либо наоборот. Троичный поиск определяет, что минимум или максимум не может лежать либо в первой, либо в последней трети области, и затем повторяет поиск на оставшихся двух третях. Троичный поиск демонстрирует парадигму программирования «разделяй и властвуй».

Возьмём любые две точки и в этом отрезке: . Посчитаем значения функции и . Дальше у нас получается три варианта:

Если окажется, что , то искомый максимум не может находиться в левой части, т.е. в части . В этом легко убедиться: если в левой точке функция меньше, чем в правой, то либо эти две точки находятся в области "подъёма" функции, либо только левая точка находится там. В любом случае, это означает, что максимум дальше имеет смысл искать только в отрезке . Если, наоборот, , то ситуация аналогична предыдущей с точностью до симметрии. Теперь искомый максимум не может находиться в правой части, т.е. в части , поэтому переходим к отрезку . Если , то либо обе эти точки находятся в области максимума, либо левая точка находится в области возрастания, а правая — в области убывания (здесь существенно используется то, что возрастание/убывание строгие). Таким образом, в дальнейшем поиск имеет смысл производить в отрезке , но (в целях упрощения кода) этот случай можно отнести к любому из двух предыдущих. Таким образом, по результату сравнения значений функции в двух внутренних точках мы вместо текущего отрезка поиска находим новый отрезок . Повторим теперь все действия для этого нового отрезка, снова получим новый, строго меньший, отрезок, и т.д.

Рано или поздно длина отрезка станет маленькой, меньшей заранее определённой константы-точности, и процесс можно останавливать. Этот метод численный, поэтому после остановки алгоритма можно приближённо считать, что во всех точках отрезка достигается максимум; в качестве ответа можно взять, например, точку .

Осталось заметить, что мы не накладывали никаких ограничений на выбор точек и . От этого способа, понятно, будет зависеть скорость сходимости (но и возникающая погрешность). Наиболее распространённый способ — выбирать точки так, чтобы отрезок делился ими на 3 равные части:



Впрочем, при другом выборе, когда и ближе друг к другу, скорость сходимости несколько увеличится.

Алгоритм

double l = ..., r = ..., EPS = ...; // входные данные while (r - l > EPS) {

  double m1 = l + (r - l) / 3,
     m2 = r - (r - l) / 3;
  if (f (m1) < f (m2))
     l = m1;
  else
     r = m2;

}

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Троичный поиск" в других словарях:

  • Троичный триггер — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (11 мая 2011) …   Википедия

  • Интерполирующий поиск — основан на принципе поиска в телефонной книге или, например, в словаре. Вместо сравнения каждого элемента с искомым как при линейном поиске, данный алгоритм производит предсказание местонахождения элемента: поиск происходит подобно двоичному… …   Википедия

  • Бинарный поиск — Двоичный (бинарный) поиск (также известен как метод деления пополам и дихотомия) классический алгоритм поиска элемента в отсортированном массиве (векторе). Также применяется для нахождения заданного значения монотонной(невозрастающей или… …   Википедия

  • Линейный поиск — Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей. Линейный, последовательный поиск  алгоритм нахождения заданного значения произвольной функции на некотором отрезке. Данный алгоритм являе …   Википедия

  • Двоичный поиск — Двоичный (бинарный) поиск (также известен как метод деления пополам и дихотомия) классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины. Используется в информатике, вычислительной… …   Википедия

  • Двоичнотроичная ячейка памяти — Троичный триггер электронное, механическое, пневматическое, гидравлическое или другое устройство, имеющее три устойчивых состояния, возможность переключения из любого одного из трёх устойчивых состояний в любое из двух других устойчивых состояний …   Википедия

  • Троичные алгоритмы — Троичные алгоритмы  алгоритмы, в которых применяется деление или умножение на 3 или на 3 в степени n и применяется троичная логика анализа результата. Хорошо подходят для реализации на троичных компьютерах, при эмуляции на двоичных… …   Википедия

  • Список алгоритмов — Эта страница информационный список. Основная статья: Алгоритм Ниже приводится список алгоритмов, группированный по категориям. Более детальные сведения приводятся в списке структур данных и …   Википедия

  • Программируемые алгоритмы —       Служебный список статей, созданный для координации работ по развитию темы.   Данное предупреждение не устанавл …   Википедия

  • Метод бисекции — Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью в соответствии с правилами написания статей. Не следует путать с …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»