4551
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) |
||
Строка 13: | Строка 13: | ||
== Основные результаты == | == Основные результаты == | ||
Алгоритм решения задачи UFVS за время O( | Алгоритм решения задачи UFVS за время <math>O(c^k \cdot mn) \;</math> основан на так называемой технике «итеративного сжатия», введенной Ридом и др. [14]. Основная идея этой техники проста, но эффективна: для вывода алгоритма с фиксированным параметром для задачи минимизации достаточно задать «подпрограмму сжатия» с фиксированным параметром, которая для решения размера (k + 1) либо доказывает, что решения размера k не существует, либо строит такое решение. Начиная с тривиального экземпляра и итеративно применяя подпрограмму сжатия линейное количество раз к экземплярам большего размера, получаем алгоритм решения задачи с фиксированным параметром. Главная проблема при применении этой техники к задаче UFVS заключается в том, чтобы показать, что такая подпрограмма сжатия с фиксированным параметром существует. | ||
Подпрограмма сжатия из [6, 10] работает следующим образом: | Подпрограмма сжатия из [6, 10] работает следующим образом: | ||
1 Рассмотрим все возможные разбиения (X, Y), имеющие размер (k + 1), для разрывающего множества вершин F с | 1 Рассмотрим все возможные разбиения (X, Y), имеющие размер (k + 1), для разрывающего множества вершин F с <math>|X| \le k \;</math> в предположении, что множество X полностью содержится в новом разрывающем множестве F' размера k и что <math>Y \cap F' = \empty \;</math>. | ||
2 Для каждого разбиения (X, Y), в случае, если вершины из Y порождают циклы, ответ для этого разбиения будет отрицательным; в противном случае следует удалить вершины из X. После э того необходимо применить следующие правила редукции данных к оставшемуся графу: | 2 Для каждого разбиения (X, Y), в случае, если вершины из Y порождают циклы, ответ для этого разбиения будет отрицательным; в противном случае следует удалить вершины из X. После э того необходимо применить следующие правила редукции данных к оставшемуся графу: | ||
Строка 24: | Строка 24: | ||
• Удалить вершины степени 1. | • Удалить вершины степени 1. | ||
• Если существует вершина степени 2 с двумя соседями | • Если существует вершина степени 2 с двумя соседями <math>v_1 \;</math> и <math>v_2 \;</math>, где <math>v_1 \notin Y \;</math> или <math>v_2 \notin Y \;</math>, то удалить v и соединить <math>v_1 \;</math> и <math>v_2 \;</math>. Если при этом создается второе параллельное ребро между <math>v_1 \;</math> и <math>v_2 \;</math>, удалить вершину <math>v_1 \;</math> плюс <math>v_2 \;</math>, не принадлежащую к Y, и добавить ее к любому разрывающему множеству вершин для сокращенного экземпляра. Наконец, исчерпывающим образом для каждого множества вершин S сокращенного графа, размер которого не превышает k — |X|, проверить, можно ли добавить S к X для образования разрывающего множества вершин входного графа. Если такое множество вершин существует, вывести его вместе с X в качестве нового разрывающего множества вершин размера k. | ||
Корректность подпрограммы сжатия следует из ее прямолинейной природы и из корректности двух правил редукции данных, доказать которую несложно. Сложнее всего доказать, что время выполнения подпрограммы сжатия составляет O( | Корректность подпрограммы сжатия следует из ее прямолинейной природы и из корректности двух правил редукции данных, доказать которую несложно. Сложнее всего доказать, что время выполнения подпрограммы сжатия составляет <math>O(c^k \cdot m) \;</math>: существует <math>2^k + 1 \;</math> разбиений множества F на вышеупомянутые подмножества (X, Y); можно показать, что для каждого разбиения сокращенный граф после выполнения правил редукции данных имеет не более <math>d \cdot k \;</math> вершин для константного значения d; в противном случае для этого разбиения не существует разрывающего множества вершин размера k. Таким образом, время выполнения составляет <math>O(c^k \cdot m) \;</math>. Более детальное доказательство границы размера <math>d \cdot k \;</math> см. в [6, 10]. | ||
Для входного графа G с множеством вершин | Для входного графа G с множеством вершин <math>\{ v_1, ..., v_n \} \;</math> алгоритм с фиксированным параметром из работ [6, 10] решает задачу UFVS путем итеративного рассмотрения подграфов <math>G_i := G[ \{v_1, ..., v_i \} ] \;</math>. Для i = 1 оптимальное разрывающее множество вершин является пустым. Предположим, что в случае i > 1 оптимальное разрывающее множество вершин Xi для Gi неизвестно. Очевидно, что <math>X_i \cup \{ v_{i+1} \} \;</math> является искомым множеством для <math>G_{i+1} \;</math>. Используя подпрограмму сжатия, алгоритм за время <math>O(c^k \cdot m) \;</math> может определить, является ли <math>X_i \cup \{ v_{i+1} \} \;</math> оптимальным разрывающим множеством вершин для <math>G_{i+1} \;</math>, и в случае, если оно таковым не является, вычислить оптимальное разрывающее множество вершин для <math>G_{i+1} \;</math>. Таким образом, в случае i = n мы получаем оптимальное разрывающее множество вершин для графа G за время <math>O(c^k \cdot mn) \;</math>. | ||
Теорема 1. Задачу нахождения разрывающего множества вершин на неориентированном графе можно решить за время O( | '''Теорема 1. Задачу нахождения разрывающего множества вершин на неориентированном графе можно решить за время <math>O(c^k \cdot mn) \;</math> для константного значения c.''' | ||
== Применение == | == Применение == |
правка