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

Last change on this file since 249 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
RevLine 
[2]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}
[137]15\usepackage{subfig}
16\usepackage{tikz}
17\usetikzlibrary{scopes}
18\usetikzlibrary{positioning}
[2]19
[167]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}
[169]26\newcommand*\BDD{\emph{BDD} }
27\newcommand*\BDDs{\emph{BDDs} }
[167]28
[2]29\author{Rick van der Zwet, Universiteit Leiden}
[126]30\title{BDD synthese}
[2]31\author{Rick van der Zwet\\
[126]32 \texttt{<hvdzwet@liacs.nl>}}
[2]33\date{\today}
34
35\begin{document}
36
37\maketitle
38
39\section{Inleiding}
[130]40De hierin besproken inhoud is een samenvatting gemaakt van pagina 86--88 en de
[164]41daarin genoemde opgave 60 en 63 uit het college boek~\cite{DK2009} naar
[130]42aanleiding van het vak Seminar Combinatorial Algorithms 2010~\cite{SCA2010}.
[137]43\begin{figure}[htbp]
[169]44\caption{fig:samenvoegen}
[137]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}
[130]74
[137]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}
[130]107
[137]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};
[138]120\node (FT) [leaf, below=of 4-1]{};
[137]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}
[167]168\caption{Voorbeeld: twee \BDDs die samengesmolten worden door gebruik te
[164]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
[169]172de bladeren (zie vergelijking~\ref{bladeren}) te vereenvoudigen.} \end{figure}
[137]173
[130]174\section{Introductie BDD}
[167]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,
[164]179bijvoorbeeld $f \wedge g$ of $f \oplus g$.
[127]180De reden dat dit zo belangrijk is komt met het feit dat het combineren van
[167]181\BDDs aan de basis staat van het uitdrukken van complexe systemen door
[164]182middel van gecombineerde simpele functies. In Hoofdstuk~\ref{werking} zal deze
[169]183techniek uitgelegd worden, het zogenoemde \emph{smelten} (\emph{melding}), dat
184in Hoofdstuk~\ref{voorbeeld} toegepast zal worden in voorbeelden.
[126]185
[167]186\section{Samenvoegen van \BDD}
[126]187\label{werking}
[169]188De term voor het samenvoegen van \BDD structuren zullen we \emph{smelten}
[164]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
[169]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:
[127]195\begin{equation}
[138]196\label{melt-eq}
[127]197\alpha \diamond \alpha' = \left\{
198\begin{array}{l l}
[164]199(v, l \diamond l', h \diamond h'), & \mathrm{als~} v = v'; \\
200(v, l \diamond \alpha', h \diamond \alpha'), & \mathrm{als~} v < v'; \\
[169]201(v', \alpha \diamond l', \alpha \diamond h'), & \mathrm{als~} v > v'. \\
[127]202\end{array} \right.
203\end{equation}
[169]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.
[126]206
[164]207De oplettende lezer zal zien dan als je Formule~\ref{melt-eq} toepast op de
208bladeren er door samenvoegen van de bladeren ---zie bijvoorbeeld
[169]209voorbeeld in Figuur~\ref{fig:samenvoegen}--- in plaats van de twee bladeren
[128]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}
[167]217Om er weer een ``valide'' \BDD van te maken zullen deze bladeren vervangen
[165]218worden door het uitgerekende blad. Als bijvoorbeeld de $\diamond$ operatie
[169]219bedoelt is voor een \emph{EN} operatie, wordt de blad-rij in~(\ref{bladeren})
[167]220vervangen door de rij $\bot, \bot, \bot, \top$. Nu is het zaak het \BDD
[165]221te vereenvoudigen, om zo duplicaat-bladeren te snoeien (\emph{pruning}).
[128]222
[164]223De kracht van deze aanpak zit hem in de generieke $\diamond$
[128]224operatie. Het maakt niet uit welke booleaanse operatie er gebruikt wordt aan
[167]225het eind van de rit. De gegeneerde gesmolten \BDD is geldig voor alle.
[128]226
[167]227Door de \BDDs achter elkaar te plakken kan met maximaal $B(f)B(g)$ knopen
228een \BDD voor $f \diamond g$ gerealiseerd worden.
[165]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.
[128]232
[139]233Het smelten ligt aan de basis van de daadwerkelijke synthese. Een simpele
[165]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
[169]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
[165]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)$.
[131]243
[165]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
[131]246$B(f)B(g)$ knopen in geheugen gehouden moet wordt zal dit problemen opleveren
[165]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.
[131]250
251
[128]252\section{Voorbeelden}
253\label{voorbeeld}
[167]254\subsection{Product-groei in synthese van \BDD}
[128]255\label{voorbeeldSamenvoegen}
[165]256Het volgende voorbeeld is een uitwerking van opgave 60~\cite[p.~130]{DK2009}
[169]257de offici\"{e}le uitwerking is te vinden op \cite[p.~195]{DK2009}
[167]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
[169]262\circled{1} en elke \circled{k} knoop heeft (voor $k < n$) takken naar twee
[167]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
[169]266wel op dat reductie toegepast moet worden op tweetallen knopen waarvan de
267\emph{HOOG} en \emph{LAAG} pointers gelijk zijn.
[167]268\\ \\
[165]269Neem aan dat $f(x_{1},\dots,x_{n})$ en $g(x_{1},\dots,x_{n})$ de respectieve
[166]270\emph{profielen} (\emph{profiles})~\cite[p.~101]{DK2009}
[169]271$(b_{0},\dots,b_{n})$ ---waar $b_{k}$ met $0 \le k < n$ de knopen zijn. Die splitsen
[167]272op variable $f(x_{k+1})$ en $b_{n}$ het aantal bladeren is--- en
[165]273$(b'_{0},\dots,b_{n})$ hebben, en de respectieve \emph{quasi-profielen}
[166]274(\emph{quasi-profiles})~\cite[p.~103]{DK2009}
[167]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})$.
[132]277
[169]278Om te laten zien dat de gesmolten $f \diamond g$ het aantal knopen
[167]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
[166]284mogelijkerwijs gemaakt kan worden van de functies $f$ en $g$.
[169]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
[167]289$(q_{0},\dots,q_{n}) - (b_{0},\dots,b_{n})$.
[166]290
[167]291Elke bead van de orde $n - j$ in het geordende paar $(f,g)$ zal zich
[165]292bevinden in een van de volgende groepen; (a) de standaard-combinatie van de
[169]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} -
[165]295b{j})b_{j}'$.
[132]296
[138]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.
[133]300
[167]301\subsection{Som-groei in synthese van \BDD}
[128]302\label{voorbeeldPlakken}
[166]303Het volgende voorbeeld is een uitwerking van opgave 63~\cite[p.~131]{DK2009}
[169]304de offici\"{e}le uitwerking is te vinden op \cite[p.~195]{DK2009}.
[126]305
[169]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
[166]312\begin{equation}
[167]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}
[166]318\end{equation}
[132]319
[135]320Dan is $B(f) = 2^{m+2}-1 \approx 4n$, $B(g) = 2^{m+1}-2^{m} \approx 3n$ en $B(g
[166]321\land f) = 2^{m+1}+2^{m-1}-1 \approx 2n^{2}$. Om aan deze reeksen te
[138]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
[166]324opgemerkt worden dat zowel $f$ als $g$ $2^m$-weg
[169]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
[166]328(zie ook~\cite[p.~82]{DK2009}) $B(f) = 2^{m+2} - 1 \approx 4n$ en $B(g) =
3292^{m+1} - 1 \approx 3n$. \\
[138]330\\
[169]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---
[166]335in de vorm van $x_1 \dots
[138]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}
[166]338= q$, waar $0 \leq p, q \le 2^m$ en $p=q$ dan en slechts als $x_1 = x_3 = \dots
[169]339= x_{2m-1} = 0$. Dit zorgt dat het eerste deel ---het stuk voor de punt
[166]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
[138]343$x_{2m+j} \land \overline x_{2m+k}$ of $\overline x_{2m+j} \land x_{2m+k}$ voor
[139]344$1 \leq j \le k \leq 2^m$ tezamen met de originelen $x_{2m+j}$ en $\overline
[166]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$.
[132]349
[133]350
351
352
[135]353
[126]354\begin{thebibliography}{}
[164]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.
[130]361\bibitem[SCA2010]{SCA2010} Lecture Seminar Combinatorial Algorithms,
[164]362\url{http://www.liacs.nl/~kosters/semcom/}, W.A. (Walter) Kosters, LIACS,
363Spring 2010.
[130]364
[2]365\end{thebibliography}
366\end{document}
Note: See TracBrowser for help on using the repository browser.