Минимальная охватывающая окружность множества точек — различия между версиями
Gr1n (обсуждение | вклад) (→Корректность алгоритма) |
Gr1n (обсуждение | вклад) (→Корректность алгоритма) |
||
Строка 64: | Строка 64: | ||
Если <tex> p \in md(P \setminus \{p\}, R) </tex>, то <tex> md(P, R) = md(P \setminus \{p\}, R) </tex> | Если <tex> p \in md(P \setminus \{p\}, R) </tex>, то <tex> md(P, R) = md(P \setminus \{p\}, R) </tex> | ||
|proof= | |proof= | ||
− | + | Для множества <tex> P \setminus \{p\} </tex> справедливо, что для него минимальный диск по определению - это <tex> md(P \setminus \{p\}, R) </tex>, но так как <tex> p </tex> лежит внутри него, то он и является корректным диском для множества <tex> P </tex>. Но если бы в <tex> P </tex> существовал еще меньший диск, то он бы существовал бы и для <tex> P \setminus \{p\} </tex>. Значит эти диски равны и <tex> md(P, R) = md(P \setminus \{p\}, R) </tex> | |
}} | }} | ||
Версия 14:21, 16 января 2014
Конспект не готов. |
Описание
Минимальная охватывающая окружность множества точек (smallest enclosing disc) - это задача, в которой необходимо по заданному набору точек найти окружность минимального радиуса, которая содержит все точки множества.
Алгоритм
Сперва приведем алгоритм, корректность которого позднее будет доказана.
Рассмотрим метод
, который будет принимать на вход множество точек, а возвращать будет искомую охватывающую окружность. Идея метода в том, что он генерирует случайную перестановку из точек, которые поступили на вход и в получившимся порядке по одной добавляет их в текущую охватывающую окружность. Как будет доказано позднее, если на каком-то шаге алгоритма текущая точка оказалась вне текущей минимальной окружности, то утверждается, что она лежит на границе новой окружности, которая будет содержать в себе ее и все предыдущие точки. Опишем приведенный выше алгоритм псевдоком:MinDisc(S)
Let P - random permutation of S
Let D2 - be the smallest enclosing disc for {p1, p2}.
for i = 3 to n {
if pi
Di−1 then Di = Di−1 // point is inside. nothing to do here
else Di = MinDiscWithPoint ({p1,...,pi−1}, pi) // point is lying on the boundary of minimal circle
}
return Dn
Как вы заметили, мы использовали выше метод
- это метод, который по множеству точек и еще одной точке возвращают искомую окружность. При этом выделенная точка (которая передается в качестве второго аргумента) обязательно лежит на окружности. Эта функция очень похожа на предыдущую, поэтому приведу лишь ее псевдокод:MinDiscWithPoint(S, q)
Let P - random permutation of S
Let D1 - be the smallest enclosing disc for {p1, q}.
for i = 2 to n {
if pi
Di−1 then Di = Di−1
else Di = MinDiscWith2Points ({p1,...,pi−1}, pi, q)
}
return Dn
Как и в предыдущем случае мы использовали новый метод.
аналогичен , но в нем уже передается две точки, которые будут лежать на построенном окружности. В этой функции шафлить инпут не требуется. Опишем его псевдоком:MinDiscWith2Points(P, q1, q2)
Let D0 - be the smallest enclosing disc for {q1, q2}.
for i = 1 to n {
if pi
Di−1 then Di = Di−1
else Di = сircumcircle (прим. описанная окружность) of a triangle {pi, q1, q2}
}
return Dn
Как мы видим больше подобных шагов делать не нужно, так как если известно, что три точки лежат на некоторой окружности, то они однозначно ее задают.
Корректность алгоритма
Попробуем разобраться почему этот алгоритм действительно находит искомую окружность.
Докажем несколько вспомогательных лемм. Для удобства введем общие обозначения. Пусть
и - два непересекающихся множества точек на плоскоти, Пусть - некоторая точка из множества .Лемма (лемма 1): |
Окружность минимального радиуса, содержащая все точки внутри себя и все точки на границе уникальна. |
Доказательство: |
Пусть это не так и существует две такие окружности и . Очевидно, что в таком случае все точки из должны лежать внутри . Пусть - точка пересечения окружностей (смотри рисунок). Рассмотрим некоторое семейство окружностей . При этом центры этих окружностей лежат на отрезке, соединяющем центры и , и перемещаются очвеидным образом в зависимости от параметра . При этом радиус каждой из этих окружностей - расстояние от центра до точки , описанной выше. Рассмотрим окружность . Заметим, что лежит целиком внутри нее (по построению окружности ), а так как проходит через пересечение окружностей и , то она проходит через все точки (так все точки лежат на .). Из этого следует, что эта окружность явлется допустимой для нашей теоремы и при этом обладает меньшим радиусом, то наше предположение неверно и искомая окружность единственная.
|
Лемма (лемма 2): |
Если , то |
Доказательство: |
Для множества | справедливо, что для него минимальный диск по определению - это , но так как лежит внутри него, то он и является корректным диском для множества . Но если бы в существовал еще меньший диск, то он бы существовал бы и для . Значит эти диски равны и
Лемма (лемма 3): |
Если , то |
Доказательство: |
БЛАБЛАБЛА |
Память и время работы
Источники
Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmars-Computational Geometry Algorithms and Applications, p. 86