Открыть сервис

Выпуклая оболочка

Выпуклая оболочка — это минимальное выпуклое множество, содержащее заданное множество точек (или более общее множество) в евклидовом пространстве или в аффинном пространстве над вещественными числами. Интуитивно, если представить точки как гвозди, вбитые в доску, то выпуклая оболочка — это форма, которую примет туго натянутая вокруг них резиновая лента. Формально, выпуклая оболочка множества \(S\) — это пересечение всех выпуклых множеств, содержащих \(S\). Для конечного набора точек на плоскости выпуклая оболочка представляет собой выпуклый многоугольник, вершинами которого являются некоторые из исходных точек.

Определение и основные свойства

Пусть \(S\) — подмножество векторного пространства \(\mathbb{R}^n\). Выпуклой оболочкой \(\operatorname{conv}(S)\) называется множество всех выпуклых комбинаций точек из \(S\):

\[ \operatorname{conv}(S) = \left\{ \sum_{i=1}^{k} \lambda_i x_i \mid x_i \in S,\ \lambda_i \ge 0,\ \sum_{i=1}^{k} \lambda_i = 1,\ k \in \mathbb{N} \right\}. \]

Ключевые свойства:

  • Выпуклость: \(\operatorname{conv}(S)\) само является выпуклым множеством.
  • Минимальность: \(\operatorname{conv}(S)\) содержится в любом выпуклом множестве, содержащем \(S\).
  • Идемпотентность: \(\operatorname{conv}(\operatorname{conv}(S)) = \operatorname{conv}(S)\).
  • Для компактного множества \(S\) его выпуклая оболочка также компактна (теорема Каратеодори о выпуклой оболочке).
  • Для конечного набора точек выпуклая оболочка является выпуклым многогранником (политопом).

История

Понятие выпуклой оболочки восходит к работам древнегреческих математиков, изучавших выпуклые фигуры. Однако формальное определение и систематическое исследование появились в XIX веке в рамках развития выпуклого анализа и геометрии. Важный вклад внесли Герман Минковский (теория выпуклых тел) и Константин Каратеодори (теорема Каратеодори, 1907 год). В XX веке, с развитием вычислительной геометрии, задача построения выпуклой оболочки стала одной из фундаментальных алгоритмических проблем.

Алгоритмы построения

Построение выпуклой оболочки для конечного множества точек — классическая задача вычислительной геометрии. Существует несколько основных алгоритмов, различающихся по сложности и применимости.

Алгоритм Джарвиса (заворачивание подарка)

Один из простейших алгоритмов. Начинается с самой левой (или самой нижней) точки. Затем последовательно выбирается точка, которая образует наименьший полярный угол с текущей точкой относительно предыдущего направления. Процесс продолжается, пока не будет достигнута начальная точка. Временная сложность: \(O(nh)\), где \(n\) — число точек, \(h\) — число точек на оболочке. В худшем случае (когда все точки лежат на оболочке) сложность \(O(n^2)\).

Алгоритм Грэхема

Более эффективный метод. Сначала находится точка с минимальной координатой \(y\) (или \(x\)). Затем все остальные точки сортируются по полярному углу относительно этой точки. После этого выполняется обход отсортированного списка с проверкой направления поворота (левое или правое). Точки, образующие правый поворот, удаляются. Временная сложность: \(O(n \log n)\) за счёт сортировки.

Алгоритм быстрой оболочки (Quickhull)

Рекурсивный алгоритм, аналогичный быстрой сортировке. Находит две крайние точки (например, с минимальной и максимальной \(x\)-координатой), которые заведомо принадлежат оболочке. Затем для каждой стороны рекурсивно ищется точка, максимально удалённая от прямой, образуемой этими точками. Точки, лежащие внутри треугольника, отбрасываются. Средняя сложность \(O(n \log n)\), в худшем случае \(O(n^2)\).

Алгоритм Эндрю (монотонные цепи)

Вариант алгоритма Грэхема, не требующий вычисления полярных углов. Точки сортируются по \(x\)-координате, а затем по \(y\)-координате. Строятся верхняя и нижняя части оболочки отдельно с помощью стеков. Временная сложность: \(O(n \log n)\).

