EssayAI
Блог
Блог
Математика и алгоритмы

Задача о k-центрах в графе: постановка и алгоритмы

10 апреля 2026Время чтения: 8 минут
#графы#дискретная математика#k-центры#приближённые алгоритмы#размещение объектов
Задача о k-центрах в графе: постановка и алгоритмы

Задача о k-центрах в графе - это классическая задача размещения: нужно выбрать kk вершин-«центров» так, чтобы любая вершина графа оказалась как можно ближе к ближайшему из них. Она возникает в логистике (где поставить kk складов), в проектировании сетей (где разместить серверы или ретрансляторы) и в кластеризации данных. Формально это минимаксная оптимизационная задача, и в общем случае она NP-трудна, поэтому на практике решают её приближённо. Разберём строгую постановку, почему точное решение тяжело и как работает классический жадный алгоритм с гарантией качества.

Постановка задачи

Дан связный граф G=(V,E)G = (V, E) с заданными расстояниями d(u,v)d(u, v) между вершинами (длинами кратчайших путей) и число kk. Требуется выбрать множество центров CVC \subseteq V размера C=k|C| = k так, чтобы минимизировать наибольшее расстояние от любой вершины до ближайшего центра.

Введём функцию покрытия - расстояние от вершины vv до множества центров CC:

d(v,C)=mincCd(v,c).d(v, C) = \min_{c \in C} d(v, c).

Тогда стоимость размещения CC - это радиус покрытия:

cost(C)=maxvVd(v,C),\operatorname{cost}(C) = \max_{v \in V} d(v, C),

а сама задача о k-центрах формулируется как

minCVC=k  maxvV  mincCd(v,c).\min_{\substack{C \subseteq V \\ |C| = k}} \; \max_{v \in V} \; \min_{c \in C} d(v, c).

Оптимальное значение r=cost(C)r^* = \operatorname{cost}(C^*) называют оптимальным радиусом: при размещении kk центров никакая вершина не окажется дальше rr^* от ближайшего из них. Структура «мин-макс-мин» и делает задачу нетривиальной.

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

Минимаксный критерий и его смысл

Ключевая особенность задачи о k-центрах - именно минимаксный (а не суммарный) критерий. Мы минимизируем худший случай: расстояние до самой неудачно расположенной вершины. Это отличает её от задачи о k-медианах, где минимизируют сумму vd(v,C)\sum_{v} d(v, C), и от задачи о покрытии множества.

Минимаксный критерий уместен там, где важна гарантия для каждого потребителя, а не средняя по всем. Если центры - это пожарные части или станции скорой помощи, то «средняя» близость бесполезна: критично, чтобы даже самая удалённая точка обслуживалась за приемлемое время. Поэтому задача о k-центрах - это модель «справедливого» размещения с гарантией наихудшего случая.

Связь с радиусом и эксцентриситетом

При k=1k = 1 задача вырождается в поиск одной вершины с минимальным эксцентриситетом. Напомним, эксцентриситет вершины - это ε(v)=maxud(v,u)\varepsilon(v) = \max_{u} d(v, u), и наименьший эксцентриситет по графу есть радиус:

r(G)=minvVε(v).r(G) = \min_{v \in V} \varepsilon(v).

При k=1k = 1 оптимальный радиус покрытия rr^* совпадает с радиусом графа r(G)r(G), а единственный центр - это центральная вершина графа. Подробнее о том, как считать эти величины, - в разборе про радиус и диаметр графа и отдельно про эксцентриситет вершины. Задача о k-центрах обобщает эту идею: вместо одной «удобной» точки мы ищем kk точек, совместно покрывающих граф с минимальным радиусом.

С ростом kk оптимальный радиус rr^* монотонно не возрастает: добавление центра не может ухудшить покрытие. В предельном случае k=Vk = |V| можно поставить центр в каждую вершину и получить r=0r^* = 0.

Почему задача NP-трудна

Точное решение задачи о k-центрах в общем случае невозможно за полиномиальное время (если PNPP \ne NP). Доказательство - сведение от задачи о доминирующем множестве. Доминирующее множество размера kk существует тогда и только тогда, когда kk центров покрывают граф с радиусом r1r^* \le 1. Поскольку проверка существования доминирующего множества заданного размера NP-полна, NP-трудной оказывается и задача о k-центрах.

Более того, доказано, что задачу нельзя приблизить с коэффициентом лучше 22: не существует полиномиального алгоритма, гарантирующего решение с радиусом строго меньше 2r2r^* (опять же при PNPP \ne NP). Это делает значение 22 особенным - и хорошая новость в том, что эта граница достижима.

NP-трудность означает, что полный перебор всех $\binom{n}{k}$ подмножеств работает только для маленьких графов. Уже при $n = 40$, $k = 8$ число вариантов превышает 75 миллионов - для учебной задачи перебор годится, для реальных сетей нет.

Жадный алгоритм Гонзалеса (2-приближение)

Существует простой жадный алгоритм (farthest-first traversal, алгоритм Гонзалеса), который гарантирует радиус не более 2r2r^* - то есть достигает теоретического предела приближения.

