<?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=91.108.30.214&amp;*</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=91.108.30.214&amp;*"/>
		<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/91.108.30.214"/>
		<updated>2026-05-06T04:33:03Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9B%D1%83%D0%BF%D0%B0%D0%BD%D0%BE%D0%B2%D0%B0_%D1%81%D0%B8%D0%BD%D1%82%D0%B5%D0%B7%D0%B0_%D1%81%D1%85%D0%B5%D0%BC&amp;diff=63237</id>
		<title>Метод Лупанова синтеза схем</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9B%D1%83%D0%BF%D0%B0%D0%BD%D0%BE%D0%B2%D0%B0_%D1%81%D0%B8%D0%BD%D1%82%D0%B5%D0%B7%D0%B0_%D1%81%D1%85%D0%B5%D0%BC&amp;diff=63237"/>
				<updated>2017-12-30T14:41:31Z</updated>
		
		<summary type="html">&lt;p&gt;91.108.30.214: /* Мультиплексор и дешифратор */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Теорема|statement=&lt;br /&gt;
Любая [[Определение булевой функции | булева функция]] от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; аргументов &amp;lt;tex&amp;gt;f(x_1, x_2, \ldots, x_n)&amp;lt;/tex&amp;gt; в базисе &amp;lt;tex&amp;gt;B = \{\neg, \lor, \land\}&amp;lt;/tex&amp;gt; имеет [[Реализация булевой функции схемой из функциональных элементов#Схемная сложность | схемную сложность]] &amp;lt;tex&amp;gt;size_B (f) = O\left(\dfrac{2^n}{n}\right)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Описываемая таблица истинности, разделённая на полосы]]&lt;br /&gt;
Поделим аргументы функции на два блока: первые &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; и оставшиеся &amp;lt;tex&amp;gt;(n - k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Строки индексируются значениями первых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; переменных, столбцы — значениями оставшихся &amp;lt;tex&amp;gt;(n - k)&amp;lt;/tex&amp;gt;; таким образом, на пересечении столбца и строки находится значение функции для соответствующего набора аргументов.&lt;br /&gt;
&lt;br /&gt;
== Разделение на полосы ==&lt;br /&gt;
Разделим таблицу на '''''горизонтальные полосы''''' шириной &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; (последняя полоса, возможно, будет короче остальных; её ширину обозначим &amp;lt;tex&amp;gt;s'&amp;lt;/tex&amp;gt;). Пронумеруем полосы сверху вниз от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\dfrac{2^k}{s}\right\rceil&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим независимо некоторую полосу. Заметим, что среди её столбцов при небольшом &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; будет много повторений; далее про одинаковые столбцы, находящиеся в одной полосе, будем говорить, что они одного '''''сорта'''''.&lt;br /&gt;
{{&lt;br /&gt;
Определение|definition=&lt;br /&gt;
'''Сорт''' некоторого столбца данной полосы {{---}} его [[Отношение эквивалентности#Классы эквивалентности | класс эквивалентности]] по отношению поэлементного равенства столбцов данной полосы.&lt;br /&gt;
}}&lt;br /&gt;
Число сортов столбцов &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й полосы обозначим как &amp;lt;tex&amp;gt;t(i)&amp;lt;/tex&amp;gt;. Понятно, что для любой полосы &amp;lt;tex&amp;gt;t(i) \leqslant  2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leqslant  2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;. Значения, возвращаемые функцией &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть для некоторого &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\beta_{j}&amp;lt;/tex&amp;gt; {{---}} произвольный столбец &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й полосы &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-го сорта (точное положение столбца далее не будет иметь значения, по определению сорта)&lt;br /&gt;
* &amp;lt;tex&amp;gt;(\sigma_1^l, \sigma_2^l, \ldots, \sigma_k^l)&amp;lt;/tex&amp;gt; {{---}} аргументы функции, соответствующие &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;-й строке &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й полосы.&lt;br /&gt;
Тогда введём булеву функцию&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;g_{ij}(x_1, x_2, \ldots, x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}, \mbox{ if } \exists l \in [1; s]~(x_1, x_2, \ldots, x_k) = (\sigma_1^l, \sigma_2^l, \ldots, \sigma_k^l) \\&lt;br /&gt;
    0, \mbox{ otherwise}&lt;br /&gt;
\end{cases}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другими словами, если строка, соответствующая аргументам функции &amp;lt;tex&amp;gt;x_1, x_2, \ldots, x_k&amp;lt;/tex&amp;gt;, находится в &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й полосе, то функция возвращает значение, записанное в столбце сорта &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, \ldots, \sigma_{n})&amp;lt;/tex&amp;gt; складывается из столбцов соответствующих сортов в полосах,&lt;br /&gt;
&amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;f(x_1, x_2, \ldots, x_k, \sigma_{k + 1}, \sigma_{k + 2}, \ldots, \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, \ldots, x_k)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;j_i&amp;lt;/tex&amp;gt; {{---}} номер сорта столбца полосы &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, являющегося соответствующей частью столбца &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, \ldots, \sigma_{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Мультиплексор и дешифратор ==&lt;br /&gt;
Для упрощения доказательства теоремы будем использовать элементы '''''мультиплексор''''' и '''''дешифратор'''''.&lt;br /&gt;
{{&lt;br /&gt;
Определение|definition=&lt;br /&gt;
'''Мультиплексор''' (''англ.'' multiplexer) {{---}} логический элемент, получающий на вход&lt;br /&gt;
* &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; булевых значений;&lt;br /&gt;
* &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-значное число &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в двоичном представлении&lt;br /&gt;
и возвращающий значение на &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;-м входе.&lt;br /&gt;
}}{{&lt;br /&gt;
Определение|definition=&lt;br /&gt;
'''Дешифратор''' (или демультиплексор, ''англ.'' demultiplexer) {{---}} логический элемент, получающий на вход&lt;br /&gt;
* булево значение &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-значное число &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в двоичном представлении&lt;br /&gt;
и выводящий &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;-й из своих &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; выходов. На все остальные выходы элемент выдаёт &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:Mux_demux.png|500px|thumb|Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;O(2^n)&amp;lt;/tex&amp;gt; с помощью базиса &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, \ldots, x_n)&amp;lt;/tex&amp;gt; (представление Лупанова, ''англ.'' Lupanov &amp;lt;tex&amp;gt;(k, s)&amp;lt;/tex&amp;gt;-representation).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(x_1, x_2, \ldots, x_k)&amp;lt;/tex&amp;gt; в качестве двоичного представления числа.&lt;br /&gt;
* '''Блок B''' {{---}} схемная реализация всех &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt;. Функцию &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; можно реализовать как &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;\bigvee\limits_{\beta_l = 1} y_{il}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;y_{il}&amp;lt;/tex&amp;gt; {{---}} выдал ли дешифратор &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;-м выходе &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й полосы.&lt;br /&gt;
* '''Блок C''' {{---}} схемная реализация всех &amp;lt;tex&amp;gt;f(x_1, x_2, \ldots, x_k, \sigma_{k + 1}, \sigma_{k + 2}, \ldots, \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. &amp;lt;tex&amp;gt;3.1&amp;lt;/tex&amp;gt;)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, \ldots, x_k, \sigma_{k + 1}, \sigma_{k + 2}, \ldots, \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, \ldots, x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = \lfloor n - 2\log_2 n\rfloor&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = \lfloor\log_2 n\rfloor&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_A = O(2^k) = O(2^{\log_2 n}) = O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_B \leqslant  (s - 1) \cdot (t(1) + t(2) + \ldots + t(p)) &amp;lt; sp \cdot 2^s = n \cdot \dfrac{2^n}{n^2} = \dfrac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_C = O(p \cdot 2^{n - k}) = O\left(\dfrac{p}{n} \cdot 2^n\right) = O\left(\dfrac{2^n}{s}\right) = O\left(\dfrac{2^n}{n - 2\log_2 n}\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_D = O(2^{n - k}) = O\left(\dfrac{2^n}{n}\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;L_A + L_B + L_C + L_D = O(n) + O\left(\frac{2^n}{n}\right) + O\left(\dfrac{2^n}{n - 2\log_2 n}\right) + O\left(\dfrac{2^n}{n}\right) = O\left(\dfrac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\dfrac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Реализация_булевой_функции_схемой_из_функциональных_элементов|Реализация булевой функции схемой из функциональных элементов]]&lt;br /&gt;
*[[Простейшие_методы_синтеза_схем_из_функциональных_элементов|Простейшие методы синтеза схем из функциональных элементов]]&lt;br /&gt;
*[[Контактная_схема|Контактная схема]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Источник информации ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>91.108.30.214</name></author>	</entry>

	</feed>