Анисимов/Песочница — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
(Новая страница: «Сначала докажем, что построенное таким образом множество вершин является вершинным пок…»)
 
(Решение ex-bounded-knapsack-is-polynomial)
 
Строка 1: Строка 1:
Сначала докажем, что построенное таким образом множество вершин является вершинным покрытием.
+
<latex>
 +
Полиномиальный алгоритм существует.
  
Полное покрывающее дерево является вершинным покрытием, т.к. содержит все вершины. Допустим, что удалив листья из него покрытие станет не полным. Это возможно, если существовало ребро между какими-либо двумя листьями. Но это невозможно при построении покрывающего дерева поиском в глубину, т.к. для неориентированного графа он не даёт перекрёстных рёбер. Таким образом после удаления листьев полученное множестве является покрытием.
+
Применим динамическое программирование. Подзадачей будет являться задача "можем ли мы собрать $B$ используя только первые $k\leq n$ чисел?".
+
 
Теперь докажем, что полученное покрытие больше оптимального не более чем в два раза.
+
Для ответа на этот вопрос будем последовательно составлять множества $S_k$ возможных сумм $\sum_{i=1}^{k}a_{i}x_{i}$ для всех наборов $(x_1,...,x_k)$ из первых $k$ чисел.  
 +
 
 +
Изначально множество \[S_0=\{0\}\]
 +
т.к. ничего не взяв, ноль всё равно получим. Следующие строятся по принципу \[S_{i+1} = S_i \cup \{y:\mathbb{Z}|(y-a_{i+1}) \in S_i\}\]
 +
т.е. либо не брать $a_{i+1}$ и возможные суммы те же, либо взять и добавятся новые варианты.
 +
 
 +
Ответ на исходную задачу определяется предикатом \[B\in S_n\]
 +
 
 +
Алгоритм полиномиальный. Слагаемые и их количество ограниченны, следовательно и возможные суммы ограниченны. Для множеств $S_k$ \[\forall k:\{1..n\} \forall z:S_k \bullet -n^2*n \leq z \leq n^2*n\]
 +
Размер множеств определяет число операций на каждом построении. Всего строится $n$ множеств, и итоговая сложность алгоритма $O(n^4)$
 +
</latex>

Текущая версия на 20:26, 19 декабря 2013