<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3ASiziyman</id>
		<title>Участник:Siziyman - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3ASiziyman"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Siziyman&amp;action=history"/>
		<updated>2026-05-11T15:54:56Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Siziyman&amp;diff=35492&amp;oldid=prev</id>
		<title>Siziyman: Новая страница: «Тут будет черновичок конспекта, который вовремя сдан не был.  == Задача о количестве полны...»</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Siziyman&amp;diff=35492&amp;oldid=prev"/>
				<updated>2014-01-09T20:13:51Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «Тут будет черновичок конспекта, который вовремя сдан не был.  == Задача о количестве полны...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Тут будет черновичок конспекта, который вовремя сдан не был.&lt;br /&gt;
&lt;br /&gt;
== Задача о количестве полных подграфов в графе ==&lt;br /&gt;
&lt;br /&gt;
Дан граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; вершин. Требуется подсчитать количество полных подграфов графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (такие подграфы также называются '''кликами''' — ''clique'').&lt;br /&gt;
&lt;br /&gt;
'''1.''' Наивное решение - перебор всех возможных подграфов и проверка для каждого, что он является кликой, сложность - &amp;lt;tex&amp;gt;O(2^N \times N^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''2.''' Этот алгоритм можно улучшить до &amp;lt;tex&amp;gt;O(2^N)&amp;lt;/tex&amp;gt;. Для этого нужно в функции перебора хранить маску вершин, которые мы ещё можем добавить. Поддерживая эту маску, можно добавлять только «нужные» вершины, и тогда не нужно будет в конце проверять подграф на то что он — клика. Добавлять вершину можно за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;, используя побитовое «и» текущей маски и строчки матрицы смежности добавляемой вершины.&lt;br /&gt;
&lt;br /&gt;
===Решение с meet-in-the-middle===&lt;br /&gt;
Разбиваем граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на 2 графа &amp;lt;tex&amp;gt;{G}_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;{G}_2&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;N/2&amp;lt;/tex&amp;gt; вершин. Находим за &amp;lt;tex&amp;gt;O(2^{N/2})&amp;lt;/tex&amp;gt; все клики в каждом из них.&lt;br /&gt;
&lt;br /&gt;
Теперь надо узнать для каждой клики графа &amp;lt;tex&amp;gt;{G}_1&amp;lt;/tex&amp;gt; количество клик графа &amp;lt;tex&amp;gt;{G}_2&amp;lt;/tex&amp;gt;, таких, что их объединение — клика. Их сумма и есть итоговый ответ.&lt;br /&gt;
&lt;br /&gt;
Для одной клики &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;{G}_1&amp;lt;/tex&amp;gt; может быть несколько подходящих клик в &amp;lt;tex&amp;gt;{G}_2&amp;lt;/tex&amp;gt;. О клике &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; мы &amp;quot;знаем&amp;quot; только маску вершин графа &amp;lt;tex&amp;gt;{G}_2&amp;lt;/tex&amp;gt;, которые ещё можно добавить. Для каждой такой маски в &amp;lt;tex&amp;gt;{G}_2&amp;lt;/tex&amp;gt; нужно предподсчитать ответ. &lt;br /&gt;
С помощью динамического программирования предподсчитаем для каждой маски вершин графа &amp;lt;tex&amp;gt;{G}_2&amp;lt;/tex&amp;gt; количество клик, вершины которой являются подмножеством выбранной маски. Количество состояний - &amp;lt;tex&amp;gt;2^{N/2}&amp;lt;/tex&amp;gt;. Количество переходов:&amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; . Асимптотика - &amp;lt;tex&amp;gt;O(2^{N/2} \times N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для каждой клики &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; (в том числе и пустой) графа &amp;lt;tex&amp;gt;{G}_1&amp;lt;/tex&amp;gt; прибавим к глобальному ответу предподсчитанное количество клик, которые можно добавить к &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; (В том числе и пустых). Асимптотика: &amp;lt;tex&amp;gt;O(2^{N/2})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Псевдокод подсчёта ответа:&lt;br /&gt;
 for mаsk = 0 to (1 &amp;lt;&amp;lt; N)&lt;br /&gt;
   dp[mask] = 1 + sum( [p[mask &amp;amp; matrix[i]  for i = 0 to N if ((mask &amp;amp; ( 1 &amp;lt;&amp;lt; i )) &amp;gt; 0))&lt;br /&gt;
 ans = sum(dp[clique1_mask[i]])&lt;br /&gt;
&lt;br /&gt;
Итоговая сложность: &amp;lt;tex&amp;gt;O(2^{N/2} \times N)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Siziyman</name></author>	</entry>

	</feed>