<?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=Dimatomp</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=Dimatomp"/>
		<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/Dimatomp"/>
		<updated>2026-06-22T23:39:44Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70868</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70868"/>
				<updated>2019-04-08T02:22:46Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
&lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера''';&lt;br /&gt;
* и т.д.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров {{---}} таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') {{---}} для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь {{---}} это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' {{---}} для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') {{---}} для каждого кластера $f$-мерной выборки задаётся его ''центроид'' {{---}} синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') {{---}} то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' (''tree-based binary encoding'') {{---}} по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;br /&gt;
В качестве мутации можно либо использовать одну из операций, приведённых ниже, либо случайно (н-р, равновероятно) выбирать одну из нескольких таких операций.&lt;br /&gt;
=== Разбиения, слияния и переназначения ===&lt;br /&gt;
В этом разделе приведён ряд мутаций, предполагающих целочисленное кодирование особи.&lt;br /&gt;
Общим свойством этих операций является необходимость выбрать один, два или более кластеров, над которыми операции производятся. Делать это можно либо '''случайно''' (''unguided''), либо '''выборочно''' (''guided'') на основе той или иной характеристики кластера (''interestingness'') {{---}} например, расстояний объектов до центроида, плотности объектов в кластере и т.п.&lt;br /&gt;
* '''разбиение кластера''' (''split-gene'') {{---}} выбранный кластер делится вдоль $N-1$-мерной поверхности (н-р, гиперплоскости; для двухмерного случая это прямая) на два новых. Гиперплоскость можно задать:&lt;br /&gt;
** случайно на основе выпуклой оболочки кластера;&lt;br /&gt;
** случайно по направлению, а по положению {{---}} выборочно на основе индуцированной функции распределения (или гистограммы) положения объектов кластера вдоль оси, перпендикулярной гиперплоскости;&lt;br /&gt;
** детерминированно как медиану между центроидом кластера и самой отдалённым от центроида объектом.&lt;br /&gt;
* '''слияние двух кластеров''' (''merge-gene'') {{---}} выбранные два кластера объединяются в один.&lt;br /&gt;
* '''удаление кластера''' {{---}} все объекты выбранного кластера переназначаются в другие кластеры на основе расстояния до них.&lt;br /&gt;
* '''переназначение элементов кластера''' (''remove-and-reclassify'') {{---}} небольшой набор объектов выбранного кластера переназначается в другие кластеры. Вместе с объектом можно также переместить случайное число (от 0 до $N/k$) ближайших к нему объектов. Набор объектов и целевой кластер можно задать случайно или выборочно на основе расстояний до соседних кластеров.&lt;br /&gt;
Следует заметить, что если алгоритм использует хотя бы одну операцию разбиения, то должна быть включена в рассмотрение какая-нибудь операция слияния, и наоборот. Иначе количество кластеров либо уменьшится до двух, либо возрастёт до $N$.&lt;br /&gt;
=== Модификация прототипа ===&lt;br /&gt;
Над прототипами (как вещественно, так и бинарно закодированными) можно проводить операции удаления и добавления; также у вещественного прототипа (центроида) можно поменять координаты. Помимо этого, можно получить гибрид эволюционного алгоритма и ''K-Means'', совершая в качестве одной из возможных мутирующих операций шаг алгоритма $k$ средних значений. Аналогично можно внедрить EM-шаг из ''Gaussian mixture'', но для этого нужно при кодировании особи задавать дисперсию распределения при каждом центроиде.&lt;br /&gt;
== Кроссовер ==&lt;br /&gt;
В качестве операций кроссовера различными авторами были опробованы:&lt;br /&gt;
* '''k-точечный кроссовер''' (''k-point crossover'') на целочисленном и вещественном кодировании;&lt;br /&gt;
* '''однородный кроссовер''' (''uniform crossover'') на древесном бинарном кодированиии;&lt;br /&gt;
* '''скрещивание кластеров''' {{---}} из выбранного кластера первой особи удаляется часть объектов, после чего в него добавляются случайно выбранные объекты из кластера второй особи. Удалённые объекты переназначаются в другие кластеры первой особи. На всех стадиях этой операции, требующих выбор объектов или кластеров, можно использовать как выборочную (''guided''), так и полностью случайную (''unguided'') стратегии, аналогично описанию мутаций разбиения и слияния.&lt;br /&gt;
== Инициализация ==&lt;br /&gt;
Задание особей первого поколения алгоритма может производиться с помощью различных эвристик:&lt;br /&gt;
* '''случайная инициализация''' {{---}} объекты назначаются в кластеры полностью случайным образом. Качество у полученной особи наихудшее, но можно использовать этот способ для тестирования.&lt;br /&gt;
* '''случайный выбор прототипов''' {{---}} прототипы бинарно закодированной особи задаются случайно.&lt;br /&gt;
* '''пространственная инициализация''' {{---}} например, объекты назначаются в кластеры на основе их координаты вдоль случайной оси.&lt;br /&gt;
* '''запуск другого алгоритма кластеризации''' {{---}} особь можно инициализировать с помощью ''K-Means'', [Иерархическая кластеризация|иерархической кластеризации] и проч.&lt;br /&gt;
== Виды алгоритмов ==&lt;br /&gt;
Различными авторами были опробованы для кластеризации такие алгоритмы как Roulette wheel selection, $(\mu + \lambda)$, алгоритм многокритериальной оптимизации PESA-II, ...&lt;br /&gt;
= См. также =&lt;br /&gt;
* [[Кластеризация]]&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [[Эволюционные алгоритмы]]&lt;br /&gt;
= Примечания =&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Кластерный_анализ Кластерный анализ - Википедия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Эволюционные_алгоритмы Эволюционные алгоритмы - Википедия]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Crossover_(genetic_algorithm) Crossover (genetic algorithm) - Wikipedia]&lt;br /&gt;
= Источники информации =&lt;br /&gt;
* Hruschka, E.R. A Survey of Evolutionary Algorithms for Clustering / E.R. Hruschka, R.J.G.B. Campello, A.A.Freitas, A.C.P.L.F. de Carvalho // IEEE Transactions on Systems, Man, and Cybernetics {{---}} Part C: Applications and Reviews, Vol. 39 {{---}} 2009 {{---}} С.133-155&lt;br /&gt;
* Lu, W. A novel evolutionary clustering algorithm based on Gaussian mixture model / W. Lu, I. Traore // ICCOMP'06 Proceedings of the 10th WSEAS international conference on Computers {{---}} 2006 {{---}} C. 686-691&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Кластеризация]]&lt;br /&gt;
[[Категория: Эволюционные алгоритмы]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70867</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70867"/>
				<updated>2019-04-08T02:09:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
&lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера''';&lt;br /&gt;
* и т.д.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров {{---}} таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') {{---}} для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь {{---}} это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' {{---}} для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') {{---}} для каждого кластера $f$-мерной выборки задаётся его ''центроид'' {{---}} синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') {{---}} то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' (''tree-based binary encoding'') {{---}} по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;br /&gt;
В качестве мутации можно либо использовать одну из операций, приведённых ниже, либо случайно (н-р, равновероятно) выбирать одну из нескольких таких операций.&lt;br /&gt;
=== Разбиения, слияния и переназначения ===&lt;br /&gt;
В этом разделе приведён ряд мутаций, предполагающих целочисленное кодирование особи.&lt;br /&gt;
Общим свойством этих операций является необходимость выбрать один, два или более кластеров, над которыми операции производятся. Делать это можно либо '''случайно''' (''unguided''), либо '''выборочно''' (''guided'') на основе той или иной характеристики кластера (''interestingness'') {{---}} например, расстояний объектов до центроида, плотности объектов в кластере и т.п.&lt;br /&gt;
* '''разбиение кластера''' (''split-gene'') {{---}} выбранный кластер делится вдоль $N-1$-мерной поверхности (н-р, гиперплоскости; для двухмерного случая это прямая) на два новых. Гиперплоскость можно задать:&lt;br /&gt;
** случайно на основе выпуклой оболочки кластера;&lt;br /&gt;
** случайно по направлению, а по положению {{---}} выборочно на основе индуцированной функции распределения (или гистограммы) положения объектов кластера вдоль оси, перпендикулярной гиперплоскости;&lt;br /&gt;
** детерминированно как медиану между центроидом кластера и самой отдалённым от центроида объектом.&lt;br /&gt;
* '''слияние двух кластеров''' (''merge-gene'') {{---}} выбранные два кластера объединяются в один.&lt;br /&gt;
* '''удаление кластера''' {{---}} все объекты выбранного кластера переназначаются в другие кластеры на основе расстояния до них.&lt;br /&gt;
* '''переназначение элементов кластера''' (''remove-and-reclassify'') {{---}} небольшой набор объектов выбранного кластера переназначается в другие кластеры. Вместе с объектом можно также переместить случайное число (от 0 до $N/k$) ближайших к нему объектов. Набор объектов и целевой кластер можно задать случайно или выборочно на основе расстояний до соседних кластеров.&lt;br /&gt;
Следует заметить, что если алгоритм использует хотя бы одну операцию разбиения, то должна быть включена в рассмотрение какая-нибудь операция слияния, и наоборот. Иначе количество кластеров либо уменьшится до двух, либо возрастёт до $N$.&lt;br /&gt;
=== Модификация прототипа ===&lt;br /&gt;
Над прототипами (как вещественно, так и бинарно закодированными) можно проводить операции удаления и добавления; также у вещественного прототипа (центроида) можно поменять координаты. Помимо этого, можно получить гибрид эволюционного алгоритма и ''K-Means'', совершая в качестве одной из возможных мутирующих операций шаг алгоритма $k$ средних значений. Аналогично можно внедрить EM-шаг из ''Gaussian mixture'', но для этого нужно при кодировании особи задавать дисперсию распределения при каждом центроиде.&lt;br /&gt;
== Кроссовер ==&lt;br /&gt;
В качестве операций кроссовера различными авторами были опробованы:&lt;br /&gt;
* '''k-точечный кроссовер''' (''k-point crossover'') на целочисленном и вещественном кодировании;&lt;br /&gt;
* '''однородный кроссовер''' (''uniform crossover'') на древесном бинарном кодированиии;&lt;br /&gt;
* '''скрещивание кластеров''' {{---}} из выбранного кластера первой особи удаляется часть объектов, после чего в него добавляются случайно выбранные объекты из кластера второй особи. Удалённые объекты переназначаются в другие кластеры первой особи. На всех стадиях этой операции, требующих выбор объектов или кластеров, можно использовать как выборочную (''guided''), так и полностью случайную (''unguided'') стратегии, аналогично описанию мутаций разбиения и слияния.&lt;br /&gt;
== Инициализация ==&lt;br /&gt;
Задание особей первого поколения алгоритма может производиться с помощью различных эвристик:&lt;br /&gt;
* '''случайная инициализация''' {{---}} объекты назначаются в кластеры полностью случайным образом. Качество у полученной особи наихудшее, но можно использовать этот способ для тестирования.&lt;br /&gt;
* '''случайный выбор прототипов''' {{---}} прототипы бинарно закодированной особи задаются случайно.&lt;br /&gt;
* '''пространственная инициализация''' {{---}} например, объекты назначаются в кластеры на основе их координаты вдоль случайной оси.&lt;br /&gt;
* '''запуск другого алгоритма кластеризации''' {{---}} особь можно инициализировать с помощью ''K-Means'', [Иерархическая кластеризация|иерархической кластеризации] и проч.&lt;br /&gt;
== Виды алгоритмов ==&lt;br /&gt;
Различными авторами были опробованы для кластеризации такие алгоритмы как Roulette wheel selection, $(\mu + \lambda)$, алгоритм многокритериальной оптимизации PESA-II, ...&lt;br /&gt;
= См. также =&lt;br /&gt;
* [[Кластеризация]]&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [[Эволюционные алгоритмы]]&lt;br /&gt;
= Примечания =&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Кластерный_анализ Кластерный анализ - Википедия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Эволюционные_алгоритмы Эволюционные алгоритмы - Википедия]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Crossover_(genetic_algorithm) Crossover (genetic algorithm) - Wikipedia]&lt;br /&gt;
= Источники информации =&lt;br /&gt;
* Hruschka, E.R. A Survey of Evolutionary Algorithms for Clustering / E.R. Hruschka, R.J.G.B. Campello, A.A.Freitas, A.C.P.L.F. de Carvalho // IEEE Transactions on Systems, Man, and Cybernetics {{---}} Part C: Applications and Reviews, Vol. 39 {{---}} 2009 {{---}} С.133-155&lt;br /&gt;
* Lu, W. A novel evolutionary clustering algorithm based on Gaussian mixture model / W. Lu, I. Traore // ICCOMP'06 Proceedings of the 10th WSEAS international conference on Computers {{---}} 2006 {{---}} C. 686-691&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70866</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70866"/>
				<updated>2019-04-08T02:08:09Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
&lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера''';&lt;br /&gt;
* и т.д.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров {---} таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') {---} для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь {---} это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' {---} для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') {---} для каждого кластера $f$-мерной выборки задаётся его ''центроид'' {---} синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') {---} то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' (''tree-based binary encoding'') {---} по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;br /&gt;
В качестве мутации можно либо использовать одну из операций, приведённых ниже, либо случайно (н-р, равновероятно) выбирать одну из нескольких таких операций.&lt;br /&gt;
=== Разбиения, слияния и переназначения ===&lt;br /&gt;
В этом разделе приведён ряд мутаций, предполагающих целочисленное кодирование особи.&lt;br /&gt;
Общим свойством этих операций является необходимость выбрать один, два или более кластеров, над которыми операции производятся. Делать это можно либо '''случайно''' (''unguided''), либо '''выборочно''' (''guided'') на основе той или иной характеристики кластера (''interestingness'') {---} например, расстояний объектов до центроида, плотности объектов в кластере и т.п.&lt;br /&gt;
* '''разбиение кластера''' (''split-gene'') {---} выбранный кластер делится вдоль $N-1$-мерной поверхности (н-р, гиперплоскости; для двухмерного случая это прямая) на два новых. Гиперплоскость можно задать:&lt;br /&gt;
** случайно на основе выпуклой оболочки кластера;&lt;br /&gt;
** случайно по направлению, а по положению {---} выборочно на основе индуцированной функции распределения (или гистограммы) положения объектов кластера вдоль оси, перпендикулярной гиперплоскости;&lt;br /&gt;
** детерминированно как медиану между центроидом кластера и самой отдалённым от центроида объектом.&lt;br /&gt;
* '''слияние двух кластеров''' (''merge-gene'') {---} выбранные два кластера объединяются в один.&lt;br /&gt;
* '''удаление кластера''' {---} все объекты выбранного кластера переназначаются в другие кластеры на основе расстояния до них.&lt;br /&gt;
* '''переназначение элементов кластера''' (''remove-and-reclassify'') {---} небольшой набор объектов выбранного кластера переназначается в другие кластеры. Вместе с объектом можно также переместить случайное число (от 0 до $N/k$) ближайших к нему объектов. Набор объектов и целевой кластер можно задать случайно или выборочно на основе расстояний до соседних кластеров.&lt;br /&gt;
Следует заметить, что если алгоритм использует хотя бы одну операцию разбиения, то должна быть включена в рассмотрение какая-нибудь операция слияния, и наоборот. Иначе количество кластеров либо уменьшится до двух, либо возрастёт до $N$.&lt;br /&gt;
=== Модификация прототипа ===&lt;br /&gt;
Над прототипами (как вещественно, так и бинарно закодированными) можно проводить операции удаления и добавления; также у вещественного прототипа (центроида) можно поменять координаты. Помимо этого, можно получить гибрид эволюционного алгоритма и ''K-Means'', совершая в качестве одной из возможных мутирующих операций шаг алгоритма $k$ средних значений. Аналогично можно внедрить EM-шаг из ''Gaussian mixture'', но для этого нужно при кодировании особи задавать дисперсию распределения при каждом центроиде.&lt;br /&gt;
== Кроссовер ==&lt;br /&gt;
В качестве операций кроссовера различными авторами были опробованы:&lt;br /&gt;
* '''k-точечный кроссовер''' (''k-point crossover'') на целочисленном и вещественном кодировании;&lt;br /&gt;
* '''однородный кроссовер''' (''uniform crossover'') на древесном бинарном кодированиии;&lt;br /&gt;
* '''скрещивание кластеров''' {---} из выбранного кластера первой особи удаляется часть объектов, после чего в него добавляются случайно выбранные объекты из кластера второй особи. Удалённые объекты переназначаются в другие кластеры первой особи. На всех стадиях этой операции, требующих выбор объектов или кластеров, можно использовать как выборочную (''guided''), так и полностью случайную (''unguided'') стратегии, аналогично описанию мутаций разбиения и слияния.&lt;br /&gt;
== Инициализация ==&lt;br /&gt;
Задание особей первого поколения алгоритма может производиться с помощью различных эвристик:&lt;br /&gt;
* '''случайная инициализация''' {---} объекты назначаются в кластеры полностью случайным образом. Качество у полученной особи наихудшее, но можно использовать этот способ для тестирования.&lt;br /&gt;
* '''случайный выбор прототипов''' {---} прототипы бинарно закодированной особи задаются случайно.&lt;br /&gt;
* '''пространственная инициализация''' {---} например, объекты назначаются в кластеры на основе их координаты вдоль случайной оси.&lt;br /&gt;
* '''запуск другого алгоритма кластеризации''' {---} особь можно инициализировать с помощью ''K-Means'', [Иерархическая кластеризация|иерархической кластеризации] и проч.&lt;br /&gt;
== Виды алгоритмов ==&lt;br /&gt;
Различными авторами были опробованы для кластеризации такие алгоритмы как Roulette wheel selection, $(\mu + \lambda)$, алгоритм многокритериальной оптимизации PESA-II, ...&lt;br /&gt;
= См. также =&lt;br /&gt;
* [[Кластеризация]]&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [[Эволюционные алгоритмы]]&lt;br /&gt;
= Примечания =&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Кластерный_анализ Кластерный анализ - Википедия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Эволюционные_алгоритмы Эволюционные алгоритмы - Википедия]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Crossover_(genetic_algorithm) Crossover (genetic algorithm) - Wikipedia]&lt;br /&gt;
= Источники информации =&lt;br /&gt;
* Hruschka, E.R. A Survey of Evolutionary Algorithms for Clustering / E.R. Hruschka, R.J.G.B. Campello, A.A.Freitas, A.C.P.L.F. de Carvalho // IEEE Transactions on Systems, Man, and Cybernetics {---} Part C: Applications and Reviews, Vol. 39 {---} 2009 {---} С.133-155&lt;br /&gt;
* Lu, W. A novel evolutionary clustering algorithm based on Gaussian mixture model / W. Lu, I. Traore // ICCOMP'06 Proceedings of the 10th WSEAS international conference on Computers {---} 2006 {---} C. 686-691&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70865</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70865"/>
				<updated>2019-04-08T02:05:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
&lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера''';&lt;br /&gt;
* и т.д.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров - таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') - для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь - это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' - для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') - для каждого кластера $f$-мерной выборки задаётся его ''центроид'' - синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') - то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' (''tree-based binary encoding'') - по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;br /&gt;
В качестве мутации можно либо использовать одну из операций, приведённых ниже, либо случайно (н-р, равновероятно) выбирать одну из нескольких таких операций.&lt;br /&gt;
=== Разбиения, слияния и переназначения ===&lt;br /&gt;
В этом разделе приведён ряд мутаций, предполагающих целочисленное кодирование особи.&lt;br /&gt;
Общим свойством этих операций является необходимость выбрать один, два или более кластеров, над которыми операции производятся. Делать это можно либо '''случайно''' (''unguided''), либо '''выборочно''' (''guided'') на основе той или иной характеристики кластера (''interestingness'') - например, расстояний объектов до центроида, плотности объектов в кластере и т.п.&lt;br /&gt;
* '''разбиение кластера''' (''split-gene'') - выбранный кластер делится вдоль $N-1$-мерной поверхности (н-р, гиперплоскости; для двухмерного случая это прямая) на два новых. Гиперплоскость можно задать:&lt;br /&gt;
** случайно на основе выпуклой оболочки кластера;&lt;br /&gt;
** случайно по направлению, а по положению - выборочно на основе индуцированной функции распределения (или гистограммы) положения объектов кластера вдоль оси, перпендикулярной гиперплоскости;&lt;br /&gt;
** детерминированно как медиану между центроидом кластера и самой отдалённым от центроида объектом.&lt;br /&gt;
* '''слияние двух кластеров''' (''merge-gene'') - выбранные два кластера объединяются в один.&lt;br /&gt;
* '''удаление кластера''' - все объекты выбранного кластера переназначаются в другие кластеры на основе расстояния до них.&lt;br /&gt;
* '''переназначение элементов кластера''' (''remove-and-reclassify'') - небольшой набор объектов выбранного кластера переназначается в другие кластеры. Вместе с объектом можно также переместить случайное число (от 0 до $N/k$) ближайших к нему объектов. Набор объектов и целевой кластер можно задать случайно или выборочно на основе расстояний до соседних кластеров.&lt;br /&gt;
Следует заметить, что если алгоритм использует хотя бы одну операцию разбиения, то должна быть включена в рассмотрение какая-нибудь операция слияния, и наоборот. Иначе количество кластеров либо уменьшится до двух, либо возрастёт до $N$.&lt;br /&gt;
=== Модификация прототипа ===&lt;br /&gt;
Над прототипами (как вещественно, так и бинарно закодированными) можно проводить операции удаления и добавления; также у вещественного прототипа (центроида) можно поменять координаты. Помимо этого, можно получить гибрид эволюционного алгоритма и ''K-Means'', совершая в качестве одной из возможных мутирующих операций шаг алгоритма $k$ средних значений. Аналогично можно внедрить EM-шаг из ''Gaussian mixture'', но для этого нужно при кодировании особи задавать дисперсию распределения при каждом центроиде.&lt;br /&gt;
== Кроссовер ==&lt;br /&gt;
В качестве операций кроссовера различными авторами были опробованы:&lt;br /&gt;
* '''k-точечный кроссовер''' (''k-point crossover'') на целочисленном и вещественном кодировании;&lt;br /&gt;
* '''однородный кроссовер''' (''uniform crossover'') на древесном бинарном кодированиии;&lt;br /&gt;
* '''скрещивание кластеров''' - из выбранного кластера первой особи удаляется часть объектов, после чего в него добавляются случайно выбранные объекты из кластера второй особи. Удалённые объекты переназначаются в другие кластеры первой особи. На всех стадиях этой операции, требующих выбор объектов или кластеров, можно использовать как выборочную (''guided''), так и полностью случайную (''unguided'') стратегии, аналогично описанию мутаций разбиения и слияния.&lt;br /&gt;
== Инициализация ==&lt;br /&gt;
Задание особей первого поколения алгоритма может производиться с помощью различных эвристик:&lt;br /&gt;
* '''случайная инициализация''' - объекты назначаются в кластеры полностью случайным образом. Качество у полученной особи наихудшее, но можно использовать этот способ для тестирования.&lt;br /&gt;
* '''случайный выбор прототипов''' - прототипы бинарно закодированной особи задаются случайно.&lt;br /&gt;
* '''пространственная инициализация''' - например, объекты назначаются в кластеры на основе их координаты вдоль случайной оси.&lt;br /&gt;
* '''запуск другого алгоритма кластеризации''' - особь можно инициализировать с помощью ''K-Means'', [Иерархическая кластеризация|иерархической кластеризации] и проч.&lt;br /&gt;
== Виды алгоритмов ==&lt;br /&gt;
Различными авторами были опробованы для кластеризации такие алгоритмы как Roulette wheel selection, $(\mu + \lambda)$, алгоритм многокритериальной оптимизации PESA-II, ...&lt;br /&gt;
= См. также =&lt;br /&gt;
* [[Кластеризация]]&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [[Эволюционные алгоритмы]]&lt;br /&gt;
= Примечания =&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Кластерный_анализ Кластерный анализ - Википедия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Эволюционные_алгоритмы Эволюционные алгоритмы - Википедия]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Crossover_(genetic_algorithm) Crossover (genetic algorithm) - Wikipedia]&lt;br /&gt;
= Источники информации =&lt;br /&gt;
* Hruschka, E.R. A Survey of Evolutionary Algorithms for Clustering / E.R. Hruschka, R.J.G.B. Campello, A.A.Freitas, A.C.P.L.F. de Carvalho // IEEE Transactions on Systems, Man, and Cybernetics – Part C: Applications and Reviews, Vol. 39 – 2009 - С.133-155&lt;br /&gt;
* Lu, W. A novel evolutionary clustering algorithm based on Gaussian mixture model / W. Lu, I. Traore // ICCOMP'06 Proceedings of the 10th WSEAS international conference on Computers - C. 686-691&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70864</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70864"/>
				<updated>2019-04-08T01:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
&lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера''';&lt;br /&gt;
* и т.д.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров - таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') - для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь - это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' - для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') - для каждого кластера $f$-мерной выборки задаётся его ''центроид'' - синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') - то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' (''tree-based binary encoding'') - по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;br /&gt;
В качестве мутации можно либо использовать одну из операций, приведённых ниже, либо случайно (н-р, равновероятно) выбирать одну из нескольких таких операций.&lt;br /&gt;
=== Разбиения, слияния и переназначения ===&lt;br /&gt;
В этом разделе приведён ряд мутаций, предполагающих целочисленное кодирование особи.&lt;br /&gt;
Общим свойством этих операций является необходимость выбрать один, два или более кластеров, над которыми операции производятся. Делать это можно либо '''случайно''' (''unguided''), либо '''выборочно''' (''guided'') на основе той или иной характеристики кластера (''interestingness'') - например, расстояний объектов до центроида, плотности объектов в кластере и т.п.&lt;br /&gt;
* '''разбиение кластера''' (''split-gene'') - выбранный кластер делится вдоль $N-1$-мерной поверхности (н-р, гиперплоскости; для двухмерного случая это прямая) на два новых. Гиперплоскость можно задать:&lt;br /&gt;
** случайно на основе выпуклой оболочки кластера;&lt;br /&gt;
** случайно по направлению, а по положению - выборочно на основе индуцированной функции распределения (или гистограммы) положения объектов кластера вдоль оси, перпендикулярной гиперплоскости;&lt;br /&gt;
** детерминированно как медиану между центроидом кластера и самой отдалённым от центроида объектом.&lt;br /&gt;
* '''слияние двух кластеров''' (''merge-gene'') - выбранные два кластера объединяются в один.&lt;br /&gt;
* '''удаление кластера''' - все объекты выбранного кластера переназначаются в другие кластеры на основе расстояния до них.&lt;br /&gt;
* '''переназначение элементов кластера''' (''remove-and-reclassify'') - небольшой набор объектов выбранного кластера переназначается в другие кластеры. Вместе с объектом можно также переместить случайное число (от 0 до $N/k$) ближайших к нему объектов. Набор объектов и целевой кластер можно задать случайно или выборочно на основе расстояний до соседних кластеров.&lt;br /&gt;
Следует заметить, что если алгоритм использует хотя бы одну операцию разбиения, то должна быть включена в рассмотрение какая-нибудь операция слияния, и наоборот. Иначе количество кластеров либо уменьшится до двух, либо возрастёт до $N$.&lt;br /&gt;
=== Модификация прототипа ===&lt;br /&gt;
Над прототипами (как вещественно, так и бинарно закодированными) можно проводить операции удаления и добавления; также у вещественного прототипа (центроида) можно поменять координаты. Помимо этого, можно получить гибрид эволюционного алгоритма и ''K-Means'', совершая в качестве одной из возможных мутирующих операций шаг алгоритма $k$ средних значений. Аналогично можно внедрить EM-шаг из ''Gaussian mixture'', но для этого нужно при кодировании особи задавать дисперсию распределения при каждом центроиде.&lt;br /&gt;
== Кроссовер ==&lt;br /&gt;
В качестве операций кроссовера различными авторами были опробованы:&lt;br /&gt;
* '''k-точечный кроссовер''' (''k-point crossover'') на целочисленном и вещественном кодировании;&lt;br /&gt;
* '''однородный кроссовер''' (''uniform crossover'') на древесном бинарном кодированиии;&lt;br /&gt;
* '''скрещивание кластеров''' - из выбранного кластера первой особи удаляется часть объектов, после чего в него добавляется часть объектов, принадлежащих некоторому кластеру второй особи. Удалённые объекты переназначаются в другие кластеры первой особи. На всех стадиях этой операции, требующих выбор объектов или кластеров, можно использовать как выборочную (''guided''), так и полностью случайную (''unguided'') стратегии, аналогично описанию мутаций разбиения и слияния.&lt;br /&gt;
== Инициализация ==&lt;br /&gt;
Задание особей первого поколения алгоритма может производиться с помощью различных эвристик:&lt;br /&gt;
* '''случайная инициализация''' - объекты назначаются в кластеры полностью случайным образом. Качество у полученной особи наихудшее, но можно использовать этот способ для тестирования.&lt;br /&gt;
* '''случайный выбор прототипов''' - прототипы бинарно закодированной особи задаются случайно.&lt;br /&gt;
* '''пространственная инициализация''' - например, объекты назначаются в кластеры на основе их координаты вдоль случайной оси.&lt;br /&gt;
* '''запуск другого алгоритма кластеризации''' - особь можно инициализировать с помощью ''K-Means'', [Иерархическая кластеризация|иерархической кластеризации] и проч.&lt;br /&gt;
== Виды алгоритмов ==&lt;br /&gt;
Различными авторами были опробованы для кластеризации такие алгоритмы как Roulette wheel selection, $(\mu + \lambda)$, алгоритм многокритериальной оптимизации PESA-II, ...&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70863</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70863"/>
				<updated>2019-04-08T00:08:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера''';&lt;br /&gt;
