Опубликован: 24.04.2007 | Доступ: свободный | Студентов: 722 / 35 | Оценка: 4.60 / 4.30 | Длительность: 25:56:00
Специальности: Программист
Лекция 2:

Схемы из функциональных элементов

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Аннотация: Рассматриваются базовые логические схемы, наборы схем, вопросы их полноты, сложность булевой функции относительно базовых наборов схем, теоремы оценки сложности

Формулы представляют собой способ записи композиции функций. Например, если мы сначала применяем функцию f, а потом функцию g, это можно записать формулой g(f(x)). Но есть и другой способ: можно изобразить каждую функцию в виде прямоугольника с "входом"и "выходом"и соединить выход функции f со входом функции g (рис. 2.1).

Два способа изобразить композицию

Рис. 2.1. Два способа изобразить композицию

Такое представление отнюдь не является чисто теоретическим. В течении нескольких десятков лет электронная промышленность выпускает микросхемы, которые выполняют логические операции. Такая микросхема имеет электрические контакты, напряжение на которых кодирует логические значения И и Л. Конкретное напряжение зависит от типа схемы, но обычно это несколько вольт, и высокий потенциал (относительно заземления) считается единицей, а низкий нулем.

Одной из типичных схем является схема И-НЕ, она имеет два входа и один выход. Сигнал на выходе является отрицанием конъюнкции сигналов на входе. Другими словами, на выходе появляется высокий потенциал (сигнал 1 ) тогда и только тогда, когда на одном из входов потенциал низкий ( 0 ). Из такой схемы легко получить схему НЕ (изменяющую уровень сигнала на противоположный), соединив проводом два входа. При этом на оба входа поступает один и тот же сигнал, и операция И его не меняет ( p\land p=p ), а НЕ меняет на противоположный. Взяв два элемента И-НЕ и используя второй из них в качестве элемента НЕ, инвертирующего сигнал с выхода первого элемента, получаем схему, которая реализует функцию И. А если поставить два элемента НЕ перед каждым из входов элемента И-НЕ, получим схему, реализующую функцию ИЛИ: \lnot (\lnot
p\land\lnot q) \hm\leftrightarrow (p\lor q).

Теорема 3 о полноте системы связок теперь гарантирует, что любую булеву функцию можно реализовать в виде схемы. Надо иметь в виду, однако, что предлагаемая в ее доказательстве конструкция (дизъюнктивная нормальная форма) имеет скорее теоретический интерес, поскольку приводит к схемам очень большого размера даже для простых функций (если число аргументов велико). Например, схема, сравнивающая два 16 -битных числа, должна иметь 32 входа и поэтому в ее реализации с помощью дизъюнктивной нормальной формы будет порядка 2^{32} элементов — что мало реально. (Между тем такую схему можно построить гораздо проще, из нескольких сотен элементов.)

Поэтому вопрос о том, сколько элементов нужно для реализации той или иной функции, представляет большой интерес — как практический, так и философский. (Одна из центральных проблем математики и информатики, так называемая "проблема перебора", может быть сформулирована в этих терминах.)

Мы сейчас дадим более формальное определение схемы и реализуемой ей булевой функции. Но прежде всего ответим на такой вопрос — почему мы вообще говорим о схемах? Ведь можно записать композицию булевых функций в виде формулы, не будет ли это то же самое?

Оказывается, не совсем, и разницу легко увидеть на примере (рис. 2.2).

Элемент входит в формулу дважды

Рис. 2.2. Элемент входит в формулу дважды

Здесь один и тот же элемент схемы ( f ) приходится указывать в формуле дважды, поскольку его выход используется в качестве входа двух других элементов. Схемы, в которых такого ветвления нет (на практике ветвление вполне возможно, хотя и ограничено "нагрузочной способностью выхода", как говорят инженеры), как раз и соответствуют формулам. Но в общем случае полученная из данной схемы формула может быть длинной, даже если схема содержит небольшое число элементов, поскольку число копий может расти экспоненциально с ростом глубины схемы.

Хотя идея образования схемы из функциональных элементов, реализующих булевы функции, достаточно наглядна, дадим более формальное определение. Фиксируем некоторый набор булевых функций B. Пусть имеется n булевых (принимающих значения 0 и 1 ) переменных x_1,\dots,x_n, называемых входами. Пусть также имеется некоторое число булевых переменных y_1,\dots,y_m, называемых проводниками. Пусть для каждого проводника схемы задана булева функция из B, выражающая его значение через другие проводники и входы. При этом требуется, чтобы не было циклов (цикл образуется, когда y_i зависит от y_j, которое зависит от y_k, \dots, которое зависит от y_i ). Пусть, кроме того, среди проводников выделен один, называемый выходом. В таком случае говорят, что задана схема из функциональных элементов в базисе B с n входами. Число m называют размером схемы. (С точки зрения инженера размер — это число использованных элементов, а базис B — это ассортимент доступных ему элементов.)

Отсутствие циклов гарантирует, что есть проводник, зависящий только от входов (иначе можно было бы найти цикл: возьмем какой-то проводник, затем возьмем тот проводник, от которого он зависит и т. д.). Значение этого проводника, таким образом, однозначно определяется сигналами на входах. Среди оставшихся проводников также нет цикла, поэтому можно найти один из них, зависящий только от уже известных, и определить его значение. Перенумеровав проводники в таком порядке, мы можем записать последовательность присваиваний

\begin{aligned}
    y_1:= f_1(\dots);\\
    y_2:= f_2(\dots);\\
\dots\dots\dots\dots\\
    y_m:= f_m(\dots),\\
\end{aligned}
в правых частях которых стоят функции из B, примененные ко входам и уже найденным значениям. При этом можно считать, что результат схемы есть y_m (все последующие присваивания уже не нужны). Такая программа определяет y_m при известных значениях входов, и тем самым вычисляет некоторую булеву функцию.

Теперь набор булевых функций B можно назвать полным, если любая булева функция может быть задана схемой из B -элементов (существует программа, ее вычисляющая, при этом в правых частях присваиваний стоят функции из B ). Ясно, что это определение полноты равносильно прежнему, то есть возможности записать булеву функцию в виде формулы со связками из B (как мы говорили, разница только в том, что один и тот же элемент будет фигурировать в формуле многократно).

Сложностью булевой функции f относительно B называют минимальный размер схемы из B - элементов, вычисляющей функцию f. Его обозначают \size_B(f).

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >