Постройте и проанализируйте задачу оптимизации: на плоскости заданы n точек; найдите точку P, минимизирующую максимум расстояний до данных точек (минимаксная точка). Обсудите существование, единственность и методы вычисления решения для n=3, n=4 и общего n
Постановка. Пусть на плоскости заданы точки x1,…,xn∈R2x_1,\dots,x_n\in\mathbb R^2x1,…,xn∈R2. Нужно найти точку P∈R2P\in\mathbb R^2P∈R2, минимизирующую максимум евклидовых расстояний до данных точек: minP∈R2f(P),f(P)=max1≤i≤n∥P−xi∥.
\min_{P\in\mathbb R^2} f(P),\qquad f(P)=\max_{1\le i\le n}\|P-x_i\|. P∈R2minf(P),f(P)=1≤i≤nmax∥P−xi∥.
Это классическая задача «минимального охватывающего круга» (1‑center, smallest enclosing circle). Ниже — существование, единственность, геометрическая характеристика и методы для частных случаев. 1) Существование и общие свойства - Функция f(P)f(P)f(P) непрерывна и выпукла; из того, что для ∥P∥→∞\|P\|\to\infty∥P∥→∞ значение f(P)→∞f(P)\to\inftyf(P)→∞, следует, что минимум достигается на некотором компактном множестве (например, внутри выпуклой оболочки точек плюс радиус). Следовательно, решение существует. - Минимальный охватывающий круг определяется радиусом r∗=f(P∗)r^*=f(P^*)r∗=f(P∗) и центром P∗P^*P∗. В оптимуме на границе круга находятся не более трех опорных точек (support points). То есть существует подмножество из 2 или 3 точек, расстояние от которых до P∗P^*P∗ равно r∗r^*r∗, и весь набор содержится в этот круг. - Для конечного множества точек в плоскости минимальный охватывающий круг единственен (его центр единственен). (Интуитивно: если два разных круга имели бы одинаковый наименьший радиус, их пересечение даёт круг меньшего радиуса или противоречие с поддержкой ≤3.) 2) Геометрическая характеристика (критерии) - Если оптимальный круг опирается на две точки a,ba,ba,b (т.е. лишь две точки на границе), то они образуют диаметр: центр P∗=(a+b)/2P^*=(a+b)/2P∗=(a+b)/2, радиус r∗=∥a−b∥/2r^*=\|a-b\|/2r∗=∥a−b∥/2. - Если опирается на три точки a,b,ca,b,ca,b,c (они не коллинеарны), то P∗P^*P∗ — окружность, проходящая через эти три точки (ее описывающий центр — пересечение перпендикулярных биссектрис). Радиус — окружность через эти три точки (circumradius). Точки, определяющие круг, образуют треугольник, центр которого не лежит вне треугольника (в частности для острого треугольника центр — описанный центр; для тупого треугольника оптимум определяется парой крайних точек). - Следствие для трёх точек: для n=3n=3n=3 решение легко описывается: - Если треугольник острый, P∗P^*P∗ — описанный центр (circumcenter). - Если треугольник прямой или тупой, P∗P^*P∗ — середина наибольшей стороны, r∗=r^*=r∗= половина длины наибольшей стороны. - В общем случае поддержка имеет размер ≤3: оптимальный круг либо задаётся диаметральной парой самых отдалённых надуктих, либо тройкой точек, образующих описанную окружность. 3) Частные случаи и методы вычисления - n=3: - Вычислить длины сторон; если самая большая сторона имеет квадрат больше суммы квадратов двух других — треугольник тупой → центр — середина наибольшей стороны, иначе центр — пересечение перпендикулярных биссектрис (описанный центр). Практически: решить систему линейных уравнений для пересечения биссектрис. - Формула (алгоритмически): решить для P=(x,y)P=(x,y)P=(x,y)∥P−a∥=∥P−b∥=∥P−c∥
\|P-a\|=\|P-b\|=\|P-c\| ∥P−a∥=∥P−b∥=∥P−c∥
или пересечение двух уравнений ∥P−a∥2=∥P−b∥2\|P-a\|^2=\|P-b\|^2∥P−a∥2=∥P−b∥2 и ∥P−a∥2=∥P−c∥2\|P-a\|^2=\|P-c\|^2∥P−a∥2=∥P−c∥2. - n=4: - Сначала уменьшите задачу до выпуклой оболочки точек (только граничные точки могут быть опорными). Пусть на оболочке mmm точек (m≤4m\le4m≤4). - Можно перебрать все варианты опорных множеств: все пары (i,j)(i,j)(i,j) (центры — середины) и все тройки (i,j,k)(i,j,k)(i,j,k) (вписать описанный центр), для каждого варианта вычислить центр и радиус и проверить покрытие всех точек; выбор с минимальным радиусом — ответ. Сложность перебора O(m3)O(m^3)O(m3) с проверкой расстояний O(n)O(n)O(n) (в простейшей реализации). - Практически: часто либо пара диаметральных точек, либо тройка на окружности; алгоритм перебора тривиален для n=4. - Общее n: - Уменьшение до выпуклой оболочки: опорные точки лежат на оболочке, так что сначала вычислите оболочку за O(nlogn)O(n\log n)O(nlogn). - Наиболее эффективные алгоритмы: - Welzl's randomized incremental algorithm — ожидаемое время O(n)O(n)O(n), простой и широко используемый. - Алгоритмы на базе LP‑type problems дают ожидаемое линейное время; существуют и детерминированные алгоритмы с линейной или O(nlogn)O(n\log n)O(nlogn) сложностью, но более сложные в реализации. - Прямое решение как выпуклая оптимизация: минимизировать rrr при ограничениях ∥P−xi∥≤r\|P-x_i\|\le r∥P−xi∥≤r. Это SOCP (второго порядка конусная задача) или выпуклая задача, решаемая стандартными солверами за полиномиальное время. - Простая детерминированная реализация: построить выпуклую оболочку, перебрать все пары и тройки точек оболочки (количество их обычно малое), вычислить соответствующие центры и выбрать минимальный приемлемый радиус; сложность в худшем случае O(m3+m⋅n)O(m^3+m\cdot n)O(m3+m⋅n) но на практике быстро. 4) Практические замечания и формулы - Центр для пары a,ba,ba,b: P=(a+b)/2, r=∥a−b∥/2P=(a+b)/2,\; r=\|a-b\|/2P=(a+b)/2,r=∥a−b∥/2. - Центр для тройки вычисляют как пересечение перпендикулярных биссектрис или решением линейной системы для PPP из уравнений ∥P−a∥2=∥P−b∥2\|P-a\|^2=\|P-b\|^2∥P−a∥2=∥P−b∥2, ∥P−a∥2=∥P−c∥2\|P-a\|^2=\|P-c\|^2∥P−a∥2=∥P−c∥2. - Рекомендуемые подходы: для практики — реализовать Welzl (коротко и эффективно) или использовать библиотечный алгоритм (CGAL, scipy.spatial для ближайших задач и т.п.). Для формальной гарантии — SOCP‑решение через конвексные солверы. Краткая сводка: - Существование: да. Уникальность центра: да (для конечного множества). Поддержка ≤3. - n=3: либо описанный центр (если острый), либо середина наибольшей стороны. - n=4: редуцируйте к выпуклой оболочке, перебор пар и троек; практически то же, что и в общем случае. - Общее n: Welzl — ожидаемое O(n)O(n)O(n); альтернативно SOCP/L P‑type алгоритмы или перебор на выпуклой оболочке для практической реализации.
minP∈R2f(P),f(P)=max1≤i≤n∥P−xi∥. \min_{P\in\mathbb R^2} f(P),\qquad f(P)=\max_{1\le i\le n}\|P-x_i\|.
P∈R2min f(P),f(P)=1≤i≤nmax ∥P−xi ∥. Это классическая задача «минимального охватывающего круга» (1‑center, smallest enclosing circle). Ниже — существование, единственность, геометрическая характеристика и методы для частных случаев.
1) Существование и общие свойства
- Функция f(P)f(P)f(P) непрерывна и выпукла; из того, что для ∥P∥→∞\|P\|\to\infty∥P∥→∞ значение f(P)→∞f(P)\to\inftyf(P)→∞, следует, что минимум достигается на некотором компактном множестве (например, внутри выпуклой оболочки точек плюс радиус). Следовательно, решение существует.
- Минимальный охватывающий круг определяется радиусом r∗=f(P∗)r^*=f(P^*)r∗=f(P∗) и центром P∗P^*P∗. В оптимуме на границе круга находятся не более трех опорных точек (support points). То есть существует подмножество из 2 или 3 точек, расстояние от которых до P∗P^*P∗ равно r∗r^*r∗, и весь набор содержится в этот круг.
- Для конечного множества точек в плоскости минимальный охватывающий круг единственен (его центр единственен). (Интуитивно: если два разных круга имели бы одинаковый наименьший радиус, их пересечение даёт круг меньшего радиуса или противоречие с поддержкой ≤3.)
2) Геометрическая характеристика (критерии)
- Если оптимальный круг опирается на две точки a,ba,ba,b (т.е. лишь две точки на границе), то они образуют диаметр: центр P∗=(a+b)/2P^*=(a+b)/2P∗=(a+b)/2, радиус r∗=∥a−b∥/2r^*=\|a-b\|/2r∗=∥a−b∥/2.
- Если опирается на три точки a,b,ca,b,ca,b,c (они не коллинеарны), то P∗P^*P∗ — окружность, проходящая через эти три точки (ее описывающий центр — пересечение перпендикулярных биссектрис). Радиус — окружность через эти три точки (circumradius). Точки, определяющие круг, образуют треугольник, центр которого не лежит вне треугольника (в частности для острого треугольника центр — описанный центр; для тупого треугольника оптимум определяется парой крайних точек).
- Следствие для трёх точек: для n=3n=3n=3 решение легко описывается:
- Если треугольник острый, P∗P^*P∗ — описанный центр (circumcenter).
- Если треугольник прямой или тупой, P∗P^*P∗ — середина наибольшей стороны, r∗=r^*=r∗= половина длины наибольшей стороны.
- В общем случае поддержка имеет размер ≤3: оптимальный круг либо задаётся диаметральной парой самых отдалённых надуктих, либо тройкой точек, образующих описанную окружность.
3) Частные случаи и методы вычисления
- n=3:
- Вычислить длины сторон; если самая большая сторона имеет квадрат больше суммы квадратов двух других — треугольник тупой → центр — середина наибольшей стороны, иначе центр — пересечение перпендикулярных биссектрис (описанный центр). Практически: решить систему линейных уравнений для пересечения биссектрис.
- Формула (алгоритмически): решить для P=(x,y)P=(x,y)P=(x,y) ∥P−a∥=∥P−b∥=∥P−c∥ \|P-a\|=\|P-b\|=\|P-c\|
∥P−a∥=∥P−b∥=∥P−c∥ или пересечение двух уравнений ∥P−a∥2=∥P−b∥2\|P-a\|^2=\|P-b\|^2∥P−a∥2=∥P−b∥2 и ∥P−a∥2=∥P−c∥2\|P-a\|^2=\|P-c\|^2∥P−a∥2=∥P−c∥2.
- n=4:
- Сначала уменьшите задачу до выпуклой оболочки точек (только граничные точки могут быть опорными). Пусть на оболочке mmm точек (m≤4m\le4m≤4).
- Можно перебрать все варианты опорных множеств: все пары (i,j)(i,j)(i,j) (центры — середины) и все тройки (i,j,k)(i,j,k)(i,j,k) (вписать описанный центр), для каждого варианта вычислить центр и радиус и проверить покрытие всех точек; выбор с минимальным радиусом — ответ. Сложность перебора O(m3)O(m^3)O(m3) с проверкой расстояний O(n)O(n)O(n) (в простейшей реализации).
- Практически: часто либо пара диаметральных точек, либо тройка на окружности; алгоритм перебора тривиален для n=4.
- Общее n:
- Уменьшение до выпуклой оболочки: опорные точки лежат на оболочке, так что сначала вычислите оболочку за O(nlogn)O(n\log n)O(nlogn).
- Наиболее эффективные алгоритмы:
- Welzl's randomized incremental algorithm — ожидаемое время O(n)O(n)O(n), простой и широко используемый.
- Алгоритмы на базе LP‑type problems дают ожидаемое линейное время; существуют и детерминированные алгоритмы с линейной или O(nlogn)O(n\log n)O(nlogn) сложностью, но более сложные в реализации.
- Прямое решение как выпуклая оптимизация: минимизировать rrr при ограничениях ∥P−xi∥≤r\|P-x_i\|\le r∥P−xi ∥≤r. Это SOCP (второго порядка конусная задача) или выпуклая задача, решаемая стандартными солверами за полиномиальное время.
- Простая детерминированная реализация: построить выпуклую оболочку, перебрать все пары и тройки точек оболочки (количество их обычно малое), вычислить соответствующие центры и выбрать минимальный приемлемый радиус; сложность в худшем случае O(m3+m⋅n)O(m^3+m\cdot n)O(m3+m⋅n) но на практике быстро.
4) Практические замечания и формулы
- Центр для пары a,ba,ba,b: P=(a+b)/2, r=∥a−b∥/2P=(a+b)/2,\; r=\|a-b\|/2P=(a+b)/2,r=∥a−b∥/2.
- Центр для тройки вычисляют как пересечение перпендикулярных биссектрис или решением линейной системы для PPP из уравнений ∥P−a∥2=∥P−b∥2\|P-a\|^2=\|P-b\|^2∥P−a∥2=∥P−b∥2, ∥P−a∥2=∥P−c∥2\|P-a\|^2=\|P-c\|^2∥P−a∥2=∥P−c∥2.
- Рекомендуемые подходы: для практики — реализовать Welzl (коротко и эффективно) или использовать библиотечный алгоритм (CGAL, scipy.spatial для ближайших задач и т.п.). Для формальной гарантии — SOCP‑решение через конвексные солверы.
Краткая сводка:
- Существование: да. Уникальность центра: да (для конечного множества). Поддержка ≤3.
- n=3: либо описанный центр (если острый), либо середина наибольшей стороны.
- n=4: редуцируйте к выпуклой оболочке, перебор пар и троек; практически то же, что и в общем случае.
- Общее n: Welzl — ожидаемое O(n)O(n)O(n); альтернативно SOCP/L P‑type алгоритмы или перебор на выпуклой оболочке для практической реализации.