* и т.д.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров - таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') - для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь - это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' - для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') - для каждого кластера $f$-мерной выборки задаётся его ''центроид'' - синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') - то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' (''tree-based binary encoding'') - по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;br /&gt;
В качестве мутации можно либо использовать одну из операций, приведённых ниже, либо случайно (н-р, равновероятно) выбирать одну из нескольких таких операций.&lt;br /&gt;
=== Разбиения, слияния и переназначения ===&lt;br /&gt;
В этом разделе приведён ряд мутаций, предполагающих целочисленное кодирование особи.&lt;br /&gt;
Общим свойством этих операций является необходимость выбрать один, два или более кластеров, над которыми операции производятся. Делать это можно либо '''случайно''' (''unguided''), либо '''выборочно''' (''guided'') на основе той или иной характеристики кластера (''interestingness'') - например, расстояний объектов до центроида, плотности объектов в кластере и т.п.&lt;br /&gt;
* '''разбиение кластера''' (''split-gene'') - выбранный кластер делится вдоль $N-1$-мерной поверхности (н-р, гиперплоскости; для двухмерного случая это прямая) на два новых. Гиперплоскость можно задать:&lt;br /&gt;
** случайно на основе выпуклой оболочки кластера;&lt;br /&gt;
** случайно по направлению, а по положению - выборочно на основе индуцированной функции распределения (или гистограммы) положения объектов кластера вдоль оси, перпендикулярной гиперплоскости;&lt;br /&gt;
** детерминированно как медиану между центроидом кластера и самой отдалённым от центроида объектом.&lt;br /&gt;
* '''слияние двух кластеров''' (''merge-gene'') - выбранные два кластера объединяются в один.&lt;br /&gt;
* '''удаление кластера''' - все объекты выбранного кластера переназначаются в другие кластеры на основе расстояния до них.&lt;br /&gt;
* '''переназначение элементов кластера''' (''remove-and-reclassify'') - небольшой набор объектов выбранного кластера переназначается в другие кластеры. Вместе с объектом можно также переместить случайное число (от 0 до $N/k$) ближайших к нему объектов. Набор объектов и целевой кластер можно задать случайно или выборочно на основе расстояний до соседних кластеров.&lt;br /&gt;
Следует заметить, что если алгоритм использует хотя бы одну операцию разбиения, то должна быть включена в рассмотрение какая-нибудь операция слияния, и наоборот. Иначе количество кластеров либо уменьшится до двух, либо возрастёт до $N$.&lt;br /&gt;
=== Модификация прототипа ===&lt;br /&gt;
Над прототипами (как вещественно, так и бинарно закодированными) можно проводить операции удаления и добавления; также у вещественного прототипа (центроида) можно поменять координаты. Помимо этого, можно получить гибрид эволюционного алгоритма и ''K-Means'', совершая в качестве одной из возможных мутирующих операций шаг алгоритма $k$ средних значений.&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70862</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70862"/>
				<updated>2019-04-07T23:58:42Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера''';&lt;br /&gt;
* и т.д.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров - таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') - для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь - это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' - для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') - для каждого кластера $f$-мерной выборки задаётся его ''центроид'' - синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') - то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' (''tree-based binary encoding'') - по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;br /&gt;
В качестве мутации можно либо использовать одну из операций, приведённых ниже, либо случайно (н-р, равновероятно) выбирать одну из нескольких таких операций.&lt;br /&gt;
=== Разбиения, слияния и переназначения ===&lt;br /&gt;
В этом разделе приведён ряд мутаций, предполагающих целочисленное кодирование особи.&lt;br /&gt;
Общим свойством этих операций является необходимость выбрать один, два или более кластеров, над которыми операции производятся. Делать это можно либо '''случайно''' (''unguided''), либо '''выборочно''' (''guided'') на основе той или иной характеристики кластера (''interestingness'') - например, расстояний объектов до центроида, плотности объектов в кластере и т.п.&lt;br /&gt;
* '''разбиение кластера''' (''split-gene'') - выбранный кластер делится вдоль $N-1$-мерной поверхности (н-р, гиперплоскости; для двухмерного случая это прямая) на два новых. Гиперплоскость можно задать:&lt;br /&gt;
** случайно на основе выпуклой оболочки кластера;&lt;br /&gt;
** случайно по направлению, а по положению - выборочно на основе индуцированной функции распределения (или гистограммы) положения объектов кластера вдоль оси, перпендикулярной гиперплоскости;&lt;br /&gt;
** детерминированно как медиану между центроидом кластера и самой отдалённым от центроида объектом.&lt;br /&gt;
* '''слияние двух кластеров''' (''merge-gene'') - выбранные два кластера объединяются в один.&lt;br /&gt;
* '''удаление кластера''' - все объекты выбранного кластера переназначаются в другие кластеры на основе расстояния до них.&lt;br /&gt;
* '''переназначение элементов кластера''' (''remove-and-reclassify'') - небольшой набор объектов выбранного кластера переназначается в другие кластеры. Набор объектов и целевой кластер можно задать случайно или выборочно на основе расстояний до соседних кластеров.&lt;br /&gt;
Следует заметить, что если алгоритм использует хотя бы одну операцию разбиения, то должна быть включена в рассмотрение какая-нибудь операция слияния, и наоборот. Иначе количество кластеров либо уменьшится до двух, либо возрастёт до $N$.&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70856</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70856"/>
				<updated>2019-04-07T23:08:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера'''.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров - таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;br /&gt;
== Представление особи ==&lt;br /&gt;
Различные мутации, кроссоверы и способы инициализации особи предполагают некоторое её представление в памяти. Например:&lt;br /&gt;
* '''целочисленное кодирование по меткам кластеров''' (''label-based integer encoding'') - для каждого объекта в выборке его кластер задаётся непосредственно. Таким образом, вся особь - это массив из $N$ чисел, соответствующих кластерам элементов выборки размера $N$.&lt;br /&gt;
* '''решётчатое кодирование''' - для каждого вещественного признака (''feature'') объектов одного кластера задаются верхняя и нижняя граница. Таким образом, область одного кластера $f$-мерной выборки ограничивается $f$-мерным гиперкубом.&lt;br /&gt;
* '''вещественное кодирование''' (''real encoding'') - для каждого кластера $f$-мерной выборки задаётся его ''центроид'' - синтезированный объект, определяемый его координатами в пространстве выборки. Принадлежность объекта к кластеру определяется центроидом, который ближе всего к объекту согласно используемой метрике. Вся особь определяется вещественным вектором размера $k \cdot f$.&lt;br /&gt;
* '''бинарное кодирование''' (''binary encoding'') - то же самое, что и вещественное кодирование, но в качестве центроида используется элемент выборки (''прототип''). Таким образом, одна особь может быть представлена вектором из $N$ булевых значений, из которых $k$ истинных определяют прототипы соответствующих $k$ кластеров.&lt;br /&gt;
* '''древесное бинарное кодирование''' ('''tree-based binary encoding''') - по выборке строится [[Остовные деревья: определения, лемма о безопасном ребре|минимальное остовное дерево]]; особь кодируется вектором из $N-1$ булевых значений, среди которых $k-1$ истинное соответвует рёбрам остовного дерева, разделяющим кластеры.&lt;br /&gt;
== Мутации ==&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70845</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70845"/>
				<updated>2019-04-07T22:20:00Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''[[эволюционные алгоритмы]]''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
= Описание метода =&lt;br /&gt;
Для решения задачи кластеризации (hard clustering) эволюционный алгоритм использует:&lt;br /&gt;
* разбиения выборки в качестве '''особей''';&lt;br /&gt;
* индекс кластеризации в качестве '''целевой функции''';&lt;br /&gt;
* операции видоизменения разбиений в качестве '''мутаций''';&lt;br /&gt;
* операции комбинирования (&amp;quot;скрещивания&amp;quot;) разбиений в качестве '''кроссовера'''.&lt;br /&gt;
= Параметры эволюционного алгоритма =&lt;br /&gt;
Из описания выше следует, что эволюционный алгоритм кластеризации задаётся рядом гиперпараметров - таких как инициализация, применяемые мутации, схема самого алгоритма и т.п. Некоторые исследованные элементы конфигурации эволюционного алгоритма кластеризации приведены ниже.&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70841</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70841"/>
				<updated>2019-04-07T22:00:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Кластеризация#Постановка задачи кластеризации|Формулировка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[Кластеризация#Теорема невозможности Клейнберга|теорему Клейнберга]]); в связи с этим, многие разработанные [[Кластеризация#Методы кластеризации|методы и алгоритмы]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
