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
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}
26\newcommand*\BDD{\emph{BDD}}
27\newcommand*\BDDs{\emph{BDDs}}
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]
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}
[130]73
[137]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}
[130]106
[137]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};
[138]119\node (FT) [leaf, below=of 4-1]{};
[137]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]167\caption{Voorbeeld: twee \BDDs die samengesmolten worden door gebruik te
[164]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}
[137]172
[130]173\section{Introductie BDD}
[167]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,
[164]178bijvoorbeeld $f \wedge g$ of $f \oplus g$.
[127]179De reden dat dit zo belangrijk is komt met het feit dat het combineren van
[167]180\BDDs aan de basis staat van het uitdrukken van complexe systemen door
[164]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.
[126]184
[167]185\section{Samenvoegen van \BDD}
[126]186\label{werking}
[167]187De term voor het samenvoegen van \BDD structuren zullen we smelten
[164]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:
[127]193\begin{equation}
[138]194\label{melt-eq}
[127]195\alpha \diamond \alpha' = \left\{
196\begin{array}{l l}
[164]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'. \\
[127]200\end{array} \right.
201\end{equation}
[126]202
[164]203De oplettende lezer zal zien dan als je Formule~\ref{melt-eq} toepast op de
204bladeren er door samenvoegen van de bladeren ---zie bijvoorbeeld
[167]205voorbeeld in Hoofstuk~\ref{voorbeeldSamenvoegen}--- in plaats van de twee bladeren
[128]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}
[167]213Om er weer een ``valide'' \BDD van te maken zullen deze bladeren vervangen
[165]214worden door het uitgerekende blad. Als bijvoorbeeld de $\diamond$ operatie
215bedoelt is voor een \emph{EN} operatie, wordt de blad-rij in~\ref{bladeren}
[167]216vervangen door de rij $\bot, \bot, \bot, \top$. Nu is het zaak het \BDD
[165]217te vereenvoudigen, om zo duplicaat-bladeren te snoeien (\emph{pruning}).
[128]218
[164]219De kracht van deze aanpak zit hem in de generieke $\diamond$
[128]220operatie. Het maakt niet uit welke booleaanse operatie er gebruikt wordt aan
[167]221het eind van de rit. De gegeneerde gesmolten \BDD is geldig voor alle.
[128]222
[167]223Door de \BDDs achter elkaar te plakken kan met maximaal $B(f)B(g)$ knopen
224een \BDD voor $f \diamond g$ gerealiseerd worden.
[165]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.
[128]228
[139]229Het smelten ligt aan de basis van de daadwerkelijke synthese. Een simpele
[165]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
[167]235vak-website~\cite{SCA2010} heeft een referentie naar algoritme $R$
236\url{http://www.liacs.nl/~kosters/semcom/tomb.pdf} welke behandeld wordt
[165]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)$.
[131]240
[165]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
[131]243$B(f)B(g)$ knopen in geheugen gehouden moet wordt zal dit problemen opleveren
[165]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.
[131]247
248
[128]249\section{Voorbeelden}
250\label{voorbeeld}
[167]251\subsection{Product-groei in synthese van \BDD}
[128]252\label{voorbeeldSamenvoegen}
[165]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}
[167]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\\ \\
[165]265Neem aan dat $f(x_{1},\dots,x_{n})$ en $g(x_{1},\dots,x_{n})$ de respectieve
[166]266\emph{profielen} (\emph{profiles})~\cite[p.~101]{DK2009}
[167]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
[165]269$(b'_{0},\dots,b_{n})$ hebben, en de respectieve \emph{quasi-profielen}
[166]270(\emph{quasi-profiles})~\cite[p.~103]{DK2009}
[167]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})$.
[132]273
[167]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
[166]280mogelijkerwijs gemaakt kan worden van de functies $f$ en $g$.
[167]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})$.
[166]286
[167]287Elke bead van de orde $n - j$ in het geordende paar $(f,g)$ zal zich
[165]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
[138]290(bead,geen-bead) of (geen-bead, bead) $b_{j}(q_{j}' - b_{j}') + (q_{j} -
[165]291b{j})b_{j}'$.
[132]292
[138]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.
[133]296
[167]297\subsection{Som-groei in synthese van \BDD}
[128]298\label{voorbeeldPlakken}
[166]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}.
[126]301
[166]302\begin{equation}
[167]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}
[166]308\end{equation}
[167]309In Vergelijking~\ref{eq:opgave63} zijn $f$ en $g$ gedefinieerd, waarbij $\oplus$
310de binary operator \emph{XOR} is en $n = 2m + 2^{m}$.
[132]311
[135]312Dan is $B(f) = 2^{m+2}-1 \approx 4n$, $B(g) = 2^{m+1}-2^{m} \approx 3n$ en $B(g
[166]313\land f) = 2^{m+1}+2^{m-1}-1 \approx 2n^{2}$. Om aan deze reeksen te
[138]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
[166]316opgemerkt worden dat zowel $f$ als $g$ $2^m$-weg
[138]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
[165]319$(0,1,2,2,\dots,2^{m-1},2^{m-1},1,1,\dots,1,2$. Dit optellen en afschatten wordt
[166]320(zie ook~\cite[p.~82]{DK2009}) $B(f) = 2^{m+2} - 1 \approx 4n$ en $B(g) =
3212^{m+1} - 1 \approx 3n$. \\
[138]322\\
[166]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
[138]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}
[166]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
[138]334$x_{2m+j} \land \overline x_{2m+k}$ of $\overline x_{2m+j} \land x_{2m+k}$ voor
[139]335$1 \leq j \le k \leq 2^m$ tezamen met de originelen $x_{2m+j}$ en $\overline
[166]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$.
[132]340
[133]341
342
343
[135]344
[126]345\begin{thebibliography}{}
[164]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.
[130]352\bibitem[SCA2010]{SCA2010} Lecture Seminar Combinatorial Algorithms,
[164]353\url{http://www.liacs.nl/~kosters/semcom/}, W.A. (Walter) Kosters, LIACS,
354Spring 2010.
[130]355
[2]356\end{thebibliography}
357\end{document}
Note: See TracBrowser for help on using the repository browser.