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

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

Paper ready for next delivery

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