Альтернативный подход заключается в задании [[Оценка качества в задаче кластеризации|индекса кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''эволюционные алгоритмы''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
==  ==&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70840</id>
		<title>Эволюционные алгоритмы кластеризации</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=70840"/>
				<updated>2019-04-07T21:59:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: Новая страница: «Кластеризация#Постановка задачи кластеризации в о…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Формулировка задачи кластеризации|Кластеризация#Постановка задачи кластеризации]] в общем случае не задаёт условие близости относительно метрики (см. [[теорему Клейнберга|Кластеризация#Теорема невозможности Клейнберга]]); в связи с этим, многие разработанные [[методы и алгоритмы|Кластеризация#Методы кластеризации]] решения задачи кластеризации предполагают применимость конкретной меры близости объектов для анализа рассматриваемой выборки. &lt;br /&gt;
Альтернативный подход заключается в задании [[индекса кластеризации|Оценка качества в задаче кластеризации]] как меры близости объектов внутри кластеров и использовании универсального метода для оптимизации этого индекса; '''эволюционные алгоритмы''' являются одним из семейств таких универсальных методов.&lt;br /&gt;
==  ==&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=33624</id>
		<title>Дискретная математика, алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=33624"/>
				<updated>2013-11-15T19:00:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Схемы из функциональных элементов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
*[[Композиция отношений|Композиция отношений, степерь отношения, обратное отношение]]&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;
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]&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;
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]&lt;br /&gt;
*[[Полином Жегалкина | Полином Жегалкина, преобразование Мёбиуса]]&lt;br /&gt;
*[[Полные системы функций. Теорема Поста о полной системе функций]]&lt;br /&gt;
*[[Представление функции класса DM с помощью медианы]]&lt;br /&gt;
*[[Пороговая функция]]&lt;br /&gt;
&lt;br /&gt;
== Схемы из функциональных элементов ==&lt;br /&gt;
*[[Реализация булевой функции схемой из функциональных элементов]]&lt;br /&gt;
*[[Метод синтеза схем Лупанова]]&lt;br /&gt;
*[[Cумматор]]&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;
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&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;
* [[Алгоритм LZW]]&lt;br /&gt;
* [[Алгоритмы LZ77 и LZ78]]&lt;br /&gt;
* [[Преобразование Барроуза-Уиллера | Преобразование Барроуза-Уиллера и обратное ему]]&lt;br /&gt;
* [[Преобразование MTF]]&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;
* [[Получение номера по объекту]]&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;
* [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]&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;
* [[Производящая функция]]&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;
*[[Задача о наибольшей общей подпоследовательности]]&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;
*[[Задача о расстоянии Дамерау-Левенштейна]]&lt;br /&gt;
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]&lt;br /&gt;
*[[Задача о наибольшей подпоследовательности-палиндроме]]&lt;br /&gt;
*[[Meet-in-the-middle]]&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;
*[[Формула Байеса]]&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;
*[[Симуляция одним распределением другого]]&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;
* [[Фундаментальная матрица]]&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;]]&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;
* [[Стек]]&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;
&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;
== Система непересекающихся множеств ==&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;
* [[2-3 дерево]]&lt;br /&gt;
* [[B-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[Декартово дерево]]&lt;br /&gt;
* [[Декартово дерево по неявному ключу]]&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Рандомизированное бинарное дерево поиска]]&lt;br /&gt;
* [[Дерево ван Эмде Боаса]]&lt;br /&gt;
* [[Список с пропусками]]&lt;br /&gt;
* [[Fusion tree]]&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;
* [[Несогласованные поддеревья. Реализация массового обновления]]&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;
&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;
&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;
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]&lt;br /&gt;
* [[Теорема о нижней оценке для сортировки сравнениями]]&lt;br /&gt;
* [[Сортировка подсчетом]]&lt;br /&gt;
* [[Сортировка подсчетом сложных объектов]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Карманная сортировка]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики за линейное время]]&lt;br /&gt;
* [[Сортировка Хана]]&lt;br /&gt;
* [[Timsort]]&lt;br /&gt;
&lt;br /&gt;
== Сортирующие сети ==&lt;br /&gt;
* [[Сортирующие сети]]&lt;br /&gt;
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]&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;
* [[Поиск с помощью золотого сечения]]&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;
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]&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;
* [[Дерево, эквивалентные определения]]&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;
* [[Точка сочленения, эквивалентные определения]]&lt;br /&gt;
* [[Мост, эквивалентные определения]]&lt;br /&gt;
* [[k-связность]]&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;
* [[Количество помеченных деревьев]]&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;
* [[Теорема Хватала]]&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;
* [[Формула Эйлера]]&lt;br /&gt;
* [[Непланарность K5 и K3,3|Непланарность &amp;lt;tex&amp;gt;K_5&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K_{3,3}&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;
* [[Двудольные графы и раскраска в 2 цвета]]&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;
* [[Теорема Брукса]]&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;
* [[Использование обхода в глубину для поиска компонент сильной связности]]&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;
* [[Алгоритм Дейкстры]]&lt;br /&gt;
* [[Алгоритм Флойда]]&lt;br /&gt;
* [[Алгоритм A*]]&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;
* [[Алгоритм двух китайцев]]&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;
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]&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;
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]&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;]]&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;
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&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;
* [[Основные определения, связанные со строками]]&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;
* [[Префикс-функция]]&lt;br /&gt;
* [[Алгоритм Кнута-Морриса-Пратта]]&lt;br /&gt;
* [[Z-функция]]&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;
&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;
&lt;br /&gt;
== Задача о наименьшем общем предке ==&lt;br /&gt;
* [[Метод двоичного подъема]]&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Решение RMQ с помощью разреженной таблицы]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)&lt;br /&gt;
* [[Алгоритм Шибера-Вишкина]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA]]&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;
* [[Аксиоматизация матроида базами]]&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;
* [[Лемма о единственном паросочетании в графе замен]]&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;
&lt;br /&gt;
== Теория расписаний ==&lt;br /&gt;
* [[Классификация задач]]&lt;br /&gt;
* [[Методы решения задач теории расписаний]]&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[P1sumu|&amp;lt;tex&amp;gt;1 \mid \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripi1sumwc|&amp;lt;tex&amp;gt;1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ridipi1|&amp;lt;tex&amp;gt;1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc | &amp;lt;tex&amp;gt;1 \mid outtree \mid \sum w_i C_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt;1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1precpmtnrifmax|&amp;lt;tex&amp;gt;1 \mid prec, pmtn, r_i \mid f_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1precripi1Lmax|&amp;lt;tex&amp;gt;1 \mid prec; r_i; p_i = 1 \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P2precpi1Lmax|&amp;lt;tex&amp;gt;P2 \mid prec, p_i = 1 \mid L_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[PpmtnriLmax|&amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt;Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnriLmax|&amp;lt;tex&amp;gt;Q \mid pmtn, r_{i} \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QSumCi|&amp;lt;tex&amp;gt;Q\mid\mid\sum{C_i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[R2Cmax|&amp;lt;tex&amp;gt;R2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[F2Cmax|&amp;lt;tex&amp;gt;F2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Fpij1sumwu|&amp;lt;tex&amp;gt;F \mid p_{ij} = 1 \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[O2Cmax|&amp;lt;tex&amp;gt;O2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt;O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2ni2Cmax|&amp;lt;tex&amp;gt;J2 \mid n_{i} \le 2 \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2pij1Lmax| &amp;lt;tex&amp;gt;J2\mid p_{ij} = 1\mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33622</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=33622"/>
				<updated>2013-11-15T18:59:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: переименовал Теорема о нижней границе для количества элементов в схеме в Метод синтеза схем Лупанова&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = n \cdot \frac{2^n}{n^2} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B5%D0%B9_%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B2_%D1%81%D1%85%D0%B5%D0%BC%D0%B5&amp;diff=33623</id>
		<title>Теорема о нижней границе для количества элементов в схеме</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B5%D0%B9_%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B2_%D1%81%D1%85%D0%B5%D0%BC%D0%B5&amp;diff=33623"/>
				<updated>2013-11-15T18:59:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: переименовал Теорема о нижней границе для количества элементов в схеме в Метод синтеза схем Лупанова&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Метод синтеза схем Лупанова]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=33109</id>
		<title>Дискретная математика, алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=33109"/>
				<updated>2013-10-16T15:15:29Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Схемы из функциональных элементов */ добавил ссылку&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
*[[Степень отношений]]&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;
*[[Отношение порядка]]&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;
*[[Полные системы функций. Теорема Поста о полной системе функций]]&lt;br /&gt;
*[[Сокращенная и минимальная ДНФ]]&lt;br /&gt;
*[[Минимизация ДНФ с помощью покрытий гиперкуба и карт Карно]]&lt;br /&gt;
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]&lt;br /&gt;
*[[Преобразование Мёбиуса для получения коэффициентов полинома Жегалкина]]&lt;br /&gt;
*[[Представление функции класса DM с помощью медианы]]&lt;br /&gt;
*[[Пороговая функция]]&lt;br /&gt;
&lt;br /&gt;
== Схемы из функциональных элементов ==&lt;br /&gt;
*[[Реализация булевой функции схемой из функциональных элементов]]&lt;br /&gt;
*[[Теорема о нижней границе для количества элементов в схеме]]&lt;br /&gt;
*[[Cумматор]]&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;
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
*[[Представление вещественных чисел]]&lt;br /&gt;
*[[Представление символов, таблицы кодировок]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы сжатия ==&lt;br /&gt;
*[[Алгоритм Хаффмана]]&lt;br /&gt;
*[[Алгоритм LZW]]&lt;br /&gt;
*[[Алгоритмы LZ77 и LZ78]]&lt;br /&gt;
*[[Преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Обратное преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Преобразование MTF]]&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;
*[[Лексикографический порядок]]&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;
*[[Цепные коды]]&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;
*[[Задача о минимуме/максимуме скалярного произведения]]&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;
*[[Задача о расстановке знаков в выражении]]&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;
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]&lt;br /&gt;
*[[Задача о расстоянии Дамерау-Левенштейна]]&lt;br /&gt;
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]&lt;br /&gt;
*[[Задача о наибольшей подпоследовательности-палиндроме]]&lt;br /&gt;
*[[Meet-in-the-middle]]&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;
*[[Формула Байеса]]&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;
*[[Симуляция одним распределением другого]]&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;
* [[Фундаментальная матрица]]&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;]]&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;
* [[Стек]]&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;
&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;
== Система непересекающихся множеств ==&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;
* [[2-3 дерево]]&lt;br /&gt;
* [[B-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[Декартово дерево]]&lt;br /&gt;
* [[Декартово дерево по неявному ключу]]&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Рандомизированное бинарное дерево поиска]]&lt;br /&gt;
* [[Дерево ван Эмде Боаса]]&lt;br /&gt;
* [[Список с пропусками]]&lt;br /&gt;
* [[Fusion tree]]&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;
* [[Несогласованные поддеревья. Реализация массового обновления]]&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;
&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;
&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;
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]&lt;br /&gt;
* [[Теорема о нижней оценке для сортировки сравнениями]]&lt;br /&gt;
* [[Сортировка подсчетом]]&lt;br /&gt;
* [[Сортировка подсчетом сложных объектов]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Карманная сортировка]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики за линейное время]]&lt;br /&gt;
* [[Сортировка Хана]]&lt;br /&gt;
* [[Timsort]]&lt;br /&gt;
&lt;br /&gt;
== Сортирующие сети ==&lt;br /&gt;
* [[Сортирующие сети]]&lt;br /&gt;
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]&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;
* [[Поиск с помощью золотого сечения]]&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;
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]&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;
* [[Дерево, эквивалентные определения]]&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;
* [[Точка сочленения, эквивалентные определения]]&lt;br /&gt;
* [[Мост, эквивалентные определения]]&lt;br /&gt;
* [[k-связность]]&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;
* [[Количество помеченных деревьев]]&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;
* [[Теорема Хватала]]&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;
* [[Формула Эйлера]]&lt;br /&gt;
* [[Непланарность K5 и K3,3|Непланарность &amp;lt;tex&amp;gt;K_5&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K_{3,3}&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;
* [[Двудольные графы и раскраска в 2 цвета]]&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;
* [[Теорема Брукса]]&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;
* [[Использование обхода в глубину для поиска компонент сильной связности]]&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;
* [[Алгоритм Дейкстры]]&lt;br /&gt;
* [[Алгоритм Флойда]]&lt;br /&gt;
* [[Алгоритм A*]]&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;
* [[Алгоритм двух китайцев]]&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;
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]&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;
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]&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;]]&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;
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&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;
* [[Основные определения, связанные со строками]]&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;
* [[Префикс-функция]]&lt;br /&gt;
* [[Алгоритм Кнута-Морриса-Пратта]]&lt;br /&gt;
* [[Z-функция]]&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;
&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;
&lt;br /&gt;
== Задача о наименьшем общем предке ==&lt;br /&gt;
* [[Метод двоичного подъема]]&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Решение RMQ с помощью разреженной таблицы]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)&lt;br /&gt;
* [[Алгоритм Шибера-Вишкина]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA]]&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;
* [[Аксиоматизация матроида базами]]&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;
* [[Лемма о единственном паросочетании в графе замен]]&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;
&lt;br /&gt;
== Теория расписаний ==&lt;br /&gt;
* [[Классификация задач]]&lt;br /&gt;
* [[Методы решения задач теории расписаний]]&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[P1sumu|&amp;lt;tex&amp;gt;1 \mid \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripi1sumwc|&amp;lt;tex&amp;gt;1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ridipi1|&amp;lt;tex&amp;gt;1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc | &amp;lt;tex&amp;gt;1 \mid outtree \mid \sum w_i C_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt;1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1precpmtnrifmax|&amp;lt;tex&amp;gt;1 \mid prec, pmtn, r_i \mid f_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1precripi1Lmax|&amp;lt;tex&amp;gt;1 \mid prec; r_i; p_i = 1 \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P2precpi1Lmax|&amp;lt;tex&amp;gt;P2 \mid prec, p_i = 1 \mid L_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[PpmtnriLmax|&amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt;Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnriLmax|&amp;lt;tex&amp;gt;Q \mid pmtn, r_{i} \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QSumCi|&amp;lt;tex&amp;gt;Q\mid\mid\sum{C_i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[R2Cmax|&amp;lt;tex&amp;gt;R2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[F2Cmax|&amp;lt;tex&amp;gt;F2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Fpij1sumwu|&amp;lt;tex&amp;gt;F \mid p_{ij} = 1 \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[O2Cmax|&amp;lt;tex&amp;gt;O2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt;O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2ni2Cmax|&amp;lt;tex&amp;gt;J2 \mid n_{i} \le 2 \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2pij1Lmax| &amp;lt;tex&amp;gt;J2\mid p_{ij} = 1\mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33103</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=33103"/>
				<updated>2013-10-15T20:11:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ расписываем вывод&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = n \cdot \frac{2^n}{n^2} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33102</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=33102"/>
				<updated>2013-10-15T19:54:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Разделение на полосы */ пояснение пояснения&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33101</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=33101"/>
				<updated>2013-10-15T19:25:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Разделение на полосы */ очепятка&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33100</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=33100"/>
				<updated>2013-10-15T19:24:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Разделение на полосы */ пояснение определения сорта&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33099</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=33099"/>
				<updated>2013-10-15T19:21:28Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Функция для одной полосы */ запятая&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33098</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=33098"/>
				<updated>2013-10-15T19:16:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Мультиплексор и дешифратор */ про число элементов&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33097</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=33097"/>
				<updated>2013-10-15T19:06:46Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: формулировка&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, ..., 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(\frac{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|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33096</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=33096"/>
				<updated>2013-10-15T19:05:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ поправки в формулах&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&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 \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{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(\frac{p}{n} \cdot 2^n\right) = O\left(\frac{2^n}{s}\right) = O\left(\frac{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(\frac{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(\frac{2^n}{n - 2\log_2 n}\right) + O\left(\frac{2^n}{n}\right) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O\left(\frac{2^n}{n}\right)&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33079</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=33079"/>
				<updated>2013-10-10T16:55:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ лучше пусть здесь будет&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;. ''(здесь &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt; - фиксированные параметры, см. п. 3.1)''&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33078</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=33078"/>
				<updated>2013-10-10T16:53:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Вывод исходной функции для фиксированной части параметров */&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33077</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=33077"/>
				<updated>2013-10-10T16:51:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Вывод исходной функции для фиксированной части параметров */ тире&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
''Здесь и далее фиксированные параметры функции будут обозначаться &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt;, а переменные {{---}} &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33076</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=33076"/>
				<updated>2013-10-10T16:51:14Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Вывод исходной функции для фиксированной части параметров */ пояснение про переменные и фиксированные&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
''Здесь и далее фиксированные параметры функции будут обозначаться &amp;lt;tex&amp;gt;\sigma_i&amp;lt;/tex&amp;gt;, а переменные - &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33061</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=33061"/>
				<updated>2013-10-09T20:26:39Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ вдруг кто не понял&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33060</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=33060"/>
				<updated>2013-10-09T20:03:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ 's&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., 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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33059</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=33059"/>
				<updated>2013-10-09T20:02:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ тех&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова, Lupanov's &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''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33058</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=33058"/>
				<updated>2013-10-09T20:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ английский термин&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова, Lupanov's (k, s)-representation).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33057</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=33057"/>
				<updated>2013-10-09T19:58:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Представление функции */ таки увеличим&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33056</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=33056"/>
				<updated>2013-10-09T19:57:06Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Представление функции */ ещё пунктуация&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|380px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33055</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=33055"/>
				<updated>2013-10-09T19:56:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Представление функции */ пунктуация&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|380px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33054</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=33054"/>
				<updated>2013-10-09T19:55:26Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: подгоняем размер изображения&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|380px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33053</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=33053"/>
				<updated>2013-10-09T19:52:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: небольшая поправка&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33052</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=33052"/>
				<updated>2013-10-09T19:50:48Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: продолжаем перечитывать рецензию&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|450px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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; выходов. На все остальные выходы элемент выдаёт 0.&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, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lupanov_scheme.png|550px|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
&lt;br /&gt;
Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Lupanov_fig1.png&amp;diff=33051</id>
		<title>Файл:Lupanov fig1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Lupanov_fig1.png&amp;diff=33051"/>
				<updated>2013-10-09T19:41:17Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: загружена новая версия «Файл:Lupanov fig1.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Иллюстрация к представлению булевой функции, использующемуся в доказательстве теоремы о нижней границе для количества элементов в схеме&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Lupanov_fig1.png&amp;diff=33050</id>
		<title>Файл:Lupanov fig1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Lupanov_fig1.png&amp;diff=33050"/>
				<updated>2013-10-09T19:37:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: загружена новая версия «Файл:Lupanov fig1.png»: так, вроде, лучше смотрится&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Иллюстрация к представлению булевой функции, использующемуся в доказательстве теоремы о нижней границе для количества элементов в схеме&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Lupanov_fig1.png&amp;diff=33049</id>
		<title>Файл:Lupanov fig1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Lupanov_fig1.png&amp;diff=33049"/>
				<updated>2013-10-09T19:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: загружена новая версия «Файл:Lupanov fig1.png»: Пояснение про значение в ячейке&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Иллюстрация к представлению булевой функции, использующемуся в доказательстве теоремы о нижней границе для количества элементов в схеме&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=33048</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=33048"/>
				<updated>2013-10-09T19:23:00Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: получил рецензию&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, ..., 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(\frac{2^n}{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1. Строки индексируются значениями первых &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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:Mux_demux.png|500px|thumb|right|Мультиплексор слева, дешифратор справа]]&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;
[[Файл:Lupanov_scheme.png|550px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A = O(2^k) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C = O(p \cdot 2^{n - k}) = O(\frac{2^n}{s}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D = O(2^{n - k}) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) = O(\frac{2^n}{n})&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32908</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=32908"/>
				<updated>2013-09-27T19:30:59Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Разделение на полосы */ викификация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(p) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A \sim 2^k \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32907</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=32907"/>
				<updated>2013-09-26T19:49:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Представление функции */ поправил формулировку&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A \sim 2^k \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32906</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=32906"/>
				<updated>2013-09-26T18:58:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Разделение на полосы */ ещё одна плохо читаемая формула&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A \sim 2^k \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32905</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=32905"/>
				<updated>2013-09-26T18:57:29Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ убрал масло масляное&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A \sim 2^k \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему c числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32904</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=32904"/>
				<updated>2013-09-26T18:56:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: повысил читаемость формул&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex&amp;gt;p=\left\lceil\frac{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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_A \sim 2^k \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi=&amp;quot;145&amp;quot;&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему с итоговым числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32903</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=32903"/>
				<updated>2013-09-26T18:45:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ небольшое пояснение&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex&amp;gt;p=\lceil\frac{2^k}{s}\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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n})&amp;lt;/tex&amp;gt; складывается из столбцов соответствующих сортов в полосах,&lt;br /&gt;
&amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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&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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда число элементов в блоках&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_A \sim 2^k \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему с итоговым числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32902</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=32902"/>
				<updated>2013-09-26T18:45:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ оформил более аккуратно&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex&amp;gt;p=\lceil\frac{2^k}{s}\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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n})&amp;lt;/tex&amp;gt; складывается из столбцов соответствующих сортов в полосах,&lt;br /&gt;
&amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., 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&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;quot;1&amp;quot; на &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, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. '''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_A \sim 2^k \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему с итоговым числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32901</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=32901"/>
				<updated>2013-09-26T18:34:05Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: /* Доказательство */ очень небольшая правка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex&amp;gt;p=\lceil\frac{2^k}{s}\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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n})&amp;lt;/tex&amp;gt; складывается из столбцов соответствующих сортов в полосах,&lt;br /&gt;
&amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., x_k)&amp;lt;/tex&amp;gt; в качестве двоичного представления числа.&lt;br /&gt;
&lt;br /&gt;
Число элементов &amp;lt;tex&amp;gt;L_A \sim 2^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&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;quot;1&amp;quot; на &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;
Число элементов &amp;lt;tex&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^{s}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* '''Блок C''' {{---}} схемная реализация всех &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Число элементов &amp;lt;tex&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. &lt;br /&gt;
&lt;br /&gt;
Число элементов &amp;lt;tex&amp;gt;L_D \sim 2^{n - k}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_A \sim 2^{\log_2 n} \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_B &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_C \sim \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему с итоговым числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''''ч.т.д.'''''&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	<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=32900</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=32900"/>
				<updated>2013-09-26T18:29:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dimatomp: оформил литературу&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Формулировка ==&lt;br /&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, ..., 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) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Представление функции ==&lt;br /&gt;
[[Файл:Lupanov fig1.png|330px|thumb|right|Рис. 1. Описываемая таблица истинности, разделённая на полосы]]&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;
Для удобства дальнейших рассуждений представим булеву функцию в виде таблицы, изображённой на рис. 1.&lt;br /&gt;
* '''По горизонтали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(\sigma_1, \sigma_2, ..., \sigma_k, x_{k + 1}, x_{k + 2}, ..., x_n)&amp;lt;/tex&amp;gt; (здесь и далее &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; {{---}} фиксированное значение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} переменное);&lt;br /&gt;
* '''По вертикали''' на ней представлены все значения &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, легко заметить, что значение &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; находится на пересечении строки &amp;lt;tex&amp;gt;x_1, x_2, ..., x_k&amp;lt;/tex&amp;gt; и столбца &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&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;). Пронумеруем полосы сверху вниз от 1 до &amp;lt;tex&amp;gt;p=\lceil\frac{2^k}{s}\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) \leq 2^s&amp;lt;/tex&amp;gt; (для последней &amp;lt;tex&amp;gt;t(i) \leq 2^{s'}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Функция для одной полосы ==&lt;br /&gt;
[[Файл:Lupanov_fig2.png|330px|thumb|right|Рис. 2. Значения, возвращаемые функцией &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, ..., \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, ..., x_k) = \begin{cases} &lt;br /&gt;
    \beta_{jl}&amp;amp; , \mbox{if } \exists l \in [1; s]~(x_1, x_2, ..., x_k) = (\sigma_1^l, \sigma_2^l, ..., \sigma_k^l) \\&lt;br /&gt;
    0&amp;amp;, \mbox{else}&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, ..., 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; для этой строки. Если же эта строка находится в другой полосе, то функция вернёт 0. Иллюстрация принципа работы функции &amp;lt;tex&amp;gt;g_{ij}&amp;lt;/tex&amp;gt; приведена на рис. 2.&lt;br /&gt;
=== Вывод исходной функции для фиксированной части параметров ===&lt;br /&gt;
Поскольку изначальный столбец &amp;lt;tex&amp;gt;(\sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n})&amp;lt;/tex&amp;gt; складывается из столбцов соответствующих сортов в полосах,&lt;br /&gt;
&amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_{n}) = \bigvee\limits_{i = 1}^p g_{ij_i}(x_1, x_2, ..., 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}, ..., \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;
'''Мультиплексор''' {{---}} логический элемент, получающий на вход&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;
'''Дешифратор''' {{---}} логический элемент, получающий на вход&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; выходов. На все остальные выходы элемент выдаёт 0.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Mux_demux.png|400px|thumb|right|Рис. 3. Мультиплексор слева, дешифратор справа]]&lt;br /&gt;
Иллюстрации элементов приведены на рис. 3.&lt;br /&gt;
&lt;br /&gt;
Можно доказать, что оба элемента представимы схемами с числом элементов &amp;lt;tex&amp;gt;\sim 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;
[[Файл:Lupanov_scheme.png|400px|thumb|right|Иллюстрация частного случая представления Лупанова, описанного здесь]] &lt;br /&gt;
В качестве доказательства ниже будет предложен вариант такой схемы для произвольной функции &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/tex&amp;gt; (представление Лупанова). Для удобства поделим схему на блоки:&lt;br /&gt;
* '''Блок A''' {{---}} дешифратор, которому на вход подали 1 и &amp;lt;tex&amp;gt;(x_1, x_2, ..., x_k)&amp;lt;/tex&amp;gt; в качестве двоичного представления числа.&lt;br /&gt;
&lt;br /&gt;
Число элементов &amp;lt;tex&amp;gt;L_A \sim 2^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&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;quot;1&amp;quot; на &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;
Число элементов &amp;lt;tex&amp;gt;L_B \leq (s - 1) \cdot (t(1) + t(2) + ... + t(p)) &amp;lt; sp \cdot 2^{s}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* '''Блок C''' {{---}} схемная реализация всех &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Число элементов &amp;lt;tex&amp;gt;L_C \sim p \cdot 2^{n - k} = \frac{2^n}{s}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* '''Блок D''' {{---}} мультиплексор, получающий на вход все &amp;lt;tex&amp;gt;f(x_1, x_2, ..., x_k, \sigma_{k + 1}, \sigma_{k + 2}, ..., \sigma_n)&amp;lt;/tex&amp;gt; и параметры функции &amp;lt;tex&amp;gt;x_{k + 1}, x_{k + 2}, ..., x_n&amp;lt;/tex&amp;gt; в качестве двоичного представления числа. &lt;br /&gt;
&lt;br /&gt;
Число элементов &amp;lt;tex&amp;gt;L_D \sim 2^{n - k}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Результат работы схемы''''' {{---}} вывод мультиплексора.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;s = [n - 2\log_2 n]&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;k = [\log_2 n]&amp;lt;/tex&amp;gt;. Тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_A \sim 2^{\log_2 n} \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_B &amp;lt; sp \cdot 2^s = 2^{k + s} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_C \sim \frac{2^n}{s} \sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;L_D \sim 2^{n - k} = \frac{2^n}{n}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого, имеем схему с итоговым числом элементов &amp;lt;tex&amp;gt;\sim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt;size_B (f) \lesssim \frac{2^n}{n}&amp;lt;/tex&amp;gt;, '''ч.т.д.'''&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Multiplexer Wikipedia {{---}} Multiplexer]&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Яблонский С.В. Введение в дискретную математику {{---}} М.:&amp;quot;Наука&amp;quot;, 1986 {{---}} стр. 361&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Схемы из функциональных элементов ]]&lt;/div&gt;</summary>
		<author><name>Dimatomp</name></author>	</entry>

	</feed>