Идея - «расставлять центры как можно дальше друг от друга»:

  1. Выбираем произвольную вершину первым центром: C={c1}C = \{c_1\}.
  2. Пока C<k|C| < k: находим вершину vv, наиболее удалённую от текущего множества центров (максимизирующую d(v,C)d(v, C)), и добавляем её в CC.
  3. После выбора kk центров итоговый радиус покрытия равен maxvd(v,C)\max_v d(v, C).

Интуиция гарантии: алгоритм всегда «затыкает» самую дальнюю дыру в покрытии. Когда мы добавили kk центров, оставшийся максимум d(v,C)d(v, C) не превышает расстояния между двумя ближайшими из выбранных «далёких» точек, а оно, в свою очередь, ограничено 2r2r^* через неравенство треугольника.

Доказательство оценки 2r*

Покажем, почему алгоритм Гонзалеса не превосходит 2r2r^*. Пусть после работы алгоритма нашлась вершина xx с d(x,C)=Rd(x, C) = R - это и есть полученный радиус. По жадному правилу любые два выбранных центра отстоят друг от друга не менее чем на RR, и сама xx отстоит от всех центров не менее чем на RR. Значит, у нас есть k+1k + 1 точка (k центров плюс xx), попарно удалённых не менее чем на RR.

В оптимальном решении эти k+1k + 1 точку покрывают всего kk центров, поэтому по принципу Дирихле какие-то две из них a,ba, b попадают в зону одного оптимального центра cc^*. Тогда d(a,c)rd(a, c^*) \le r^* и d(b,c)rd(b, c^*) \le r^*, откуда по неравенству треугольника

Rd(a,b)d(a,c)+d(c,b)2r.R \le d(a, b) \le d(a, c^*) + d(c^*, b) \le 2r^*.

Следовательно, радиус, выданный алгоритмом, не превосходит 2r2r^*. Эта оценка точная и совпадает с нижней границей неприближаемости.

Параметрический подход и бинарный поиск

Альтернатива жадному методу - свести оптимизацию к серии задач разрешимости. Зафиксируем порог RR и спросим: можно ли покрыть граф kk центрами с радиусом R\le R? Это «задача о порогах»: строим пороговый граф GRG_R, оставляя ребро между вершинами, если d(u,v)Rd(u, v) \le R, и проверяем, хватит ли kk доминирующих центров.

Перебирая кандидатов RR (а их не больше (n2)\binom{n}{2} различных значений расстояний) бинарным поиском, можно найти минимальный допустимый порог. На этой идее основан точный алгоритм Ху и приближённый алгоритм с тем же коэффициентом 22. Для учебных целей бинарный поиск по значениям расстояний - наглядный способ понять, что оптимальный радиус всегда равен одному из попарных расстояний в графе.

Частые ошибки

  • Минимизируют сумму расстояний вместо максимума. Сумма vd(v,C)\sum_v d(v, C) - это уже задача о k-медианах, у неё другие оптимумы и другие алгоритмы.
  • Считают, что жадный алгоритм даёт точный оптимум. Он гарантирует лишь 2r\le 2r^*; реальный оптимум часто меньше.
  • Забывают, что центры обязаны быть вершинами графа. В «вершинной» постановке CVC \subseteq V; если центр можно ставить в любой точке ребра, это уже непрерывная (абсолютная) задача о центрах.
  • Путают kk-центры с kk-кликами или kk-раскраской - это разные задачи, совпадает лишь буква kk.
  • Применяют задачу к несвязному графу без оговорок. Если граф несвязен, вершины из разных компонент недостижимы, d(v,C)=d(v, C) = \infty, и нужно отдельно оговаривать покрытие по компонентам.

FAQ

Чем k-центры отличаются от k-медиан? Критерием. В k-центрах минимизируют максимум расстояния (худший случай), в k-медианах - сумму расстояний (средний случай). Оптимальные размещения и алгоритмы у них разные, хотя постановки внешне похожи.

Можно ли решить задачу точно? Для небольших графов - да, полным перебором всех (nk)\binom{n}{k} подмножеств вершин или бинарным поиском по порогу RR. Для больших - нет: задача NP-трудна, и в общем случае ограничиваются 2-приближённым алгоритмом.

Почему именно коэффициент 2 считается оптимальным? Доказано, что приблизить задачу лучше чем в 22 раза за полиномиальное время невозможно (при PNPP \ne NP), а жадный алгоритм Гонзалеса этот коэффициент 22 достигает. Поэтому 22 - одновременно нижняя и верхняя граница приближаемости.

Коротко

Задача о k-центрах в графе - это выбор kk вершин-центров, минимизирующий максимальное расстояние от любой вершины до ближайшего центра: minC=kmaxvmincd(v,c)\min_{|C|=k} \max_v \min_{c} d(v, c). При k=1k = 1 ответом служит центр графа с радиусом r(G)r(G). Задача NP-трудна (сведение к доминирующему множеству) и неприближаема лучше чем в 22 раза. Зато жадный алгоритм Гонзалеса, расставляющий центры «как можно дальше друг от друга», гарантирует радиус не более 2r2r^* - и это оптимальная достижимая граница.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также