Введение

В комбинаторной математике проблема дерева Штайнера, или проблема минимального дерева Штайнера, названная в честь Якоба Штайнера, является общим термином для класса задач в комбинаторной оптимизации. Хотя задачи дерева Штайнера могут быть сформулированы в различных условиях, все они требуют оптимального соединения для заданного набора объектов и предопределенной целевой функции. Одним из известных вариантов, который часто используется как синоним термина «проблема дерева Штайнера», является проблема дерева Штайнера в графах. Для неориентированного графа с неотрицательными весами ребер и подмножества вершин, обычно называемых терминалами, задача дерева Штайнера в графах требует дерева минимального веса, которое содержит все терминалы (но может включать дополнительные вершины) и минимизирует общий вес его ребер. Другие известные варианты – проблема евклидова дерева Штайнера и проблема прямоугольного минимального дерева Штайнера. Проблему дерева Штайнера в графах можно рассматривать как обобщение двух других известных задач комбинаторной оптимизации: задачи (неотрицательного) кратчайшего пути и задачи минимального остовного дерева. Если задача дерева Штайнера в графах содержит ровно два терминала, она сводится к поиску кратчайшего пути. Если же, напротив, все вершины являются терминалами, то задача дерева Штайнера в графах эквивалентна задаче минимального остовного дерева. Однако, хотя и задача неотрицательного кратчайшего пути, и задача минимального остовного дерева могут быть решены за полиномиальное время, для задачи дерева Штайнера такого решения не известно. Ее вариант принятия решения, спрашивающий, существует ли для данного входного графа дерево веса меньше заданного порога, является NP-полной, что подразумевает, что вариант оптимизации, требующий найти дерево минимального веса в заданном графе, является NP-трудной. Фактически, вариант принятия решения входил в число первоначальных 21 NP-полных задач Карпа. Проблема дерева Штайнера в графах находит применение в разработке схем и проектировании сетей. Однако практические приложения обычно требуют модификаций, что приводит к множеству вариантов задачи дерева Штайнера. Большинство версий задачи дерева Штайнера являются NP-трудными, но некоторые частные случаи могут быть решены за полиномиальное время. Несмотря на пессимистичную сложность в худшем случае, несколько вариантов задачи дерева Штайнера, включая проблему дерева Штайнера в графах и проблему прямоугольного дерева Штайнера, могут быть эффективно решены на практике, даже для крупномасштабных реальных задач.

Евклидово дерево Штайнера

Первоначальная задача была сформулирована в виде, известном как задача Евклидова дерева Штейнера или геометрическая задача о дереве Штейнера: для заданных N точек на плоскости требуется соединить их линиями минимальной общей длины таким образом, чтобы любые две точки могли быть соединены отрезками прямых либо напрямую, либо через другие точки и отрезки. Хотя задача названа в честь Штейнера, она была впервые поставлена в 1811 году Жозефом Дием Гергонном в следующей формулировке: «Несколько городов расположены в известных местах на плоскости; задача состоит в том, чтобы соединить их системой каналов минимальной общей длины». Можно показать, что соединяющие отрезки не пересекаются, за исключением конечных точек, и образуют дерево, отсюда и название задачи. Задача для N = 3 долгое время исследовалась и быстро распространилась на задачу поиска звездной сети с единственным узлом, соединяющим все N заданных точек, минимальной общей длины. Однако, хотя полная задача о дереве Штейнера была сформулирована в письме Гаусса, ее первое серьезное исследование было проведено в статье 1934 года, написанной на чешском языке Войтехом Ярником и соавторами. Эта статья долгое время оставалась незамеченной, но уже содержала «практически все общие свойства деревьев Штейнера», которые впоследствии приписывались другим исследователям, включая обобщение задачи с плоскости на более высокие размерности. Для Евклидовой задачи о дереве Штейнера точки, добавляемые к графу (точки Штейнера), должны иметь степень три, а три ребра, инцидентные такой точке, должны образовывать три угла в 120 градусов (см. точку Ферма). Следовательно, максимальное количество точек Штейнера, которое может иметь дерево Штейнера, равно N − 2, где N — начальное число заданных точек. (Все эти свойства были установлены еще Гергонном.) Для N = 3 существует два возможных случая: если треугольник, образованный заданными точками, имеет все углы, меньшие 120 градусов, решение дается точкой Штейнера, расположенной в точке Ферма; в противном случае решение дается двумя сторонами треугольника, которые сходятся в угле, равном 120 градусам или более. Для общего N задача Евклидова дерева Штейнера является NP-трудной, и поэтому неизвестно, можно ли найти оптимальное решение с помощью алгоритма полиномиального времени. Однако существует схема полиномиального приближения по времени (PTAS) для Евклидовых деревьев Штейнера, то есть решение, близкое к оптимальному, может быть найдено за полиномиальное время. Неизвестно, является ли задача Евклидова дерева Штейнера NP-полной, поскольку ее принадлежность к классу сложности NP не установлена.

