<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Artushak</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Artushak"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Artushak"/>
		<updated>2026-04-22T22:48:33Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D0%B0&amp;diff=80731</id>
		<title>NP-полнота задачи о раскраске графа</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D0%B0&amp;diff=80731"/>
				<updated>2021-03-26T05:24:13Z</updated>
		
		<summary type="html">&lt;p&gt;Artushak: категория&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка задачи==&lt;br /&gt;
Даны граф &amp;lt;tex&amp;gt; G = \langle V, E \rangle &amp;lt;/tex&amp;gt; и число &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt;. Необходимо проверить, правда ли, что можно раскрасить вершины графа в &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; цветов так, чтобы любые две вершины, соединённые ребром, имели разные цвета.&lt;br /&gt;
&lt;br /&gt;
== Утверждение ==&lt;br /&gt;
Сформулированная выше задача [[NP-полнота|NP-полна]].&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
=== Доказательство принадлежности задачи классу NP ===&lt;br /&gt;
Сертификатом для решения данной задачи будет последовательность &amp;lt;tex&amp;gt; \{c_i\}_ {i=1}^{n}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; n = |V| &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; c_i &amp;lt;/tex&amp;gt; обозначает цвет &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ой вершины. Проверку корректности такого сертификата легко осуществить за полиномиальное время, например, перебором всех пар вершин и проверкой того, что в случае, когда они соединены ребром, они имеют разные цвета, лежащие на отрезке &amp;lt;tex&amp;gt; [1, k] &amp;lt;/tex&amp;gt;. С другой стороны, очевидно, что если задача имеет решение, то такой сертификат существует.&lt;br /&gt;
=== Доказательство принадлежности задачи классу NPH ===&lt;br /&gt;
[[Файл:3cnfsat.png|thumb|350px|Граф, построенный по формуле &amp;lt;tex refresh dpi=100&amp;gt; (x_1 \lor \lnot x_2 \lor \lnot x_3) \land (\lnot x_1 \lor x_2 \lor \lnot x_3) \land (\lnot x_1 \lor \lnot x_2 \lor x_3)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Сведем задачу [[3CNFSAT]] к данной.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть дана формула &amp;lt;tex&amp;gt; \varphi = (a_1 \lor b_1 \lor c_1) \land (a_2 \lor b_2 \lor c_2) \land ... \land (a_m \lor b_m \lor c_m) &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a_i&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;b_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;c_i&amp;lt;/tex&amp;gt; &amp;amp;mdash; переменные или их отрицания (возможно, с повторениями). Сами переменные будем обозначать &amp;lt;tex&amp;gt; \{x_i\}_{i=1}^n &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Заметим следующие тривиальные факты, которые будут использованы при построении графа:&lt;br /&gt;
# Ровно одно выражение из &amp;lt;tex&amp;gt; \{x_i, \lnot {x_i}\} &amp;lt;/tex&amp;gt; истинно;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \varphi \in 3CNFSAT &amp;lt;/tex&amp;gt; тогда и только тогда, когда существует набор, обращающий каждую скобку в истину.&lt;br /&gt;
Построим множества V и E будущего графа следующим образом:&lt;br /&gt;
* &amp;lt;tex&amp;gt; V = \{c_i\}_{i=0}^n &amp;lt;/tex&amp;gt;;&lt;br /&gt;
* &amp;lt;tex&amp;gt; E = \{\langle c_i, c_j \rangle \}_{i,j=0, i \ne j}^n &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Будем интерпретировать &amp;lt;tex&amp;gt; c_i &amp;lt;/tex&amp;gt; как цвет (соотвественно, вершина &amp;lt;tex&amp;gt; c_i &amp;lt;/tex&amp;gt; всегда покрашена в цвет &amp;lt;tex&amp;gt; c_i &amp;lt;/tex&amp;gt;), причем &amp;lt;tex&amp;gt;c_0&amp;lt;/tex&amp;gt; &amp;amp;mdash; цвет, обозначающий истину, а все остальные цвета означают ложь).&lt;br /&gt;
* Для всех &amp;lt;tex&amp;gt; i \in \{1 .. n\} &amp;lt;/tex&amp;gt; добавим в V вершины &amp;lt;tex&amp;gt; v_i, \tilde{v_i} &amp;lt;/tex&amp;gt;, отвечающие &amp;lt;tex&amp;gt; x_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \lnot {x_i} &amp;lt;/tex&amp;gt; соответственно, и соединим каждую такую пару ребром;&lt;br /&gt;
* Каждую вершину из &amp;lt;tex&amp;gt; \{v_i, \tilde{v_i}\} &amp;lt;/tex&amp;gt; соединим рёбрами со всеми &amp;lt;tex&amp;gt; c_j &amp;lt;/tex&amp;gt;, кроме &amp;lt;tex&amp;gt; c_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; c_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Этим мы обеспечили выполнение первого условия из приведённых выше, так как теперь ровно одна вершина из &amp;lt;tex&amp;gt; \{v_i, \tilde{v_i}\} &amp;lt;/tex&amp;gt; окрашена в цвет &amp;lt;tex&amp;gt; c_0 &amp;lt;/tex&amp;gt;, а другая &amp;amp;mdash; в цвет &amp;lt;tex&amp;gt; c_i &amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Осталось сделать так, чтобы возможность сделать истинной каждую скобку соответствовала необходимости покрасить хотя бы одну из вершин, соответствующих переменным в ней, в цвет &amp;lt;tex&amp;gt; c_0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Для этого для каждой скобки вида &amp;lt;tex&amp;gt; ([\lnot]x_i \lor [\lnot] x_j \lor [\lnot] x_k)_l &amp;lt;/tex&amp;gt; добавим вершину &amp;lt;tex&amp;gt; d_l &amp;lt;/tex&amp;gt;, соединив её с соответствующими &amp;lt;tex&amp;gt; v_i (\tilde{v_i}), v_j(\tilde{v_j}), v_k(\tilde{v_k}) &amp;lt;/tex&amp;gt;, а также со всеми &amp;lt;tex&amp;gt; c_i &amp;lt;/tex&amp;gt;, кроме &amp;lt;tex&amp;gt; c_i, c_j, c_k &amp;lt;/tex&amp;gt;. Тем самым, &amp;lt;tex&amp;gt; d_l &amp;lt;/tex&amp;gt; «не даёт» покрасить все три вершины, отвечающие термам в скобке, в «ложный» цвет (напомним, что все цвета, кроме &amp;lt;tex&amp;gt; c_0 &amp;lt;/tex&amp;gt;, мы условились называть «ложными»).&amp;lt;br/&amp;gt;&lt;br /&gt;
==== Доказательство корректности сведения ====&lt;br /&gt;
Покажем теперь, что такой граф будет &amp;lt;tex&amp;gt;(n+1)&amp;lt;/tex&amp;gt;-раскрашиваемым тогда и только тогда, когда исходная формула принадлежит &amp;lt;tex&amp;gt; 3CNFSAT &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \Rightarrow &amp;lt;/tex&amp;gt;. Из построения ясно, что можно покрасить вершины полученного графа, соответствующие истинным термам набора, обращающего формулу в истину, в цвет &amp;lt;tex&amp;gt;c_0&amp;lt;/tex&amp;gt;, а вершины, соответствующие ложным термам, &amp;amp;mdash; в соответствующие &amp;quot;ложные&amp;quot; цвета.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \Leftarrow &amp;lt;/tex&amp;gt;. Построим по раскраске графа набор переменных &amp;lt;tex&amp;gt; \{x_i\}_{i=1}^n &amp;lt;/tex&amp;gt;, в котором &amp;lt;tex&amp;gt; x_i &amp;lt;/tex&amp;gt; истинно тогда и только тогда, когда &amp;lt;tex&amp;gt; v_i &amp;lt;/tex&amp;gt; покрашена в цвет &amp;lt;tex&amp;gt; c_0 &amp;lt;/tex&amp;gt;. Этот набор непротиворечив (мы не попытались одну и ту же переменную сделать и истинной, и ложной одновременно). Он также обращает формулу в истинную, так как по постронию в каждой скобке есть хотя бы один истинный терм.&lt;br /&gt;
&lt;br /&gt;
[[Категория:NP]]&lt;br /&gt;
[[Категория:Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Artushak</name></author>	</entry>

	</feed>