Триангуляция Делоне на Сфере — различия между версиями
Novik (обсуждение | вклад) |
Novik (обсуждение | вклад) |
||
Строка 29: | Строка 29: | ||
{{Лемма | {{Лемма | ||
+ | |about=1 | ||
+ | |id=1 | ||
|statement=Алгоритм найдет ближайшую точку | |statement=Алгоритм найдет ближайшую точку | ||
|proof=Допустим, что это не так. Это значит, что в внутри окружности с центром в точке <tex>Q</tex>, на которой лежит точка <tex>P</tex>, есть какие-то другие точки. То есть другими словами существует плоскость <tex>\alpha</tex> проходящая через точку <tex>P</tex>, выше которой находятся точка <tex>Q</tex>(так как она центр) и какие-то точки триангуляции. | |proof=Допустим, что это не так. Это значит, что в внутри окружности с центром в точке <tex>Q</tex>, на которой лежит точка <tex>P</tex>, есть какие-то другие точки. То есть другими словами существует плоскость <tex>\alpha</tex> проходящая через точку <tex>P</tex>, выше которой находятся точка <tex>Q</tex>(так как она центр) и какие-то точки триангуляции. | ||
Строка 37: | Строка 39: | ||
{{Лемма | {{Лемма | ||
+ | |about=2 | ||
+ | |id=2 | ||
|statement=Среднее число точек, лежащих внутри окружности с центром в точке <tex>Q</tex> и проходящей через точку <tex>V_{i + 1}</tex> равно <tex>O(1)</tex>. | |statement=Среднее число точек, лежащих внутри окружности с центром в точке <tex>Q</tex> и проходящей через точку <tex>V_{i + 1}</tex> равно <tex>O(1)</tex>. | ||
|proof=Рассмотрим точки триангуляции <tex>\{A_i\}</tex>. Для каждой точки <tex> A_i</tex> проведем окружность с центром в ней, проходящую через ближайшую к ней точку. Посчитаем во сколько окружностей в среднем попадет точка какая-то точка <tex>U</tex>. | |proof=Рассмотрим точки триангуляции <tex>\{A_i\}</tex>. Для каждой точки <tex> A_i</tex> проведем окружность с центром в ней, проходящую через ближайшую к ней точку. Посчитаем во сколько окружностей в среднем попадет точка какая-то точка <tex>U</tex>. | ||
Строка 52: | Строка 56: | ||
{{Лемма | {{Лемма | ||
+ | |about=3 | ||
+ | |id=3 | ||
|statement=Средняя степень точек на <tex>i</tex> уровне внутри окружности с центром в точке <tex>Q</tex> и проходящей через точку <tex>P_{i + 1}</tex>(ближайшая точка на <tex>i + 1</tex> уровне) | |statement=Средняя степень точек на <tex>i</tex> уровне внутри окружности с центром в точке <tex>Q</tex> и проходящей через точку <tex>P_{i + 1}</tex>(ближайшая точка на <tex>i + 1</tex> уровне) | ||
|proof=Пусть есть функция <tex>circle(q, p, i)</tex>, возвращающая <tex>1</tex>, если точка <tex>p</tex> принадлежит окружности с центром в точке <tex>q</tex>, проходящую через ближайшую к <tex>q</tex> на <tex>i</tex> уровне точку, а иначе <tex>0</tex>. | |proof=Пусть есть функция <tex>circle(q, p, i)</tex>, возвращающая <tex>1</tex>, если точка <tex>p</tex> принадлежит окружности с центром в точке <tex>q</tex>, проходящую через ближайшую к <tex>q</tex> на <tex>i</tex> уровне точку, а иначе <tex>0</tex>. | ||
+ | |||
Пусть <tex>Points_i</tex> {{---}} множество точек на <tex>i</tex>-ом уровне. | Пусть <tex>Points_i</tex> {{---}} множество точек на <tex>i</tex>-ом уровне. | ||
<tex>X</tex> {{---}} степень вершины внутри окружности, тогда: | <tex>X</tex> {{---}} степень вершины внутри окружности, тогда: | ||
− | <tex dpi = | + | <tex dpi = 130>E(X) = \dfrac{\sum\limits_{q \in Points_{i - 1}}{\sum\limits_{p \in Points_{i - 1}}{circle(q, p, i) \cdot deg(p)}}}{\left| Points_{i - 1} \right|} =</tex> |
Меняем порядок суммирования, и получаем: | Меняем порядок суммирования, и получаем: | ||
− | <tex dpi = | + | <tex dpi = 130>= \dfrac{\sum\limits_{p \in Points_{i - 1}}{deg(p) \sum\limits_{q \in Points_{i - 1}}{circle(q, p, i)}}}{\left| Points_{i - 1} \right|} \leqslant</tex> |
По предыдущей лемме получаем: | По предыдущей лемме получаем: | ||
− | <tex dpi = | + | <tex dpi = 130>\leqslant \dfrac{\sum\limits_{p \in Points_{i - 1}}{deg(p) \sum\limits_{1 \dots \infty}{i \cdot p \cdot (1 - p) ^ i}}}{\left| Points_{i - 1} \right|} \approx</tex> |
+ | |||
+ | <tex dpi = 130>\approx \dfrac{\sum\limits_{p \in Points_{i - 1}}{deg(p)}}{\left| Points_{i - 1} \right|} = \dfrac{O(n)}{n} = O(1)</tex> | ||
+ | }} | ||
+ | |||
+ | {{Лемма | ||
+ | |about=4 | ||
+ | |id=4 | ||
+ | |statement=Один уровень в среднем обрабатывается за <tex>O(1)</tex> | ||
+ | |proof=По [[#2|лемме 2]] алгоритм пройдет в среднем <tex>O(1)</tex> вершин, степень которых так же равна по [[#3|лемме 3]] <tex>O(1)</tex>, следовательно один уровень будет обработан за <tex>O(1)</tex>. | ||
+ | }} | ||
− | + | {{Теорема | |
+ | |about=Следствие | ||
+ | |statement=Локализация в среднем работает за <tex>O(\log{n})</tex> | ||
}} | }} |
Версия 00:52, 21 ноября 2016
Содержание
Динамический алгоритм
Локализация в триангуляции
Построим алгоритм на сфере по аналогии с плоскостью.
Структура данных
Локализационная структура состоит из нескольких уровней, где каждый уровень — триангуляция Делоне. На нижнем уровне содержатся все точки. Далее точка с вероятностью
попадает на следующий уровень. Если на последнем уровне находится одна точка, то дальше она уже не пойдет.Лемма (О количестве уровней): |
Математическое ожидание уровней в локализационной структуре . |
Доказательство: |
То же самое, что и для плоскости. |
Утверждение: |
Локализационная структура занимает памяти. |
Опять же доказательство копируется с плоскости. |
Принадлежность треугольнику
Пусть даны точки
, , , на сфере с центром , тогда принадлежит треугольнику , тогда и только тогда, когда поворот относительно плоскостей , , одинаковый.Алгоритм
Чтобы найти треугольник, которому принадлежит точка запроса(точка
), сначала найдем ближайшую к ней точку триангуляции(точка ), а зачем вдоль луча будем обходить треугольники, пока не локализуемся.Поиск точки
:- На последнем уровне нашей структуры находиться точек, поэтому просто переберем эти точки и найдем ближайшую к .
- При переходе с уровня на новая ближайшая точка может быть только внутри окружности с центром в точке проходящей через точку (ближайшая точка на уровне). Переберем всех соседей точки и выберем ближайшего к точке . Повторяем эту операцию, пока можем приближаться к точке запроса.
Лемма (1): |
Алгоритм найдет ближайшую точку |
Доказательство: |
Допустим, что это не так. Это значит, что в внутри окружности с центром в точке Будем уменьшать угол , на которой лежит точка , есть какие-то другие точки. То есть другими словами существует плоскость проходящая через точку , выше которой находятся точка (так как она центр) и какие-то точки триангуляции. Проведем в точке касательную плоскость к сфере. Очевидно, что она делит всё пространство на части: в первой нет никаких точек, а во второй находятся все точки триангуляции. Пусть между плоскостями и угол . Начнем его уменьшать, то есть поворачивать плоскость . Очевидно, что она начнет пересекать сферу, тогда она будет соответствовать какой-то окружности на сфере. При этом все точки сферы, которые выше плоскости будут выше плоскости , значит это будет вложенная окружность. до того момента, когда какая-то точка , лежащая внутри окружности(такая есть по предположению), не станет принадлежать плоскости . В этот момент выше плоскости нет ни одной точки из триангуляции. Значит для ребра можно провести окружность, не содержащую других точек, то есть выполняется глобальный критерий Делоне. Значит в триангуляции должно быть ребро , и по алгоритму мы должны были его перебрать и увидеть, что ближе к точке и перейти к ней. Получили противоречие, значит алгоритм правильно находит ближайшую точку. |
Лемма (2): |
Среднее число точек, лежащих внутри окружности с центром в точке и проходящей через точку равно . |
Доказательство: |
Рассмотрим точки триангуляции . Для каждой точки проведем окружность с центром в ней, проходящую через ближайшую к ней точку. Посчитаем во сколько окружностей в среднем попадет точка какая-то точка . Проведем через три плоскости так, чтобы они делили всё пространство на равных частей. Покажем, что в одной части окружностей будут включать в себя точку , тогда всего таких окружностей будет тоже . Рассмотрим одну часть. Отсортируем точки, которые ей принадлежат, по степени удаленности от точки . Окрасим точки в два цвета:
Если на -ой позиции находится черная точка, то точки с индексом и далее не будут содержать в окружности точку (потому что была ближайшей на предыдущем уровне из этой части пространства). Тогда если — количество окружностей, которым принадлежит точка , то так как точка проходит на следующий уровень с вероятностью :Получается, что каждая точка принадлежит , следовательно внутри каждой окружности содержит точек. |
Лемма (3): |
Средняя степень точек на уровне внутри окружности с центром в точке и проходящей через точку (ближайшая точка на уровне) |
Доказательство: |
Пусть есть функция , возвращающая , если точка принадлежит окружности с центром в точке , проходящую через ближайшую к на уровне точку, а иначе .Пусть — множество точек на -ом уровне. — степень вершины внутри окружности, тогда:
Меняем порядок суммирования, и получаем:
По предыдущей лемме получаем:
|
Лемма (4): |
Один уровень в среднем обрабатывается за |
Доказательство: |
По лемме 2 алгоритм пройдет в среднем вершин, степень которых так же равна по лемме 3 , следовательно один уровень будет обработан за . |
Теорема (Следствие): |
Локализация в среднем работает за |