<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=46.229.177.0%2F24</id>
	<title>Поле цифровой дидактики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=46.229.177.0%2F24"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/46.229.177.0/24"/>
	<updated>2026-10-03T23:05:13Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A2%D1%80%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA&amp;diff=4636</id>
		<title>Троичный поиск</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A2%D1%80%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA&amp;diff=4636"/>
		<updated>2018-12-22T21:52:06Z</updated>

		<summary type="html">&lt;p&gt;46.229.177.35: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Трои́чный по́иск&#039;&#039;&#039; &#039;&#039;(Тернарный поиск)&#039;&#039; — это метод в информатике для поиска [[экстремум|максимумов и минимумов]] [[функция (математика)|функции]], которая либо сначала [[монотонная функция|строго возрастает]], затем [[монотонная функция|строго убывает]], либо наоборот. Троичный поиск определяет, что минимум или максимум не может лежать либо в первой, либо в последней трети области, и затем повторяет поиск на оставшихся двух третях. Троичный поиск демонстрирует парадигму программирования «[[Разделяй и властвуй (программирование)|разделяй и властвуй]]».&lt;br /&gt;
&lt;br /&gt;
== Функция ==&lt;br /&gt;
Предположим, что мы ищем максимум функции &#039;&#039;f&#039;&#039;(&#039;&#039;x&#039;&#039;), и что нам известно, что максимум лежит между &#039;&#039;A&#039;&#039; и &#039;&#039;B&#039;&#039;. Чтобы алгоритм был применим, должно существовать некоторое значение &#039;&#039;x&#039;&#039;, такое, что&lt;br /&gt;
* для всех &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, для которых &#039;&#039;A ≤ a &amp;lt; b ≤ x&#039;&#039;, выполняется &#039;&#039;f(a) &amp;lt; f(b)&#039;&#039;, и&lt;br /&gt;
* для всех &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, для которых &#039;&#039;x ≤ a &amp;lt; b ≤ B&#039;&#039;, выполняется &#039;&#039;f(a) &amp;gt; f(b)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
Находит максимум функции с одним экстремумом между l и r.&lt;br /&gt;
Чтобы найти минимум - достаточно поменять местами действия в ветках if/else.&lt;br /&gt;
*/&lt;br /&gt;
double l = ..., r = ..., EPS = ...; // входные данные&lt;br /&gt;
double m1, m2;&lt;br /&gt;
while (r - l &amp;gt; EPS) {&lt;br /&gt;
   m1 = l + (r - l) / 3; &lt;br /&gt;
   m2 = r - (r - l) / 3;&lt;br /&gt;
   if (f (m1) &amp;lt; f (m2))&lt;br /&gt;
      l = m1;&lt;br /&gt;
   else&lt;br /&gt;
      r = m2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Двоичный поиск]] (используется для поиска точки, где производная меняет знак)&lt;br /&gt;
* [[Метод Ньютона]] (используется для поиска точки, где производная обращается в ноль)&lt;br /&gt;
* [[Метод золотого сечения]] (схож с троичным поиском, полезен, если за одну итерацию вычисление f занимает больше всего времени)&lt;br /&gt;
* [[Интерполирующий поиск]]&lt;br /&gt;
* [[Линейный поиск]]&lt;br /&gt;
&lt;br /&gt;
{{rq|sources|empty|style}}&lt;br /&gt;
{{Методы оптимизации}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы поиска]]&lt;br /&gt;
[[Категория:Алгоритмы оптимизации]]&lt;/div&gt;</summary>
		<author><name>46.229.177.35</name></author>
	</entry>
</feed>