Прямолинейное дерево Штайнера

Проблема прямолинейного дерева Штайнера — это вариант геометрической задачи о дереве Штайнера на плоскости, в которой евклидово расстояние заменяется на манхэттенское (прямолинейное) расстояние. Эта задача возникает при физическом проектировании в автоматизированном проектировании электронных схем. В интегральных схемах (СБИС) трассировка соединений выполняется проводниками, которые часто, согласно правилам проектирования, могут прокладываться только в вертикальном и горизонтальном направлениях, поэтому задача о прямолинейном дереве Штайнера может быть использована для моделирования трассировки сетей с более чем двумя выводами.

Дерево Штайнера в графиках и вариантах

Деревья Штайнера были широко изучены в контексте взвешенных графов. Прототипом, пожалуй, является задача о дереве Штайнера в графах. Пусть G = (V, E) – неориентированный граф с неотрицательными весами ребер c, и пусть S ⊆ V – подмножество вершин, называемое терминалами. Дерево Штайнера – это дерево в G, которое охватывает S. Существует две версии задачи: в задаче оптимизации, связанной с деревьями Штайнера, требуется найти дерево Штайнера минимального веса; в задаче принятия решений веса ребер являются целыми числами, и требуется определить, существует ли дерево Штайнера, общий вес которого не превышает заданного натурального числа k. Задача принятия решений является одной из 21 NP-полных задач Карпа; следовательно, задача оптимизации является NP-трудной. Задачи о деревьях Штайнера в графах применяются к различным задачам в исследованиях и промышленности, включая маршрутизацию многоадресной рассылки и биоинформатику. Особым случаем является ситуация, когда G – полный граф, каждая вершина v ∈ V соответствует точке в метрическом пространстве, а веса ребер w(e) для каждого e ∈ E соответствуют расстояниям в этом пространстве. Иными словами, веса ребер удовлетворяют неравенству треугольника. Этот вариант известен как метрическая задача о дереве Штайнера. Для данного экземпляра (неметрической) задачи о дереве Штайнера можно в полиномиальное время преобразовать его в эквивалентный экземпляр метрической задачи о дереве Штайнера; преобразование сохраняет фактор приближения. В то время как евклидова версия допускает PTAS, известно, что метрическая задача о дереве Штайнера является APX-полной, то есть, если P = NP, невозможно достичь коэффициентов приближения, которые были бы произвольно близки к 1 за полиномиальное время. Существует алгоритм, работающий за полиномиальное время, который приближает минимальное дерево Штайнера с точностью до коэффициента ; однако, приближение с точностью до коэффициента является NP-трудным. Для частного случая задачи о дереве Штайнера с расстояниями 1 и 2 известен алгоритм приближения с точностью 1,25. Карпинский и Александр Зеликовский построили PTAS для плотных экземпляров задач о дереве Штайнера. В особом случае графовой задачи, а именно задачи о дереве Штайнера для квазидвудольных графов, требуется, чтобы S включал по крайней мере одну конечную точку каждого ребра в G.

Задача о дереве Штайнера также исследовалась в более высоких размерностях и на различных поверхностях. Алгоритмы для поиска дерева Штайнера минимального веса были найдены для сферы, тора, проективной плоскости, широких и узких конусов и других поверхностей. Другими обобщениями задачи о дереве Штайнера являются задача о k-реберно связанной сети Штайнера и задача о k-вершинно связанной сети Штайнера, где целью является найти k-реберно связанный граф или k-вершинно связанный граф, а не просто связанный граф. Еще одним хорошо изученным обобщением является задача проектирования отказоустойчивой сети (SNDP), где требуется соединить каждую пару вершин заданным числом (возможно, 0) реберно или вершинно непересекающихся путей. Задача Штайнера также была сформулирована в общем контексте метрических пространств и для, возможно, бесконечного числа точек.

Приближаясь к дереву Штайнера

