<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=193.107.90.37&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=193.107.90.37&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/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/193.107.90.37"/>
		<updated>2026-06-11T18:40:58Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%80%D0%B8%D0%B0%D0%BD%D0%B3%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%94%D0%B5%D0%BB%D0%BE%D0%BD%D0%B5&amp;diff=36070</id>
		<title>Триангуляция Делоне</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%80%D0%B8%D0%B0%D0%BD%D0%B3%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%94%D0%B5%D0%BB%D0%BE%D0%BD%D0%B5&amp;diff=36070"/>
				<updated>2014-02-10T19:42:48Z</updated>
		
		<summary type="html">&lt;p&gt;193.107.90.37: /* Удаление точки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ptready}}&lt;br /&gt;
{{nohate}}&lt;br /&gt;
== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Подразбиение Делоне''' — такое разбиение плоскости на множество выпуклых фигур, что в окружности, описанной вокруг любой из фигур, не  находится никаких точек.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Триангуляция Делоне''' — триангуляция, являющаяся подразбиением Делоне.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Существование триангуляции Делоне ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Окружность, спроецированная на параболоид, находится в одной плоскости. Все точки, лежащие внутри окружности, будут лежать под этой плоскостью. Точки, лежащие вне окружности, будут лежать над плоскостью.&lt;br /&gt;
|proof=&lt;br /&gt;
{{TODO|t=Тут будет какой-то определитель спроецированных на параболоид точек}}&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{vmatrix}&lt;br /&gt;
x &amp;amp; y \\&lt;br /&gt;
z &amp;amp; v&lt;br /&gt;
\end{vmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Подразбиение Делоне существует, причём для каждого набора точек оно единственно.&lt;br /&gt;
|proof=&lt;br /&gt;
Спроецируем все точки на параболоид и построим выпуклую оболочку. По лемме очевидно, что внутри окружностей, описанных вокруг проекций граней выпуклой оболочки, не будет лежать никаких точек. Значит, проекции граней — фигуры подразбиения Делоне. Значит, такое подразбиение существует. &lt;br /&gt;
&lt;br /&gt;
Из единственности выпуклой оболочки следует, что такое подразбиение единственно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Некоторые упоительные факты ==&lt;br /&gt;
{{TODO|t=Раскидать это всё в те разделы, где это нужно}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Критерий Делоне для ребра''' — на ребре можно построить такую окружность, что внутри неё не будет лежать никаких точек.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Триангуляции Делоне принадлежат те и только те рёбра (с поправкой на точки, лежащие на одной окружности), которые удовлетворяют критерию Делоне&lt;br /&gt;
|proof=&lt;br /&gt;
{{TODO|t=А как это вообще доказывается?}}&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ребро назовём '''хорошим''', если для пары треугольников, которым принадлежит это ребро, выполняется критерий Делоне (то есть вершина, противолежащая ребру в одном треугольнике, не лежит в окружности, описанной вокруг другого, и наоборот)&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Из двух рёбер, которые можно провести для пары треугольников, как минимум одно хорошее&lt;br /&gt;
|proof=&lt;br /&gt;
Спроецируем четыре точки на параболоид. Очевидно, что по ним можно построить четырёхугольник {{Acronym|двумя способами: в первом случае он будет «вогнутым», во втором — «выпуклым»|Если все четыре точки лежат на одной окружности, то оба ребра будут хорошими, так как четырёхугольник можно будет построить только один}}. По доказанному выше факту про окружность, спроецированную на параболоид, выпуклое ребро будет хорошим.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Если все рёбра хорошие, то и триангуляция хорошая&lt;br /&gt;
|proof=&lt;br /&gt;
Ну предположим, что это не так, то есть все рёбра хорошие, но существует треугольник, описанная окружность которого содержит какие-либо точки триангуляции. Тогда очевидно, что одно из рёбер этого треугольника окажется плохим. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Для пары смежных треугольников '''flip''' — убирание смежного ребра и проведение другого&lt;br /&gt;
}}&lt;br /&gt;
Из первой леммы следует, что, если ребро плохое, то флип сделает его хорошим.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Флипами можно достичь хорошей триангуляции за конечное время&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, потому что каждый флип уменьшает разность объёмов параболоида и триангуляции, спроецированной на него.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Динамическая триангуляция ==&lt;br /&gt;
=== Вставка точки ===&lt;br /&gt;
==== Вставка точки, лежащей внутри триангуляции ====&lt;br /&gt;
{{TODO|t=Надо бы вставить сюда картинки}}&lt;br /&gt;
&lt;br /&gt;
Для начала локализуемся: поймём, в каком фейсе лежит точка (или на каком ребре). Вставляем. Итого у нас появилось несколько новых рёбер. Они все хорошие ({{TODO|t=Доказать, почему}}), плохими могут оказаться только рёбра, противолежащие вставленной точке. Флипаем рёбра, пока триангуляция не станет хорошей.&lt;br /&gt;
&lt;br /&gt;
Среднее число флипов — &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; ({{TODO|t=Доказать, почему}}). Поэтому время вставки целиком зависит от времени локализации.&lt;br /&gt;
==== Вставка точки, лежащей снаружи триангуляции ====&lt;br /&gt;
Представим, что вне триангуляции — бесконечные треугольники, основания которых — рёбра выпуклой оболочки триангуляции, а противолежащая ребру вершина — это бесконечно удалённая точка. Тогда понятно, что вставка точки, не лежащей в триангуляции, сведётся к вставке точки внутрь триангуляции, если мы научимся обрабатывать бесконечные фейсы.&lt;br /&gt;
&lt;br /&gt;
{{TODO|t=Написать про бесконечно удалённую точку}}&lt;br /&gt;
&lt;br /&gt;
=== Удаление точки ===&lt;br /&gt;
При удалении точки получится {{Acronym|звёздный многоугольник, который можно затриангулировать за линию|Почему на эту тему нет конспекта? Я не собираюсь тут это доказывать}}. Дальше по традиции флипаем всё, что могло стать плохим, пока не получим хорошую триангуляцию.&lt;br /&gt;
&lt;br /&gt;
Средняя степень вершины в триангуляции — &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; ({{TODO|t=Почему?}} — почти то, что нужно, здесь [http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%B8%D1%80%D0%BA%D0%BF%D0%B0%D1%82%D1%80%D0%B8%D0%BA%D0%B0_%D0%B4%D0%B5%D1%82%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%82%D1%80%D0%B8%D0%B0%D0%BD%D0%B3%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8#.D0.92.D1.8B.D0.B1.D0.BE.D1.80_.D0.BC.D0.BD.D0.BE.D0.B6.D0.B5.D1.81.D1.82.D0.B2.D0.B0_.D1.83.D0.B4.D0.B0.D0.BB.D1.8F.D0.B5.D0.BC.D1.8B.D1.85_.D0.B2.D0.B5.D1.80.D1.88.D0.B8.D0.BD]. Потом пишем &amp;lt;tex&amp;gt;\sum_{v \in V}{deg(v)} = 2E&amp;lt;/tex&amp;gt;, делим на &amp;lt;tex&amp;gt;|V|&amp;lt;/tex&amp;gt; и получаем &amp;lt;tex&amp;gt;avg(deg(v)) = \frac{O(|V|)}{|V|} = O(1)&amp;lt;/tex&amp;gt;), поэтому триангуляция звёздного многоугольника будет тоже за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. С флипами всё тоже, в общем-то, хорошо. Итого удаление точки работает за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Локализационная структура ==&lt;br /&gt;
=== Сама структура ===&lt;br /&gt;
В общем-то, довольно стандартная схема для рандомизированных структур: на нижнем уровне содержатся все точки; каждая точка с вероятностью p проходит на следующий уровень.&lt;br /&gt;
=== Локализация ===&lt;br /&gt;
Как происходит локализация: нам дают точку &amp;lt;tex&amp;gt;v_{i+1}&amp;lt;/tex&amp;gt;, которая на предыдущем уровне была ближайшей к точке &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, которую мы локализуем. Нужно получить следующую точку &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt;, которая будет ближайшей уже на этом уровне. Делается это следующим образом:&lt;br /&gt;
* Находим, в каком из треугольников, смежных с &amp;lt;tex&amp;gt;v_{i+1}&amp;lt;/tex&amp;gt;, лежит отрезок &amp;lt;tex&amp;gt;v_{i+1} q&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Находим, какие рёбра треугольников пересекает &amp;lt;tex&amp;gt;v_{i+1} q&amp;lt;/tex&amp;gt;, в итоге находим треугольник, в котором лежит &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Находим ближайшую к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; точку. Первым кандидатом на то, чтобы быть ближайшей точкой, становится ближайшая к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; вершина найденного в предыдущем пункте треугольника. Для каждого кандидата нужно просмотреть смежные вершины в поиске точки, которая находится ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — эта точка становится следующим кандидатом. Если же среди соседей точки не нашлось более близких, значит, эта точка и есть ближайшая.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Данный алгоритм найдёт ближайшую точку.&lt;br /&gt;
|proof=&lt;br /&gt;
{{TODO|t=Картинку для ясности}}&lt;br /&gt;
Предположим, что это не так. Назовём локализуемую точку &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, а последнего кандидата на то, чтобы быть ближайшей точкой — &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Раз эта точка на самом деле не ближайшая, то в окружности, проходящей через &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, с центром в точке &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; найдутся ещё какие-то точки, не смежные с &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Рассмотрим ближайшую из них к &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;: точку &amp;lt;tex&amp;gt;v'&amp;lt;/tex&amp;gt;. Построим на &amp;lt;tex&amp;gt;vv'&amp;lt;/tex&amp;gt; окружность как на диаметре. В этой окружности не будет лежать никаких точек, так как мы взяли ближайшую. Значит, ребро &amp;lt;tex&amp;gt;vv'&amp;lt;/tex&amp;gt; удовлетворяет критерию Делоне и должно являться ребром триангуляции, но по предположению этого ребра нет. Значит, предположение неверно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Профит ===&lt;br /&gt;
{{TODO|t=Время работы, требуемая память}}&lt;br /&gt;
&lt;br /&gt;
== Constraints ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Констрейнты''' — рёбра, которые нельзя флипать&lt;br /&gt;
}}&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Хорошая триангуляция с констрейнтом может быть хорошей с точностью до видимости через констрейнт&lt;br /&gt;
}}&lt;br /&gt;
=== Вставка ===&lt;br /&gt;
Смотрим на список рёбер, пересечённых ещё не вставленным констрейнтом ({{TODO|t=Картинку бы}}), и флипаем их. Последнее флипнутое ребро и будет констрейнтом {{Acronym|(по понятным причинам)|Рёбра, пересечённые констрейнтом, после флипа будут начинаться в той же точке, что и констрейнт, а заканчиваться в точке, в которой начинается ещё одно пересекающее ребро. Последнее же ребро будет начинаться и заканчиваться в начале и конце констрейнта}}, после флипа пометим его как констрейнт. Понятное дело, критерий «хорошести» ребра при таких фокусах немного изменится: туда добавится проверка на то, не является ли ребро констрейнтом. Затем флипаем всё, что могло стать плохим (кроме констрейнта), пока триангуляция вновь не станет условно хорошей.&lt;br /&gt;
&lt;br /&gt;
{{TODO|t=Тут должно быть ещё несколько упоительных фактов про то, что вставка производится за &amp;lt;tex&amp;gt;O(k^2)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — число пересечённых рёбер, и про то, что, если флипать что попало, можно нарваться на флип в невыпуклом многоугольнике}}&lt;br /&gt;
&lt;br /&gt;
=== Удаление ===&lt;br /&gt;
Аналогично: помечаем ребро как не-констрейнт и начинаем флипать, пока не дойдём до хорошей (или условно хорошей) триангуляции.&lt;br /&gt;
&lt;br /&gt;
Работает оно столько же, сколько и вставка, ибо всё, что мы нафлипали при вставке, нужно перефлипать обратно.&lt;br /&gt;
&lt;br /&gt;
=== Констрейнты в локализационной структуре ===&lt;br /&gt;
В локализационную структуру констрейнты нужно вставлять только на нижний уровень, ибо выше они нафиг не нужны.&lt;/div&gt;</summary>
		<author><name>193.107.90.37</name></author>	</entry>

	</feed>