Алгоритм Чана

Оптимальный алгоритм, работающий за \(O(n \log h)\). Комбинирует идеи алгоритмов Джарвиса и Грэхема. Разбивает точки на группы, строит их оболочки, а затем объединяет. Сложность зависит от \(h\), что делает его эффективным, когда точек на оболочке мало.

Применение

Выпуклая оболочка находит применение в различных областях науки и техники.

Вычислительная геометрия

  • Коллизии и обнаружение столкновений: выпуклая оболочка используется как упрощённая модель объекта для быстрой проверки пересечений в компьютерной графике, робототехнике и физических симуляторах.
  • Распознавание образов: построение минимальной выпуклой области, содержащей точки одного класса, для классификации.
  • Визуализация данных: построение областей рассеяния на диаграммах.

Анализ данных и машинное обучение

  • Опорные векторные машины (SVM): выпуклая оболочка обучающих выборок используется для нахождения разделяющей гиперплоскости.
  • Кластеризация: выпуклая оболочка кластера позволяет визуализировать его форму и границы.

Геоинформационные системы (ГИС)

  • Определение минимальной зоны покрытия: например, для расчёта зоны обслуживания вышки сотовой связи по набору точек.
  • Анализ пространственного распределения: построение выпуклой оболочки для набора географических объектов (городов, станций).

Робототехника и планирование движения

  • Построение карты препятствий: выпуклая оболочка используется для аппроксимации сложных препятствий в конфигурационном пространстве.
  • Планирование пути: алгоритмы, основанные на выпуклых оболочках, позволяют находить кратчайшие пути в среде с препятствиями.

Экономика и теория игр

  • Ядро кооперативной игры: выпуклая оболочка векторов выигрышей коалиций.
  • Портфельный анализ: эффективная граница Марковица в теории инвестиций является выпуклой оболочкой множества возможных портфелей.

Обобщения и связанные понятия

  • Выпуклая оболочка в пространствах большей размерности: для трёхмерного пространства существуют алгоритмы сложности \(O(n \log n)\) (например, алгоритм случайного инкрементального построения). Для размерности \(d > 3\) задача становится более сложной, и её сложность может достигать \(O(n^{\lfloor d/2 \rfloor})\).
  • Аффинная оболочка: минимальное аффинное подпространство, содержащее множество. В отличие от выпуклой, не требует выпуклых комбинаций с неотрицательными коэффициентами.
  • Выпуклая оболочка множества функций: в функциональном анализе — минимальная выпуклая функция, мажорирующая данное семейство функций.
  • Выпуклая оболочка в метрических пространствах: понятие обобщается на произвольные метрические пространства, где выпуклая оболочка определяется через геодезические.

Интересные факты

  • Теорема Каратеодори утверждает, что любая точка выпуклой оболочки множества \(S \subset \mathbb{R}^n\) может быть представлена как выпуклая комбинация не более чем \(n+1\) точки из \(S\).
  • Теорема Радона (1921) гласит, что любое множество из \(n+2\) точек в \(\mathbb{R}^n\) можно разбить на два подмножества, выпуклые оболочки которых пересекаются.
  • Задача построения выпуклой оболочки является одной из первых задач, для которых был разработан алгоритм с оптимальной сложностью \(O(n \log n)\) на плоскости (алгоритм Грэхема, 1972).
  • В программировании выпуклая оболочка часто используется в задачах олимпиадного программирования и соревнований по алгоритмам.

Источники

  • Препарата Ф., Шеймос М. Вычислительная геометрия: введение. — М.: Мир, 1989.
  • де Берг М., ван Кревелд М., Овермарс М., Шварцкопф О. Вычислительная геометрия. Алгоритмы и приложения. — М.: ДМК Пресс, 2016.
  • Рокафеллар Р. Выпуклый анализ. — М.: Мир, 1973.
  • Cormen T. H., Leiserson C. E., Rivest R. L., Stein C. Introduction to Algorithms. — 3rd ed. — MIT Press, 2009.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →