Тверской государственный университет
Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 1684 / 243 | Оценка: 5.00 / 5.00 | Длительность: 14:18:00
ISBN: 978-5-94774-714-0
Специальности: Программист, Математик
Лекция 3:

Упорядоченные бинарные диаграммы решений (УБДР)

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Построение сокращенных УБДР по формулам

Алгоритм СОКРАЩЕНИЕ-УБДР позволяет построить сокращенную УБДР для функции f, по любой другой ее УБДР. Но как построить УБДР, если f задана, например, с помощью формулы? Можно, конечно, попытаться построить полное бинарное дерево решений, объединить в нем все листья с меткой 0 в один сток, а листья с меткой 1 - в другой. Затем применить к получившейся УБДР алгоритм СОКРАЩЕНИЕ-УБДР. Но этот подход годится только для функций от небольшого числа переменных, так как полное БДР для f(x1, ..., xn) будет содержать 2n листьев.

Другой подход связан с построением УБДР "сверху-вниз". Объясним его для естественного порядка переменных: x1< x2 < ... < xn.

Начнем построение с корня, помеченного x1. Рассмотрим две остаточные функции: f0(x1, ..., xn)=f(0, x2, ..., xn) и f1(x2, ..., xn)=f(1, x2, ..., xn). Если они одинаковы, то f не зависит от x1 и тогда изменим метку у корня на x2. Если обе функции f0 и f1 существенно зависят от x2, то для каждой из них добавляем вершину, помеченную x2, и далее реализуем по индукции. Если f_{k} (k \in  \{ 0, 1\} ) не зависит от переменных x2,... , xj, но зависит существенно от xj+1, то добавляем вершину, помеченную xj+1, и проводим в нее ребро с меткой k из вершины, соответствующей f . Пусть для некоторого i уже построены вершины для всех различных остаточных функций вида f_{\sigma 1 \dots  \sigma i}\} (x_{i+1}, \dots  , x_{n})= f(\sigma _{1}\dots  \sigma _{i}, x_{i+1}, \dots  , x_{n}), существенно зависящих от xi. Для каждой из них получим две остаточные функции f\_ \{ \sigma _{1}\dots  \sigma _{i} 0\} ( x_{i+2}, \dots  , x_{n})= f(\sigma _{1}\dots  \sigma _{i}, 0, x_{i+2}, \dots  , x_{n}) и f\_ \{ \sigma _{1}\dots  \sigma _{i} 1\} ( x_{i+2}, \dots  , x_{n})= f(\sigma _{1}\dots  \sigma _{i}, 1, x_{i+2}, \dots  , x_{n}). Затем выберем из множества этих функций разные, для каждой из них добавим в диаграмму вершину, помеченную xi+1, и проведем в них соответствующие ребра из вершин, помеченных x_{i}. Продолжая построение, дойдем до функций от 1-ой переменной xn и до констант, для которых минимальные реализации очевидны.

Пример 3.2. Рассмотрим, например, функцию f(x1, x2, x3, x4), заданную формулой (x_{1} \wedge  x_{2} \wedge  x_{4}) \vee  (\neg  x_{1} \wedge  x_{2} \wedge  \neg  x_{4}) \vee  (\neg  x_{2} \wedge  x_{3}) \vee  (\neg  x_{2} \wedge  x_{4}), и построим для нее УБДР относительно порядка x1 < x2 < x3 <x4, используя описанную выше процедуру.

Вначале создадим корень, помеченный x1, и рассмотрим остаточные функции, получающиеся при x1=0 и x1 =1. Имеем

f_0( x_2, x_3, x_4)= ( x_2 \wedge \neg x_4)\vee (\neg x_2 \wedge x_3) \vee (\neg x_2 \wedge x_4),\\
f_1( x_2, x_3, x_4)= ( x_2 \wedge  x_4)\vee (\neg x_2 \wedge x_3) \vee (\neg x_2 \wedge x_4).\\

Они разные и обе существенно зависят от x2. Поэтому добавим для каждой из них вершину, помеченную x2. Затем для каждой из них определим остаточные функции, получающиеся при x2=0 и x2 =1. Получим

f_{00}( x_3, x_4)= (x_3  \vee  x_4),\\
f_{01}(  x_3, x_4)=  \neg x_4,\\
f_{10}( x_3, x_4)= (x_3  \vee  x_4),\\
f_{11}(  x_3, x_4)=   x_4.

Так как f00=f10, а f01 и f11 от x3 не зависят, то нам потребуется только одна вершина, помеченая x3. Она будет представлять функцию f_{00}=f_{10}=(x_{3}  \vee   x_{4}). При x3=0 она превращается в x4, а при x3=1 равна константе 1. В результате получается УБДР Df, показанная на рис.3.6.


Рис. 3.6.

Задачи

Задача 3.1. Докажите, что совершенная, сокращенная и минимальная ДНФ функции odd(X1,X2,..., Xn) совпадают и состоят из 2n-1 элементарных конъюнкций длины n.

Задача 3.2. Докажите лемму 3.2 возвратной индукцией по i.

Задача 3.3. Используя лемму 3.2, докажите утверждение 2 теоремы 3.2.

Задача 3.4. Постройте минимальные УБДР для двуместных функций: x \wedge  y,   x \vee  y,   x + y,  x \to  y, x|y.

Задача 3.5. Постройте минимальные УБДР для функции

f(x_1, x_2, x_3, x_4, x_5, x_6)= (x_1\wedge x_2) +( x_3\wedge x_4) +( x_5\wedge x_6)

относительно двух упорядочений переменных:

  • x1 < x2 < x3 < x4 < x5 < x6 и
  • x1 < x3 < x5 < x2 < x4 < x6.

Задача 3.6. Пороговая функция Tnk от n переменных с порогом k выдает 1, если во входном наборе имеется не менее k единиц: T_{n}^{k}(x_{1},x_{2}, \dots , x_{n}) = 1 \Leftrightarrow  x_{1} + x_{2} + \dots  + x_{n} \ge  k.

  • Постройте минимальные УБДР для пороговых функций T32, T42, T53.
  • Зависит ли сложность минимальной УБДР для пороговых функций от порядка переменных?
  • Оцените сложность минимальной УБДР для пороговой функции Tnk.

Задача 3.7. Выберите подходящий порядок переменных и постройте для него минимальные УБДР, реализующие функции из задач 12.5 и 12.6.

Задача 3.8. Как мы видели, логические схемы естественным образом реализуются в виде неветвящихся программ. Наоборот, для деревьев решений и УБДР естественным программным представлением являются ветвящиеся программы, включающие лишь условные операторы вида if ... then ... else ... с тестами вида "x = 0?" и "x = 1?" (они соответствуют внутренним вершинам диаграмм) и операторы присвоения значения 0 или 1 результату (они соответствуют вершинам- стокам ).

Напишите ветвящиеся программы, вычисляющие функции, представляемые УБДР D2 на рис. 3.3 и Df на рис.3.6.

< Лекция 2 || Лекция 3: 123 || Лекция 4 >