source: liacs/SCA2010/BDD/report.tex

Last change on this file 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.