Общая задача о дереве Штейнера для графа может быть аппроксимирована вычислением минимального остовного дерева подграфа, являющегося метрическим замыканием графа, индуцированного терминальными вершинами, впервые опубликованного в 1981 году Ку и др. Метрическое замыкание графа G – это полный граф, в котором вес каждого ребра равен кратчайшему расстоянию между узлами в G. Этот алгоритм создает дерево, вес которого не превышает вес оптимального дерева Штейнера в 2 − 2/t раз, где t – количество листьев в оптимальном дереве Штейнера; это можно доказать, рассмотрев турнейра коммивояжера по оптимальному дереву Штейнера. Это приближенное решение вычислимо за время O(|S| |V|²) путем первоначального решения задачи о кратчайших путях между всеми парами вершин для вычисления метрического замыкания, а затем решения задачи о минимальном остовном дереве. Другой популярный алгоритм для аппроксимации дерева Штейнера в графах был опубликован Такахаси и Мацуямой в 1980 году. Их решение инкрементно строит дерево Штейнера, начиная с произвольной вершины и многократно добавляя кратчайший путь от дерева к ближайшей вершине в S, которая еще не была добавлена. Этот алгоритм также имеет сложность O(|S| |V|²) и создает дерево, вес которого не превышает оптимальный вес в 2 − 2/|S| раз. В 1986 году У и др. значительно улучшили время работы, избежав предварительного вычисления кратчайших путей между всеми парами вершин. Вместо этого они используют подход, аналогичный алгоритму Крускала для вычисления минимального остовного дерева, начиная с леса из |S| несвязных деревьев и "выращивая" их одновременно, используя поиск в ширину, напоминающий алгоритм Дейкстры, но начинающийся с нескольких начальных вершин. Когда поиск находит вершину, не принадлежащую текущему дереву, два дерева объединяются в одно. Этот процесс повторяется до тех пор, пока не останется только одно дерево. Используя кучу (структуру данных) для реализации очереди с приоритетами и структуру данных непересекающихся множеств для отслеживания того, к какому дереву принадлежит каждая посещенная вершина, этот алгоритм достигает сложности O(|E| log |V|), хотя он не улучшает коэффициент 2 − 2/t, полученный Ку и др. В серии работ были представлены алгоритмы аппроксимации для задачи о минимальном дереве Штейнера с коэффициентами аппроксимации, которые улучшили соотношение 2 − 2/t. Эта последовательность завершилась алгоритмом Робинса и Зеликовского в 2000 году, который улучшил это соотношение до 1,55, итеративно улучшая минимальное остовное дерево терминальных вершин. Однако в последнее время Byrka и др. доказали аппроксимацию с использованием релаксации линейного программирования и метода, называемого итеративным рандомизированным округлением.

Параметризированная сложность дерева Штайнера

Известно, что общая задача о дереве Штейнера для графа допускает параметризованное решение с числом терминалов в качестве параметра, благодаря алгоритму Дрейфуса — Вагнера. Время работы алгоритма Дрейфуса — Вагнера составляет , где — число вершин графа, а — множество терминалов. Существуют более быстрые алгоритмы, работающие за время для любого или, в случае малых весов, за время, где — максимальный вес ребра. Недостатком вышеупомянутых алгоритмов является использование экспоненциального объёма памяти; существуют алгоритмы, требующие полиномиального объёма памяти и работающие за время и время. Известно, что для общей задачи о дереве Штейнера не существует параметризованного алгоритма, работающего за время для любого , где — число рёбер оптимального дерева Штейнера, если только задача о покрытии множества не имеет алгоритма, работающего за время для некоторого , где и — число элементов и число множеств соответственно в экземпляре задачи о покрытии множества. Более того, известно, что задача не имеет полиномиального ядра, если , даже при параметризации по числу рёбер оптимального дерева Штейнера и при условии, что все веса рёбер равны 1.

Параметризированная приближенность дерева Штайнера

В то время как задача о дереве Штейнера не имеет полиномиального ядра, если параметризация не задана числом терминалов, она допускает схему приближенного ядра полиномиального размера (PSAKS): для любого ε можно вычислить ядро полиномиального размера, которое ухудшает качество решения не более чем в ε раз. При параметризации задачи о дереве Штейнера числом нетерминалов (вершин Штейнера) в оптимальном решении, задача является W[1]-трудной (в отличие от параметризации по числу терминалов, как упоминалось выше). В то же время задача является APX-полной и, следовательно, не допускает PTAS, если P = NP. Однако существует параметризованная схема аппроксимации, которая для любого ε вычисляет ε-аппроксимацию за время f(k) * n^O(1). Для этой параметризации также существует PSAKS. Гипотеза остается открытой. Наилучшая общепринятая верхняя граница для задачи составляет 1.2134.

Для задачи о прямоугольном дереве Штейнера отношение Штейнера равно точно 1 + √2, соотношение, достигаемое четырьмя точками в квадрате с остовным деревом, использующим три стороны квадрата, и деревом Штейнера, соединяющим точки через центр квадрата. Более точно, для расстояния d квадрат должен быть наклонен под углом 45° к координатным осям, а для расстояния d квадрат должен быть выровнен по осям.