source: liacs/SCA2010/BDD/report.tex@ 291

Last change on this file since 291 was 169, checked in by Rick van der Zwet, 14 years ago

Aanpassingen naar aanleiding van Verbeteringen en suggesties Hendrik Jan Hoogeboom

File size: 14.7 KB
Line 
1%
2% $Id: report.tex 571 2008-04-20 17:31:04Z rick $
3%
4
5\documentclass[12pt,a4paper]{article}
6
7\frenchspacing
8\usepackage[english,dutch]{babel}
9\selectlanguage{dutch}
10\usepackage{graphicx}
11\usepackage{url}
12\usepackage{multicol}
13\usepackage{fancybox}
14\usepackage{amssymb,amsmath}
15\usepackage{subfig}
16\usepackage{tikz}
17\usetikzlibrary{scopes}
18\usetikzlibrary{positioning}
19
20\newcommand*\circled[1]{%
21 \tikz[baseline=(C.base)]\node[draw,circle,inner sep=0.5pt](C) {$#1$};\!
22}
23\newcommand*\squared[1]{%
24 \tikz[baseline=(C.base)]\node[draw,rectangle,rounded corners,inner sep=0.5pt](C) {$#1$};\!
25}
26\newcommand*\BDD{\emph{BDD} }
27\newcommand*\BDDs{\emph{BDDs} }
28
29\author{Rick van der Zwet, Universiteit Leiden}
30\title{BDD synthese}
31\author{Rick van der Zwet\\
32 \texttt{<hvdzwet@liacs.nl>}}
33\date{\today}
34
35\begin{document}
36
37\maketitle
38
39\section{Inleiding}
40De hierin besproken inhoud is een samenvatting gemaakt van pagina 86--88 en de
41daarin genoemde opgave 60 en 63 uit het college boek~\cite{DK2009} naar
42aanleiding van het vak Seminar Combinatorial Algorithms 2010~\cite{SCA2010}.
43\begin{figure}[htbp]
44\caption{fig:samenvoegen}
45\begin{tikzpicture}[on grid]
46\tikzstyle{true}=[]
47\tikzstyle{false}=[dashed]
48\tikzstyle{state}=[circle, draw]
49\tikzstyle{leaf}=[rectangle, draw]
50\begin{scope}[xshift=0cm,node distance=10mm and 10mm]
51\node (1) [state]{1};
52\node (2) [state, below=of 1]{2};
53\node (3) [state, below=of 2]{3};
54\node (4) [state, below=of 3]{4};
55\node (F) [leaf, below left=of 4]{$\bot$};
56\node (T) [leaf, below right=of 4]{$\top$};
57\path[-]
58(1) edge[false] (2)
59(1) edge[true, bend left=45] (3)
60(2) edge[false, bend right=45] (F)
61(2) edge[true] (3)
62(3) edge[false] (4)
63(3) edge[true, bend left=45] (T)
64(4) edge[true] (T)
65(4) edge[false] (F)
66;
67\draw[left, inner sep=6mm]
68(1) node {$\alpha$}
69(2) node {$\beta$}
70(3) node {$\gamma$}
71(4) node {$\delta$}
72;
73\end{scope}
74
75\begin{scope}[xshift=9cm,node distance=10mm and 10mm]
76\node (1) [state]{1};
77\node (2-1) [state, below left=of 1]{2};
78\node (2-2) [state, below right=of 1]{2};
79\node (3) [state, below left=of 2-2]{3};
80\node (4-1) [state, below left=of 3]{4};
81\node (4-2) [state, below right=of 3]{4};
82\node (F) [leaf, below=of 4-1]{$\bot$};
83\node (T) [leaf, below=of 4-2]{$\top$};
84\path[-]
85(1) edge[false] (2-1)
86(1) edge[true] (2-2)
87(2-1) edge[false] (3)
88(2-1) edge[true, bend left=70] (T)
89(2-2) edge[false, bend left=45] (T)
90(2-2) edge[true] (3)
91(3) edge[false] (4-1)
92(3) edge[true] (4-2)
93(4-1) edge[false] (T)
94(4-1) edge[false] (F)
95(4-2) edge[false] (T)
96(4-2) edge[true] (F)
97;
98\draw[left, inner sep=4mm]
99(1) node {$\omega$}
100(2-1) node {$\chi$}
101(2-2) node {$\psi$}
102(3) node {$\varphi$}
103(4-1) node {$\tau$}
104(4-2) node {$\upsilon$}
105;
106\end{scope}
107
108\begin{scope}[xshift=5cm,yshift=-5cm, node distance=15mm and 20mm]
109\node (1) [state]{1};
110\node (2-1) [state, below left=of 1]{2};
111\node (2-2) [state, below right=of 1]{2};
112\node (3-1) [state, below left=of 2-1]{3};
113\node (3-2) [state, below left=of 2-2]{3};
114\node (3-3) [state, below right=of 2-2]{3};
115\node (4-1) [state, below left=of 3-1]{4};
116\node (4-2) [state, below=of 3-1]{4};
117\node (4-3) [state, below left=of 3-2]{4};
118\node (4-4) [state, below left=of 3-3]{4};
119\node (4-5) [state, below right=of 3-3]{4};
120\node (FT) [leaf, below=of 4-1]{};
121\node (FF) [leaf, below right=of 4-2]{};
122\node (TT) [leaf, below=of 4-4]{};
123\node (TF) [leaf, below=of 4-5]{};
124\path[-]
125(1) edge[false] (2-1)
126(1) edge[true] (2-2)
127(2-1) edge[false] (3-1)
128(2-1) edge[true] (3-2)
129(2-2) edge[false] (3-2)
130(2-2) edge[true] (3-3)
131(3-1) edge[false] (4-1)
132(3-1) edge[true] (4-2)
133(3-2) edge[false] (4-3)
134(3-2) edge[true,bend left=90] (TT)
135(3-3) edge[false] (4-4)
136(3-3) edge[true] (4-5)
137(4-1) edge[false] (FF)
138(4-1) edge[true] (FT)
139(4-2) edge[false] (FT)
140(4-2) edge[true] (FF)
141(4-3) edge[false] (FT)
142(4-3) edge[true] (TT)
143(4-4) edge[false] (FF)
144(4-4) edge[true] (TT)
145(4-5) edge[false] (TT)
146(4-5) edge[true] (TF)
147;
148\draw[left, inner sep=6mm]
149(1) node {$\alpha \diamond \omega$}
150(2-1) node {$\beta \diamond \chi$}
151(2-2) node {$\gamma \diamond \psi$}
152(3-1) node {$\bot \diamond \varphi$}
153(3-2) node {$\gamma \diamond \top$}
154(3-3) node {$\gamma \diamond \varphi$}
155(4-1) node {$\bot \diamond \tau$}
156(4-2) node {$\bot \diamond \upsilon$}
157(4-3) node {$\delta \diamond \top$}
158(4-4) node {$\delta \diamond \tau$}
159(4-5) node {$\top \diamond \upsilon$}
160(FF) node {$\bot \diamond \bot$}
161(FT) node {$\bot \diamond \top$}
162(TF) node {$\top \diamond \bot$}
163(TT) node {$\top \diamond \top$}
164;
165\end{scope}
166
167\end{tikzpicture}
168\caption{Voorbeeld: twee \BDDs die samengesmolten worden door gebruik te
169maken van formule~\ref{melt-eq}. Let er wel op dat dit voorbeeld geen
170ontbrekende laag van knopen heeft, waardoor knopen van alle niveaus beschikbaar
171zijn. Op het moment dat de $\diamond$ ingevuld gaat worden is het ook zaak om
172de bladeren (zie vergelijking~\ref{bladeren}) te vereenvoudigen.} \end{figure}
173
174\section{Introductie BDD}
175Synthese van een Binary Decision Diagram \BDD is een belangrijk
176\BDD algoritme~\cite[p.~86]{DK2009}. Het neemt in essentie een \BDD
177functie $f$ en combineert deze met een andere \BDD functie $g$
178zodanig dat er een nieuwe \BDD ontstaat voor een nieuwe functie,
179bijvoorbeeld $f \wedge g$ of $f \oplus g$.
180De reden dat dit zo belangrijk is komt met het feit dat het combineren van
181\BDDs aan de basis staat van het uitdrukken van complexe systemen door
182middel van gecombineerde simpele functies. In Hoofdstuk~\ref{werking} zal deze
183techniek uitgelegd worden, het zogenoemde \emph{smelten} (\emph{melding}), dat
184in Hoofdstuk~\ref{voorbeeld} toegepast zal worden in voorbeelden.
185
186\section{Samenvoegen van \BDD}
187\label{werking}
188De term voor het samenvoegen van \BDD structuren zullen we \emph{smelten}
189(\emph{melding}) noemen. Het werkt volgens de volgende principes. Men neme
190twee knopen $\alpha = (v,l,h)$ en $\alpha' = (v',l',h')$. De knoop $\alpha
191\diamond \alpha'$, het resultaat van de \emph{smelt} actie, de
192``\emph{emulsie}'' (\emph{meld}) van $\alpha$ en $\alpha'$, is dan als volgt
193gedefinieerd als $\alpha$ en $\alpha'$ niet beide bladeren (\emph{sinks})
194zijn:
195\begin{equation}
196\label{melt-eq}
197\alpha \diamond \alpha' = \left\{
198\begin{array}{l l}
199(v, l \diamond l', h \diamond h'), & \mathrm{als~} v = v'; \\
200(v, l \diamond \alpha', h \diamond \alpha'), & \mathrm{als~} v < v'; \\
201(v', \alpha \diamond l', \alpha \diamond h'), & \mathrm{als~} v > v'. \\
202\end{array} \right.
203\end{equation}
204Als we deze recursieve formule gebruiken op de wortels van twee \BDDs $f$ en
205$g$, vinden we een diagram dat het paar $(f,g)$ representeert.
206
207De oplettende lezer zal zien dan als je Formule~\ref{melt-eq} toepast op de
208bladeren er door samenvoegen van de bladeren ---zie bijvoorbeeld
209voorbeeld in Figuur~\ref{fig:samenvoegen}--- in plaats van de twee bladeren
210$\top$ en $\bot$, er nu vier bladeren mogelijk zijn:
211\begin{equation}
212\label{bladeren}
213\begin{array}{l l l l}
214\bot \diamond \bot, & \bot \diamond \top, & \top \diamond \bot, & \top \diamond \top\\
215\end{array}
216\end{equation}
217Om er weer een ``valide'' \BDD van te maken zullen deze bladeren vervangen
218worden door het uitgerekende blad. Als bijvoorbeeld de $\diamond$ operatie
219bedoelt is voor een \emph{EN} operatie, wordt de blad-rij in~(\ref{bladeren})
220vervangen door de rij $\bot, \bot, \bot, \top$. Nu is het zaak het \BDD
221te vereenvoudigen, om zo duplicaat-bladeren te snoeien (\emph{pruning}).
222
223De kracht van deze aanpak zit hem in de generieke $\diamond$
224operatie. Het maakt niet uit welke booleaanse operatie er gebruikt wordt aan
225het eind van de rit. De gegeneerde gesmolten \BDD is geldig voor alle.
226
227Door de \BDDs achter elkaar te plakken kan met maximaal $B(f)B(g)$ knopen
228een \BDD voor $f \diamond g$ gerealiseerd worden.
229Hoofdstuk~\ref{voorbeeldPlakken} is hier een voorbeeld van. In het meer algemene
230geval geldt meestal $B(f) + B(g)$ als bovengrens. Deze grenzen worden in
231Hoofdstuk~\ref{voorbeeldSamenvoegen} aangescherpt.
232
233Het smelten ligt aan de basis van de daadwerkelijke synthese. Een simpele
234impementatie kan gemaakt worden met algoritme $R$. (a) Maak eerst een reeks van
235alle knopen $\alpha$ in $f$ en $\alpha'$ in $g$ met knoop $\alpha
236\diamond \alpha'$ in rij $\alpha$ en column $\alpha'$. (b) Vervang de bladeren
237(zie Formule~\ref{bladeren}) door $\bot$ en $\top$, en (c) voer het algoritme
238$R$\footnote{Algoritme $R$ wordt niet in deze samenvatting behandeld; zie de
239vak-website~\cite{SCA2010} waar het algoritme $R$ behandeld wordt door Tom.} op
240$f \diamond g$. Op het eerste gezicht lijkt algoritme $R$ er ongeveer
241$B(f)B(g)$ operaties over te doen, maar doordat je onbereikbare knopen niet
242hoeft te evalueren zal je uitkomen op $B(f \diamond g)$.
243
244Deze ``truc'' zorgt ervoor dat de tijd binnen de perken blijft, maar er is dan
245nog niets gezegd over de hoeveelheid geheugen die nodig is. Omdat er nu
246$B(f)B(g)$ knopen in geheugen gehouden moet wordt zal dit problemen opleveren
247bij kleine en grotere bomen. Om deze effici\"{e}ntie aan te pakken is
248algoritme $S$\footnote{Algoritme $S$ wordt niet in deze samenvatting behandeld;
249het boek~\cite[p.~90-92]{DK2009} gaat hier echter uitvoerig op in.} ontworpen.
250
251
252\section{Voorbeelden}
253\label{voorbeeld}
254\subsection{Product-groei in synthese van \BDD}
255\label{voorbeeldSamenvoegen}
256Het volgende voorbeeld is een uitwerking van opgave 60~\cite[p.~130]{DK2009}
257de offici\"{e}le uitwerking is te vinden op \cite[p.~195]{DK2009}
258\\ \\
259Voorgaande aan de uitwerking is het belangrijk te weten wat een \emph{QDD} (aka
260\emph{quasi-BDD}~\cite[p.~102-103]{DK2009}) is. Elke functie heeft een unieke
261\emph{QDD} welke lijkt op een \BDD echter is de start-knoop altijd
262\circled{1} en elke \circled{k} knoop heeft (voor $k < n$) takken naar twee
263\squared{k+1} knopen. Wat in het kort wilt zeggen dat elk pad van de
264start-knoop naar de bladeren een lengte heeft van $n$. Om dat mogelijk te maken
265mogen de \emph{HOOG} en \emph{LAAG} takken van een \emph{QDD} gelijk zijn. Let
266wel op dat reductie toegepast moet worden op tweetallen knopen waarvan de
267\emph{HOOG} en \emph{LAAG} pointers gelijk zijn.
268\\ \\
269Neem aan dat $f(x_{1},\dots,x_{n})$ en $g(x_{1},\dots,x_{n})$ de respectieve
270\emph{profielen} (\emph{profiles})~\cite[p.~101]{DK2009}
271$(b_{0},\dots,b_{n})$ ---waar $b_{k}$ met $0 \le k < n$ de knopen zijn. Die splitsen
272op variable $f(x_{k+1})$ en $b_{n}$ het aantal bladeren is--- en
273$(b'_{0},\dots,b_{n})$ hebben, en de respectieve \emph{quasi-profielen}
274(\emph{quasi-profiles})~\cite[p.~103]{DK2009}
275$(q_{0},\dots,q_{n})$ ---waar $q_{k-1}$ met $0 < k < n$ het aantal \circled{k} knopen in
276de \emph{QDD} van $f$ is--- en $(q'_{0},\dots,q'_{n})$.
277
278Om te laten zien dat de gesmolten $f \diamond g$ het aantal knopen
279\begin{equation}
280\label{eq:knopen}
281B(f \diamond g) \leq \sum^{n}_{j=0}(q_{j}b'_{j}+b_{j}q'_{j}-b_{j}b'_{j})
282\end{equation}
283bevat moet gekeken worden naar het aantal \emph{beads}~\cite[p.~72]{DK2009} dat
284mogelijkerwijs gemaakt kan worden van de functies $f$ en $g$.
285Voor een willekeurige functie $f$ met als profiel $(b_{0},\dots,b_{n})$ en
286quasi-profiel $(q_{0},\dots,q_{n})$ geldt dat $B(b_{0},\dots,b_{n}) \leq
287B(q_{0},\dots,q_{n})$. En tevens dan $(b_{0},\dots,b_{n}) \subseteq
288(q_{0},\dots,q_{n})$. Hieruit volgt dat een niet-bead zich bevindt in
289$(q_{0},\dots,q_{n}) - (b_{0},\dots,b_{n})$.
290
291Elke bead van de orde $n - j$ in het geordende paar $(f,g)$ zal zich
292bevinden in een van de volgende groepen; (a) de standaard-combinatie van de
293$b_{j}b_{j}'$ geordende beads van $(f,g)$ of (b) de gegenereerde reeks van een
294(bead,niet-bead) of (niet-bead, bead) $b_{j}(q_{j}' - b_{j}') + (q_{j} -
295b{j})b_{j}'$.
296
297Dit bij elkaar optellen levert op $b_{j}b_{j}' + b_{j}(q_{j}' - b_{j}') +
298(q_{j} - b{j})b_{j}'$. Vereenvoudigen en de sommering is oefening voor de
299lezer.
300
301\subsection{Som-groei in synthese van \BDD}
302\label{voorbeeldPlakken}
303Het volgende voorbeeld is een uitwerking van opgave 63~\cite[p.~131]{DK2009}
304de offici\"{e}le uitwerking is te vinden op \cite[p.~195]{DK2009}.
305
306De $2^{m}$-weg multiplexer $M_{m}(y_{1},\dots,y_{m};y_{m+1},\dots,y_{m+2^{m}})$
307geeft bij input $y_{1},\dots,y_{m}$ de waarde van variable $y_{m+k}$ waarbij $k$
308het getal is gerepresenteerd door $y_{1},\dots,y_{m}$,
309zie~\cite[7.1.2-(31)]{DK2009-0}. Hiermee defineren we $\oplus$
310de binary operator \emph{XOR} en $n = 2m + 2^{m}$.
311
312\begin{equation}
313\begin{array}{lcl}
314f(x_{1},\dots,x_{n}) & = & M_{m}(x_{1} \oplus x_{2},x_{3} \oplus x_{4},\dots,x_{2m-1} \oplus x_{2m};x_{2m+1},\dots,x_{n}) \\
315g(x_{1},\dots,x_{n}) & = & M_{m}(x_{2} \oplus x_{3},\dots,x_{2m-2} \oplus x_{2m-1},x_{2m};\overline x_{2m+1},\dots,\overline x_{n}) \\
316\end{array}
317\label{eq:opgave63}
318\end{equation}
319
320Dan is $B(f) = 2^{m+2}-1 \approx 4n$, $B(g) = 2^{m+1}-2^{m} \approx 3n$ en $B(g
321\land f) = 2^{m+1}+2^{m-1}-1 \approx 2n^{2}$. Om aan deze reeksen te
322komen is het belangrijk eerst naar de profielen te kijken van $f$ en $g$ om
323daarna met sommering van deze tot de antwoorden te komen. Als eerste moet
324opgemerkt worden dat zowel $f$ als $g$ $2^m$-weg
325multiplexers zijn voor welke de profielen zijn
326$(1,2,2,\dots,2^{m-1},2^{m-1},2^m,1,1,\dots,1,2)$ respectievelijk \\
327$(0,1,2,2,\dots,2^{m-1},2^{m-1},1,1,\dots,1,2)$. Dit optellen en afschatten wordt
328(zie ook~\cite[p.~82]{DK2009}) $B(f) = 2^{m+2} - 1 \approx 4n$ en $B(g) =
3292^{m+1} - 1 \approx 3n$. \\
330\\
331De bereking $B(f \land g)$ (de werking van de multiplexer) wordt aanzienlijk
332moeilijker en zal daarom aangestipt worden. We constateren eerst dat er een
333unieke oplossing bestaat ---de oplossing kan aan een uniek getal
334gekoppeld worden namelijk de invoer---
335in de vorm van $x_1 \dots
336x_{2m}$ als je $((x_1 \oplus x_2)(x_3 \oplus x_4) \dots (x_{2m-1} \oplus
337x_{2m}))_{2} = p,((x_2 \oplus x_3) \dots (x_{2m-2} \oplus x_{2m-1})x_{2m})_{2}
338= q$, waar $0 \leq p, q \le 2^m$ en $p=q$ dan en slechts als $x_1 = x_3 = \dots
339= x_{2m-1} = 0$. Dit zorgt dat het eerste deel ---het stuk voor de punt
340komma--- van het profiel van $f \land g$ geschreven kan worden als $(1, 2, 4,\dots,
3412^{2m-2}, 2^{2m-1} - 2^{m-1})$.
342Het tweede deel is aanzienlijk moeilijker, het bestaat uit de sub-functies
343$x_{2m+j} \land \overline x_{2m+k}$ of $\overline x_{2m+j} \land x_{2m+k}$ voor
344$1 \leq j \le k \leq 2^m$ tezamen met de originelen $x_{2m+j}$ en $\overline
345x_{2m+j}$ voor $2 \leq j \leq 2^m$. Dat levert het profiel $(2^{m+1}-2,
3462^{m+1}-2, 2^{m+1}-4, 2^{m+1}-6, \dots, 4, 2, 2)$ op.
347Beide profielen bij elkaar optellen levert op $B(f \land g) = 2^{2m+1} +
3482^{m-1} -1 \approx 2n^2$.
349
350
351
352
353
354\begin{thebibliography}{}
355\bibitem[DK2009]{DK2009} D.E. Knuth. Bitwise Tricks \& Techniques; Binary
356Decision Diagrams, volume 4, Fascicle 1, of The Art of Computer Programming.
357Pearson Education, first edition, 2009.
358\bibitem[DK2009-Fas0]{DK2009-0} D.E. Knuth. Bitwise Tricks \& Techniques;
359Binary Decision Diagrams, volume 4, Fascicle 0, of The Art of Computer
360Programming. Pearson Education, first edition, 2009.
361\bibitem[SCA2010]{SCA2010} Lecture Seminar Combinatorial Algorithms,
362\url{http://www.liacs.nl/~kosters/semcom/}, W.A. (Walter) Kosters, LIACS,
363Spring 2010.
364
365\end{thebibliography}
366\end{document}
Note: See TracBrowser for help on using the repository browser.