<?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=94.25.194.87&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=94.25.194.87&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/94.25.194.87"/>
		<updated>2026-04-26T03:42:17Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F&amp;diff=18708</id>
		<title>Вычислительная геометрия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F&amp;diff=18708"/>
				<updated>2012-03-02T17:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;94.25.194.87: /* Конспекты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Конспекты ==&lt;br /&gt;
&lt;br /&gt;
* [[Представление чисел с плавающей точкой]]&lt;br /&gt;
* [[Предикат &amp;quot;левый поворот&amp;quot;]]&lt;br /&gt;
* [[Интервальная арифметика]]&lt;br /&gt;
* [[Adaptive precision arithmetic]]&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;br /&gt;
== Инструкции ==&lt;br /&gt;
* [[План курса]]&lt;br /&gt;
* [[Написание условий задач]]&lt;br /&gt;
&lt;br /&gt;
== Сдача конспектов ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheet/pub?key=0Ar0nZy99lVSvdDIzR1E5R1MwdDN0MXBiOHRyQ2NVV1E Распределение тем конспектов]&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;br /&gt;
=== Проверка презентаций ===&lt;br /&gt;
&lt;br /&gt;
Чтобы сдать презентацию нужно:&lt;br /&gt;
&lt;br /&gt;
# Выбрать тему (из того, что Антон рассказывал на лекциях).&lt;br /&gt;
# Проверить, не занята ли она, в таблице: [https://docs.google.com/spreadsheet/pub?key=0Ar0nZy99lVSvdDIzR1E5R1MwdDN0MXBiOHRyQ2NVV1E&amp;amp;gid=1 Распределение презентаций].&lt;br /&gt;
# Сообщить о вашем выборе куратору.&lt;br /&gt;
# Убедиться в том, что вас записали в табличку.&lt;br /&gt;
# Сделать fork [https://bitbucket.org/andreyrybak/computational-geometry-presentations репозитория].&lt;br /&gt;
# Создать папку computational-geometry-presentations/cg2012.1/presentations/&amp;lt;название темы&amp;gt;/&lt;br /&gt;
# Сделать презентацию.&lt;br /&gt;
# Сообщить куратору и получить ответ.&lt;br /&gt;
# Исправить недочеты (если есть) и вернуться к предыдущему пункту.&lt;br /&gt;
&lt;br /&gt;
Дедлайн: две недели после выбора темы {{---}} черновик презентации, через месяц {{---}} готовая презентация.&lt;br /&gt;
&lt;br /&gt;
В репозитории есть два примера презентаций в Beamer'e.&lt;br /&gt;
&lt;br /&gt;
=== Требования к презентациям ===&lt;br /&gt;
&lt;br /&gt;
# Презентация должна быть презентацией, а не полотном текста.&lt;br /&gt;
# Неинформативные картинки не приветствуются.&lt;br /&gt;
# Копипаста в любом виде не приветствуется.&lt;br /&gt;
# Презентации надо делать в TeX'е. Презентации в MS PowerPoint или аналогах будут караться отрубанием головы. А именно, для этого стоит использовать пакет beamer. Он хороший, презентации в нём красивые, а аналогов вроде как и нет. Почитать про него можно [http://ru.wikipedia.org/wiki/Beamer_(LaTeX) тут]. В конце статьи есть ссылки на документацию.&lt;br /&gt;
# Картинки лучше рисовать с помощью [http://ru.wikipedia.org/wiki/Metapost MetaPost] или его аналогов (например, PGF/TikZ)&lt;br /&gt;
#* Примеры по использованию MetaPost можно посмотреть [http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html здесь]&lt;br /&gt;
#* Мануал можно взять на [ftp://ifmo2539.dyndns.org/ ftp-сервере]&lt;br /&gt;
#* Руководство по PGF/TikZ можно взять [http://ftp.math.purdue.edu/mirrors/ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf здесь]&lt;br /&gt;
# Весь текст должен выглядеть красиво и правильно. Нерусские кавычки в тексте, дефисы вместо минуса или тире, курсив вместо прямого шрифта и тому подобное не будут одобряться.&lt;br /&gt;
# Антон не одобряет неторопливость!&lt;br /&gt;
&lt;br /&gt;
И вообще, надо ещё специально постараться, чтобы что-то в TeX'е выглядело плохо.&lt;br /&gt;
&lt;br /&gt;
== Условия и чекеры ==&lt;br /&gt;
Куратор - Андрей Козлов&lt;br /&gt;
&lt;br /&gt;
Примерная процедура сдачи выглядит так:&lt;br /&gt;
# написать в комментарий соответстующего тикета, что вы хотите им заняться&lt;br /&gt;
# получить одобрение куратора&lt;br /&gt;
# сделать fork от evaluator-tasks&lt;br /&gt;
# сделать задание&lt;br /&gt;
# структура папок должна быть следующей:&lt;br /&gt;
#* evaluator-tasks/cg2012.1/statements/&amp;lt;название задачи&amp;gt; - для условий&lt;br /&gt;
#* evaluator-tasks/cg2012.1/checkers/&amp;lt;название задачи&amp;gt; - для чекеров&lt;br /&gt;
# оповестить меня о готовности и ждать проверки&lt;br /&gt;
#* в случае успеха - получить баллы (profit)&lt;br /&gt;
#* иначе - пофиксить ошибки и вернуться к пункту 5&lt;br /&gt;
&lt;br /&gt;
Разногласия между условием и чекером, в большинстве своем, будут трактоваться в пользу того, кто первый начал делать.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>94.25.194.87</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%80%D0%B0%D0%BF%D0%B5%D1%86%D0%BE%D0%B8%D0%B4%D0%BD%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0&amp;diff=18692</id>
		<title>Трапецоидная карта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%80%D0%B0%D0%BF%D0%B5%D1%86%D0%BE%D0%B8%D0%B4%D0%BD%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0&amp;diff=18692"/>
				<updated>2012-03-02T14:42:04Z</updated>
		
		<summary type="html">&lt;p&gt;94.25.194.87: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Трапецоидная карта - геометрическая структура позволяющая локализоваться на площади за &amp;lt;tex&amp;gt;O(log(n))&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;br /&gt;
Есть множество отрезков на плоскости.&lt;br /&gt;
Есть запрос (точка q), на выходе {{---}} область, в которой находится точка q.&lt;br /&gt;
&lt;br /&gt;
==Структура данных==&lt;br /&gt;
[[Файл:Trapazoidmapshagal.jpg|650px|thumb|right|трапецоидная карта]]&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
*''Геометрическая''&lt;br /&gt;
&lt;br /&gt;
У нас есть множество отрезков ограниченных оболочкой R(это не выпуклая оболочка, а просто мнимая граница плоскости за которую не вылезают отрезки)&lt;br /&gt;
	&lt;br /&gt;
Мы договариваемся что никакие две точки не лежат на одной вертикале(в противном случаи все еще противнее)&lt;br /&gt;
	&lt;br /&gt;
''Трапецоидная карта'' множества отрезков S  - это эти отрезки + из каждой точки выпущены два луча, вверх и вниз до первого пересечения с другим отрезком или с оболочкой R.&lt;br /&gt;
	&lt;br /&gt;
{{Лемма &lt;br /&gt;
 |statement= Любой face трапецоидной карты ограничен одним или двумя вертикальными отрезками и обязательно двумя не вертикальными отрезками.&lt;br /&gt;
}}&lt;br /&gt;
	[[Файл:Trapezoidmapnavigationshagal.jpg|650px|thumb|right|навигация в трапецоидной карте]]&lt;br /&gt;
&lt;br /&gt;
	Именно отсюда берется название структуры, так как любой face либо трапеция, либо треугольник.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Введем обозначения для навигации по карте.&lt;br /&gt;
&lt;br /&gt;
*левая граница(leftp) - точка определяющая левую сторону трапецоида или в случаи треугольника просто являющаяся левой вершиной.&lt;br /&gt;
*правая граница(rightp) - аналогично левой только справа.&lt;br /&gt;
&lt;br /&gt;
*верхний отрезок(top) и нижний отрезок(bottom) - отрезки ограничивающие трапецоид сверху и снизу.&lt;br /&gt;
&lt;br /&gt;
*трапецоиды называются смежными, если имеют общую вертикальную границу.&lt;br /&gt;
&lt;br /&gt;
*пусть &amp;lt;tex&amp;gt;\Delta_1 и \Delta_2&amp;lt;/tex&amp;gt; смежны и либо top(&amp;lt;tex&amp;gt;\Delta_1&amp;lt;/tex&amp;gt;) = top(&amp;lt;tex&amp;gt;\Delta_2&amp;lt;/tex&amp;gt;), либо bottom(&amp;lt;tex&amp;gt;\Delta_1&amp;lt;/tex&amp;gt;) = bottom(&amp;lt;tex&amp;gt;\Delta_2&amp;lt;/tex&amp;gt;)		&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\Delta_1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;\Delta_2&amp;lt;/tex&amp;gt; называют либо нижними левыми соседями, либо верхними.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Трапецоидная карта построенная на n отрезках содержит максимум 6n+4 вершины и максимум 3n+1 трапецоид.&lt;br /&gt;
|proof=&lt;br /&gt;
*''вершины'', а точнее откуда они берутся.&lt;br /&gt;
[[Файл:Trapezoidmapnavigationleftpshagal.jpg|400px|thumb|right|варианты leftp(&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;)]]&lt;br /&gt;
**4 вершины уходит на оболочку R.&lt;br /&gt;
**&amp;lt;tex&amp;gt;2 \cdot n&amp;lt;/tex&amp;gt; концы отрезков&lt;br /&gt;
**&amp;lt;tex&amp;gt;2 \cdot 2n&amp;lt;/tex&amp;gt; пересечения вертикальных лучей из концов отрезков с другими отрезками или оболочкой&lt;br /&gt;
*''трапецоиды''&lt;br /&gt;
Будем смотреть на левую сторону трапецоида. &lt;br /&gt;
&lt;br /&gt;
У каждого трапецоида есть точка leftp(&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;). Либо это конец какого-то отрезка, либо это левый нижний угол оболочки.&lt;br /&gt;
&lt;br /&gt;
При этом можно сразу сказать, что левый и нижний угол будет соответствовать только одному трапецоиду.&lt;br /&gt;
&lt;br /&gt;
Далее заметим, что правый конец отрезка может быть leftp(&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;) только для одного трапецоида.&lt;br /&gt;
&lt;br /&gt;
Левый конец может быть leftp(&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;) максимум для двух трапецоидов. &lt;br /&gt;
&lt;br /&gt;
Из этого следует, что количество трапецоидов &amp;lt;tex&amp;gt;n + 2n + 1 = 3n + 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
Хранить трапецоиды можно в чем угодно. Вместе с самим трапецоидом, стоит хранить leftp, rightp, top и bottom так же следует хранить соседей трапецоида.&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;br /&gt;
[[Файл:Trapezoidmapsearchstructureshagal.jpg|650px|thumb|right|навигация в трапецоидной карте]]&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;br /&gt;
	&lt;br /&gt;
Еcть два правила:&lt;br /&gt;
	&lt;br /&gt;
*Если текущий узел соответсвует вершине, то смотрим левее или провее мы находимся(проверка по x-координате).&lt;br /&gt;
&lt;br /&gt;
*Если текущий узел соответствует отрезку, то смотрим выше или ниже мы находимся(проверка по y-координате).&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;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
[[Файл:Trapezoidmapnotsuchbadcaseshagal.jpg|400px|thumb|right|простой случай]]&lt;br /&gt;
Во время построения трапецоидной карты(в дальнейшем &amp;lt;tex&amp;gt; T&amp;lt;/tex&amp;gt;) алгоритм так же строит структуру для поиска .&lt;br /&gt;
&lt;br /&gt;
Так как трапецоидная карта - геометрическая структура, а основные операции ведутся именно с поисковой, упор на неё.&lt;br /&gt;
&lt;br /&gt;
Наш алгоритм добавляет отрезки по одному и после каждого добававления модидицирует &amp;lt;tex&amp;gt; T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; D&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;br /&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;
[[Файл:Trpezoidmapbadcaseshagal.jpg|400px|thumb|right|сложный случай]]&lt;br /&gt;
&lt;br /&gt;
===Поиск трапецоидов которых пересек отрезок===&lt;br /&gt;
Чтобы модифицировать карту, мы должны понять где произошло изменение.&lt;br /&gt;
&lt;br /&gt;
Оно произошло в тех трапецоидах которые  пересек текущий отрезок или можно сказать, что трапецоид с i-1-ой итерации не будет в i-ой только если его пересек отрезок.&lt;br /&gt;
&lt;br /&gt;
Пусть якобы есть множество трапецоидов &amp;lt;tex&amp;gt;\Delta_0, \Delta_1, \Delta_2 ... \Delta_k&amp;lt;/tex&amp;gt; упорядоченное по &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Delta_{j+1}&amp;lt;/tex&amp;gt; один из правых соседей &amp;lt;tex&amp;gt;\Delta_j&amp;lt;/tex&amp;gt; Так же при этом не сложно понять каким соседом он является.&lt;br /&gt;
&lt;br /&gt;
Если rightp(&amp;lt;tex&amp;gt;\Delta_j&amp;lt;/tex&amp;gt;) лежит выше &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;, то сосед нижний и наоборот.&lt;br /&gt;
&lt;br /&gt;
Это значит, что если мы знаем первый трапецоид, то мы можем найти остальные просто обходя по карте соседей справа.&lt;br /&gt;
&lt;br /&gt;
Чтобы найти первый трапецоид нужно просто локализовать правый конец в текущей карте.&lt;br /&gt;
&lt;br /&gt;
===update===&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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В случаи если какие-то трапецоиды выродятся в треугольники будет не четыре новых трапецоида , а 2 или 3. Слава богу это не самая большая проблема.&lt;br /&gt;
&lt;br /&gt;
*Сложный - отрезок пересекает сразу несколько трапецоидов.&lt;br /&gt;
&lt;br /&gt;
Итак наш отрезок пересекает трапецоиды &amp;lt;tex&amp;gt;\Delta_0, \Delta_1, \Delta_2 ... \Delta_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сначала добавляем вертикальные лучи из концов текущего отрезка. Это нужно, чтобы модифицировать &amp;lt;tex&amp;gt;\Delta_0 и \Delta_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;
&amp;lt;tex&amp;gt;\Delta_0, \Delta_1, \Delta_2 ... \Delta_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
==Случай коллизии==&lt;br /&gt;
&lt;br /&gt;
==Асимптотика==&lt;br /&gt;
===Запрос===&lt;br /&gt;
Предположим у нас есть запрос на локализацию точки q. Время затраченное на этот запрос будет линейно зависеть от глубина графа. &lt;br /&gt;
&lt;br /&gt;
При добавлении в карту очередного отрезка(в дальнейшем итерация алгоритма) глубина графа увеличивается максимум на 3. Из этого мы можем сделать простую оценку.&lt;br /&gt;
&lt;br /&gt;
Наибольшее время на запрос, которое мы можем потратить {{---}} &amp;lt;tex&amp;gt;3n&amp;lt;/tex&amp;gt;. Произойдет это в самом ужасном из самых ужасных случаев.&lt;br /&gt;
&lt;br /&gt;
Как говорилось раньше отрезки мы добавляем рандомно, а потому редко будет самый ужасный случай и с вероятностных точек зрения время на запрос будет меньше.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим путь пройденный точкой по графу. Каждый узел был создан на какой-то итерации цикла. Обозначим за &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; - количество узлов созданных на итерации i.&lt;br /&gt;
&lt;br /&gt;
Так как никто не выбирал исходное множество отрезков и запрос q, &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; - рандомная величина зависящая только от рандомного порядка добавления отрезков.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E[\sum^{n}_{i=1}X_i] = \sum^{n}_{i=1}E[X_i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как уже упоминалось на каждой итерации добавляется не более 3 узлов, а значит &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; &amp;lt;= 3.&lt;br /&gt;
&lt;br /&gt;
Считая, что &amp;lt;tex&amp;gt; P_i &amp;lt;/tex&amp;gt; - вероятность того, что существует узел, который встречается при нашем запросе созданный на i-ой итерации.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum^{n}_{i=1}E[X_i] &amp;lt;= \sum^{n}_{i=1}3P_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начинаем оценивать &amp;lt;tex&amp;gt; P_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Что значит, что узел был создан на i-ой итерации и встретился при запросе q?&lt;br /&gt;
&lt;br /&gt;
Это значит, что на i - 1-ой итерации мы локализовывали q в трапецоиде &amp;lt;tex&amp;gt; \Delta_q(i - 1) &amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
а на i-ой итерации уже в трапецоиде &amp;lt;tex&amp;gt; \Delta_q(i) &amp;lt;/tex&amp;gt; и эти два трапецоида разные.&lt;br /&gt;
&lt;br /&gt;
То есть, после добавления непонятно чего в карту, трапецоид изменился.&lt;br /&gt;
&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;P_i&amp;lt;/tex&amp;gt; = P(&amp;lt;tex&amp;gt; \Delta_q(i) \ne \Delta_q(i - 1) &amp;lt;/tex&amp;gt;).&lt;br /&gt;
  	&lt;br /&gt;
Если эти два трапеецоида не равны, значит на i-ой итерации трапецоид &amp;lt;tex&amp;gt; \Delta_q(i) &amp;lt;/tex&amp;gt; был одним из созданных при модификации.&lt;br /&gt;
&lt;br /&gt;
Заметим, что все трапецоиды созданные на этой итерации были смежны текущему отрезку(&amp;lt;tex&amp;gt; s_i &amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Значит либо &amp;lt;tex&amp;gt; s_i &amp;lt;/tex&amp;gt; = top(&amp;lt;tex&amp;gt;\Delta_i&amp;lt;/tex&amp;gt;) или bottom(&amp;lt;tex&amp;gt;\Delta_i&amp;lt;/tex&amp;gt;), либо концы &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt; = leftp(&amp;lt;tex&amp;gt;\Delta_i&amp;lt;/tex&amp;gt;) или rightp(&amp;lt;tex&amp;gt;\Delta_i&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Зафиксируем множество отрезков на i-ой итерации. Тогда состояние трапецоидов никак не будет зависеть от порядка добавленных отрезков.&lt;br /&gt;
&lt;br /&gt;
Тогда, вероятность изменения трапецоида - это его вероятность исчезнуть если удалится &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда переходим, к top(&amp;lt;tex&amp;gt;\Delta_i&amp;lt;/tex&amp;gt;) и т.п. так как мы уже говорили, что &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt; будет определенной стороной при навигации.&lt;br /&gt;
&lt;br /&gt;
Отрезки добавлялись рандомно поэтому в качестве &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt; мог быть любой отрезок из &amp;lt;tex&amp;gt;S_i&amp;lt;/tex&amp;gt;. А тогда вероятность для всех сторон 1/i.&lt;br /&gt;
&lt;br /&gt;
Суммируем по всем 4 сторонам.&lt;br /&gt;
	&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;P_i = P( \Delta_q(i) \ne \Delta_q(i - 1)) =  P( \Delta_q(i)  \in  \Delta_q(i - 1) ) \le 4/i&amp;lt;/tex&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum^{n}_{i=1}E[X_i] \le \sum^{n}_{i=1}3P_i \le \sum^{n}_{i=1}12/i \le 12\sum^{n}_{i=1}(1/i) \approx 12 \cdot log(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Память===&lt;br /&gt;
Заметим, что количество трапецоидов как мы доказали раньше равно O(n), поэтому мы должны оценить количество узлов созданых на i-ой итерации.&lt;br /&gt;
	&lt;br /&gt;
А результирующее выражение для памяти тогда будет&lt;br /&gt;
	&lt;br /&gt;
Mem = &amp;lt;tex&amp;gt;O(n) + \sum^{n}_{i=1}&amp;lt;/tex&amp;gt;количество узлов созданное на i-ой итерации&lt;br /&gt;
	&lt;br /&gt;
Обозначив за k_i количество узлов созданное на i-ой итерации&lt;br /&gt;
	&lt;br /&gt;
Mem = &amp;lt;tex&amp;gt;O(n) + \sum^{n}_{i=1}&amp;lt;/tex&amp;gt;E[k_i]   &lt;br /&gt;
	&lt;br /&gt;
Используя вывод из предыдущей части получаем, что &amp;lt;tex&amp;gt;E[k_i] \le O(i)/i = O(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
А тогда Mem = &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Из этих двух выводов очевидно следует, что время построения карты равно &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Здесь будут рассмотрены некоторые основные моменты реализации&lt;br /&gt;
Это только идейные реализации в коде все выглядет пример в 50 раз хуже.(по количеству строк)&lt;br /&gt;
===Класс &amp;quot;трапецоид&amp;quot;===&lt;br /&gt;
struct Trapezoid&lt;br /&gt;
  Trapezoid next&lt;br /&gt;
  Trapezoid up&lt;br /&gt;
  Trapezoid down&lt;br /&gt;
  Trapezoid end&lt;br /&gt;
  Segment top&lt;br /&gt;
  Segment bottom&lt;br /&gt;
  Point left&lt;br /&gt;
  Point right&lt;br /&gt;
&lt;br /&gt;
===Построение трапецоидной карты===&lt;br /&gt;
&lt;br /&gt;
TrapezoidMap(S - segments)&lt;br /&gt;
&lt;br /&gt;
 Строим оболочку(просто находим крайние точки множества отрезков по четырем направлениям)&lt;br /&gt;
  &lt;br /&gt;
 Строим рандомную перестановку отрезков&lt;br /&gt;
    &lt;br /&gt;
   for для всех&lt;br /&gt;
    &lt;br /&gt;
      ищем множество трапецоидов пересекаемых отрезком &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;. //это специальная функция//&lt;br /&gt;
       &lt;br /&gt;
      Удаляем это множество из карты и добавляем новые узлы появившиеся из-за &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt; в поисковой структуре&lt;br /&gt;
    &lt;br /&gt;
      Аналогично для просто карты&lt;br /&gt;
&lt;br /&gt;
===Поиск трапецоидов, которых пересекает отрезок===&lt;br /&gt;
&lt;br /&gt;
LookforTrapezoid(&amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt; - segment)&lt;br /&gt;
&lt;br /&gt;
  Запоминаем левый и правый конец &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;  &lt;br /&gt;
  &lt;br /&gt;
  Делаем запрос на левый конец в карте.&lt;br /&gt;
  &lt;br /&gt;
  j &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; 0;&lt;br /&gt;
  &lt;br /&gt;
  while q &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; правый от rightp(трапецоид_j)&lt;br /&gt;
  &lt;br /&gt;
    do if rightp(трапецоид_j) над &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
      then ставим трапецоид_(j+1) нижним правым соседом трапецоид_j.&lt;br /&gt;
    &lt;br /&gt;
      else ставим трапецоид_(j+1) верхним правым соседом трапецоид_j.&lt;br /&gt;
    &lt;br /&gt;
    j &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; j+1&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
[http://graphics.stanford.edu/courses/cs268-09-winter/  Lecture notes from stanford, Seidel]&lt;/div&gt;</summary>
		<author><name>94.25.194.87</name></author>	</entry>

	</feed>