• No results found

Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4

N/A
N/A
Protected

Academic year: 2022

Share "Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4"

Copied!
9
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Over binaire beslissingsdiagrammen naar Donald E. Knuth’s The Art of Computer

Programming, Volume 4

Jonathan K. Vis

1 Inleiding (blz. 70–72)

In dit essay behandelen we bladzijden 70–75 van Donald E. Knuth’s The Art of Computer Programming, Volume 4 [1].

Binaire beslissingsdiagrammen (Binary Decision Diagrams) worden veelal gebruikt voor de representatie van booleaanse functies. In Fig. 1 wordt een voorbeeld van een binair beslissingsdiagram weergegeven.

Figuur 1: Een binair beslissingsdiagram voor de mediaanfunctie (of meerder- heidsfunctie) van drie variabelen.

Een binair beslissingsdiagram (BDD)1 is een gerichte acyclische graaf.

Het BDD heeft een wortel : de bovenste knoop. De interne knopen heten vertakkingsknopen. Alle knopen zijn voorzien van een index welke corres- pondeert met een variabele. Zo correspondeert de wortel in Fig. 1 met de variabele x1. Iedere interne knoop heeft twee kinderen. E´en van de tak- ken wordt getekend met een stippellijn, we noemen deze LO. De andere tak

1We gebruiken de vaak voorkomende engelse afkorting. Als nederlands alternatief zou BBD gebruikt kunnen worden.

(2)

wordt getekend als een normale lijn, deze noemen we HI. In ieder BDD zijn er maximaal twee bladeren (sink nodes) welke corresponderen met waar en onwaar: > en ⊥. De waarden van de variabelen van de booleaanse functie bepalen een pad van de wortel naar een blad in het BDD. We vinden dit pad door voor iedere knoop met index j te kiezen voor de HI tak indien xj = 1 en als xj = 0 te LO tak te volgen.

We nemen aan dat een BDD aan twee eigenschappen voldoet. Als eerste moet een BDD geordend zijn. Er is een ordening op de variabelen gege- ven: x1, x2, . . . , xn. Een BDD is geordend wanneer voor iedere interne knoop geldt dat zijn kinderen corresponderen met een variabele met een hogere in- dex. Ten tweede moet een BDD gereduceerd zijn. Een BDD is gereduceerd indien er geen twee identieke knopen zijn; het is ook verboden dat de LO en HI takken naar dezelfde knoop leiden.

We defineren een booleaanse functie als een functie van de vorm:

f : {0, 1}n → {0, 1}. Waarin n variabelen (x1, . . . , xn) met gegeven waar- heidswaarden worden afgebeeld op waar en onwaar. Het is gebruikelijk een booleaanse functie te beschrijven door middel van een waarheidstabel. Hierin worden de afbeeldingen van alle mogelijke invoerwaarden, op lexicografische wijze geordend, als een string weergegeven. We zeggen dat een waarheids- tabel van de orde n is, waarbij n het aantal variabelen van de booleaanse functie is. De string heeft dan lengte 2n. De waarheidstabel van orde 3 be- horende bij de mediaanfunctie in Fig. 1 is 00010111.

Om de relatie tussen booleaanse functies en BDD’s duidelijk te maken gebruiken we de notie van bead (Ned. kraal). Een bead van orde n is een waarheidstabel van orde n welke geen kwadraat is. Met een kwadraat wordt een waarheidstabel bedoeld van de vorm αα voor een string α van lengte 2(n−1).

2 Subtabellen, subfuncties en de grootte van een BDD (blz. 72–73)

Een waarheidstabel τ van orde n > 0 is altijd van de vorm τ0τ1, waarbij τ0 en τ1 waarheidstabellen zijn van orde n − 1. De waarheidstabel τ komt

(3)

overeen met de functie f (x1, x2, . . . , xn) dan en slechts dan als τ0 overeen- komt met f (0, x2, . . . , xn) en τ1overeenkomt met f (1, x2, . . . , xn). De functies f (0, x2, . . . , xn) en f (1, x2, . . . , xn) noemen we subfuncties van f en τ0 en τ1

noemen we subtabellen van τ .

Subtabellen van subtabellen worden ook gezien als subtabellen en verder is een waarheidstabel een subtabel van zichzelf.

De beads van een booleaanse functie zijn de subtabellen van de correspon- derende waarheidstabel die geen kwadraat zijn. Als voorbeeld gebruiken we de mediaanfunctie in Fig. 1 met als waarheidstabel 00010111. De unieke sub- tabellen zijn {00010111, 0001, 0111, 00, 01, 10, 11, 0, 1}. De subtabellen 00 en 11 zijn duidelijk kwadratisch, dus de beads zijn {00010111, 0001, 0111, 01, 0, 1}.

Nu blijkt dat de knopen van een BDD ´e´en-op-´e´en overeenkomen met de beads van de functie. In Fig. 2 wordt hetzelfde BDD weergegeven als in Fig. 1, waarbij de knopen nu zijn voorzien van de corresponderende beads.

Figuur 2: Hetzelfde BDD als in Fig. 1 voorzien van beads.

De subtabellen van orde n+1−k, behorende bij een functie f , komen over- een met de subfuncties f (c1, . . . ck−1, xk, . . . xn) van dezelfde orde met vaste waarden voor de eerste k variabelen. De beads van orde n + 1 − k komen overeen met de subfuncties die afhankelijk zijn van hun eerste variabele xk. Dan is het duidelijk dat iedere bead overeenkomt met een vertakkingsknoop met index k in het BDD. En verder als een vertakkingsknoop met index k correspondeert met een waarheidstabel τ = τ0τ1, wijzen de LO en de HI takken naar de knopen die overeenkomen met de wortels van τ0en τ1. Dit be- wijst dat elke booleaanse functie precies ´e´en representatie heeft als een BDD.

De grootte van een BDD is gelijk aan het aantal beads van de functie.

We defineren B(f ) als het aantal beads van de booleaanse functie f . Voor het voorbeeld in Fig. 1 geldt B(f ) = 6.

(4)

We introduceren een groter voorbeeld om het idee te verduidelijken. Stel een booleaanse functie heeft als waarheidstabel 1100100100001111 en we wil- len het bijbehorend BDD construeren. Iedere waarheidstabel is een subtabel van zichzelf dus 1100100100001111 is een subtabel van orde 4. Het is duide- lijk dat deze subtabel geen kwadraat is (en dus een bead), dus de wortel van het BDD is een vertakkingsknoop2 met index 1. De subtabellen van orde 3 zijn 11001001 en 00001111, welke beide ook beads zijn. De LO en HI takken vanaf de wortel leiden naar vertakkingsknopen met index 2. De tweede orde subtabellen zijn {1100, 1001, 0000, 1111}. De eerste twee zijn beads, maar de laatsten zijn kwadratisch. De beads worden direct toegevoegd aan het BDD, maar de kwadraten worden gesplitst en meegenomen naar de volgende orde van subtabellen, waarbij duplicaten worden verwijderd. De subtabellen van orde 1 zijn {11, 00, 10, 01}, waarbij alleen de laatste twee (beads) worden toegevoegd. In de laatste stap blijven alleen de bladeren (0 en 1) over. Dit resulteert in het BDD in Fig. 3.

Figuur 3: Een BDD voor een functie van vier variabelen.

Merk op dat in Fig. 3 meerdere bladeren zijn getekend. Dit om de dia- grammen niet onnodig verwarrend te maken. De grootte van het BDD in Fig. 3 is 9 en niet 13.

Opgave 1 Hoeveel booleaanse functies f (x1, . . . , xn) corresponderen met een BDD ter grootte maximaal 3? 3

Oplossing opgave 1

Voor iedere f (x1, . . . , xn) bestaan twee functies met een BDD ter grootte 1.

2In de originele tekst staat branch in plaats van branch node.

3Komt overeen met Opgave 3 in de originele tekst.

(5)

Dit zijn de constante functies f (x1, . . . , xn) = 0 en f (x1, . . . , xn) = 1.

Het is ook duidelijk dat er geen BDD’s kunnen bestaan van grootte 2. Per definitie moeten er twee bladeren zijn (waar en onwaar). Deze kunnen echter niet beide bestaan zonder vertakkingsknoop of de samenhangendheid van de graaf te verbreken.

Voor grootte 3 zijn er 2n functies. Dit is eenvoudig in te zien door op te merken dat de BDD’s van de vorm van het BDD in Fig. 4 moeten zijn, waarbij uiteraard ook de verwisseling van de knopen van de LO en HI takken mogelijk is (de factor 2). Voor iedere variabele xj met 1 ≤ j ≤ n is deze

Figuur 4: BDD ter grootte 3.

vorm mogelijk.

Er zijn totaal dus 2n + 2 booleaanse functies f (x1, . . . , xn) met een BDD ter grootte maximaal 3.

In het algemeen kunnen BDD’s zeer groot worden. Vooralsnog beperken wij ons hier tot booleaanse functies met betrekkelijk kleine BDD’s.

3 Goede eigenschappen van BDD’s (blz. 74)

Indien wij een booleaanse functie f (x1, . . . , xn) beschouwen met een betrek- kelijk klein BDD, kunnen een aantal berekeningen eenvoudig en snel worden uitgevoerd. Hier een opsomming van een aantal van deze eigenschappen, waarbij een aantal slechts worden genoemd en niet nader worden toegelicht.4

• Wij zijn in staat f (x1, . . . , xn) te berekenen in maximaal n stappen door de paden in het BDD te volgen vanaf de wortel tot aan een blad.

• Wij kunnen eenvoudig de lexicografisch kleinste x = (x1, . . . , xn) vin- den, waarvoor geldt f (x) = 1. Beginnende in de wortel, nemen we

4Deze onderwerpen komen aan bod in een later stadium van het seminar.

(6)

steeds de LO tak tenzij deze direct leidt tot een onwaar blad. Dan geldt dat xj = 1 dan en slechts dan als een HI tak noodzakelijk is in een vertakkingsknoop met index j.

Als voorbeeld: het BDD in Fig. 1 geeft als resultaat x = 011 en het BDD in Fig. 3 geeft als resultaat x = 0000.

Er zijn maximaal n stappen benodigd, omdat vanaf elke vertakkings- knoop altijd een pad aanwezig is naar een waar blad. We kunnen dus het BDD van de wortel tot aan een blad volgen zonder ooit terug om- hoog te gaan.

Deze methode faalt indien f (x) = 0.

• Het is mogelijk het aantal oplossingen van de vergelijking f (x) = 1 te tellen. Zie Algoritme 1, in Paragraaf 4.

• We kunnen alle oplossingen van de vergelijking f (x) = 1 bepalen.

• Het is mogelijk het linear Boolean programming problem op te lossen.

• Na het toepassen van Algoritme 1 kunnen we snel random oplossingen voor f (x) = 1 genereren.

• We kunnen de voortbrengende functie berekenen.

• Wij zijn in staat het reliability polynomial te berekenen.

• Het is eenvoudig BDD’s te combineren.5

4 Het tellen van de oplossingen f (x) = 1 (blz.

75)

Voor het beschrijven van algoritmen voor BDD’s is het eenvoudig om ons voor te stellen dat een BDD een sequentiele lijst van (vertakkings)instructies is: Is−1, Is−2, . . . , I1, I0. Iedere Ik heeft de vorm (¯vk?lk : hk). Een instructie van de vorm (¯v?l : h) betekent: “als xv = 0 ga naar Il anders ga naar Ih”.

Als voorbeeld schrijven we hier het BDD in Fig. 3 als een lijst van instructies:

I8 = (¯1?7 : 6), I5 = (¯3?1 : 0), I2 = (¯4?0 : 1), I7 = (¯2?5 : 4), I4 = (¯3?3 : 2), I1 = (¯5?1 : 1), I6 = (¯2?0 : 1), I3 = (¯4?1 : 0), I0 = (¯5?0 : 0).

(7)

De instructies I1 en I0 corresponderen met de twee bladeren en hebben de

‘onmogelijke’ waarde n + 1 voor v0 en v1. We stellen dat de instructies geordend zijn volgens dezelfde wijze als het BDD. Voor de instructielijst wordt dat vertaald in de formele eisen lk < k, hk < k, vlk > vk en vhk > vk voor s > k ≥ 2. Er is ´e´en uitzondering op te merken. Indien de functie f (x) = 1 voor alle x (het BDD bestaat uit alleen een waar blad), dan stellen we s = 2. In alle andere gevallen s = B(f ).

De instucties kunnen dus vrij genummerd worden zolang aan deze topolo- gische ordening wordt voldaan. De wortel van het BDD moet overeenkomen met de instructie Is−1 en de bladeren komen over een met I1 (voor waar) en I0 (voor onwaar). De instructielijst voor het BDD in Fig. 3 zou dus ook kunnen luiden:

I80 = (¯1?7 : 6), I50 = (¯4?0 : 1), I20 = (¯2?0 : 1), I70 = (¯2?4 : 6), I40 = (¯3?1 : 0), I10 = (¯5?1 : 1), I60 = (¯3?3 : 5), I30 = (¯4?1 : 0), I00 = (¯5?0 : 0).

Of ´e´en van de andere 46 isomorfe nummeringen. Het tellen van deze isomorfe nummeringen is tamelijk eenvoudig. Merk op dat instructie I7 altijd min- stens 4 lager genummerde instructies impliceert (minus de twee bladeren).

Minus de vaste plaats van de wortel blijven er slechts 2 mogelijkheden tot nummering van I7 over: 7 of 6. Nu valt eenvoudig een beslisboom te constru- eren waarin op systematische wijze de nummering van de overige instructies kan worden opgenomen.

In Algoritme 1 presenteren wij een methode om het aantal oplossingen van de vergelijking f (x) = 1 te bepalen.

Algoritme 1 Oplossingen f (x) = 1 tellen.6

Gegeven een booleaanse functie f (x1, . . . , xn) gerepresenteerd als een sequen- tiele instructielijst Is−1, . . . , I0 bepaalt dit algoritme |f |, het aantal x = (x1, . . . , xn) waarvoor f (x) = 1. Daarbij wordt een tabel c0, c1, . . . , cs−1 bijgehouden, waarin ck overeenkomt met het aantal enen in de bead die cor- respondeert met Ik.

C1. c0 ← 0, c1 ← 1 en herhaal stap C2 voor k = 2, 3, . . . s − 1.

C2. l ← lk, h ← hk en ck ← 2vl−vk−1cl+ 2vh−vk−1ch. Of, als alternatief, een recursieve definitie in algoritme 2.

6In de originele tekst is dit Algoritme C.

(8)

Algoritme 2 Oplossingen f (x) = 1 tellen (recursief ).

Gegeven een booleaanse functie f (x1, . . . , xn) gerepresenteerd als een sequen- tiele instructielijst Is−1, . . . , I0 bepaalt dit algoritme |f |, het aantal x = (x1, . . . , xn) waarvoor f (x) = 1.

Voor een knoop u hebben we: LO(u); de index van de knoop volgend op de LO tak vanuit u, HI(u); de index van de knoop volgend op de HI tak vanuit u en var(u) de index van knoop u.

function count(u)

if u = 0 then return 0 else if u = 1 then return 1

else return 2var(LO(u))−var(u)−1∗ count(LO(u)) + 2var(HI(u))−var(u)−1∗ count(HI(u)) end count

Beide algoritmen (1, 2) werken op dezelfde manier. De knopen worden vanaf de bladeren voorzien van het aantal oplossingen voor f (x) = 1, waar- bij een onwaar blad geen oplossingen kent en een waar blad ´e´en oplossing.

Vervolgens worden alle interne knopen voorzien van het aantal oplossingen.

In het algemeen is dit de som van de twee kinderen. Indien, echter, een index wordt overgeslagen, bijvoorbeeld in Fig. 3 de meest linkse knoop met index 3, moeten alle tussenliggende paden worden meegenomen. Voor iedere

Figuur 5: Hetzelfde BDD als in Fig. 3 waarbij de knopen zijn voorzien van het aantal oplossingen.

overgeslagen index zijn dat 2 mogelijkheden. In Fig. 5 is de werking van het algoritme gevisualiseerd door iedere knoop te voorzien van het aantal oplossingen voor f (x) = 1. Het aantal oplossingen voor f (x1, x2, x3, x4) = 1 behorende bij het BDD in Fig. 3 is 8.

(9)

Referenties

[1] Donald E. Knuth. The Art of Computer Programming, Volume 4, Fascicle 1: Bitwise Tricks & Techniques; Binary Decision Diagrams. Addison- Wesley Professional, 12th edition, March 2009.

Referenties

GERELATEERDE DOCUMENTEN

Doel 9a De patiënt heeft uitleg gekregen over de zorg in de stervensfase bereikt anders. Doel 9b De naasten hebben uitleg gekregen over de zorg in de stervensfase

Voor wijziging van de statuten, fusie, splitsing of ontbinding van de stichting is vereist een besluit van het bestuur, genomen met een meerderheid van tenminste twee derden van

Door het vaststellen van de nu voorliggende programmabegroting voldoet uw raad aan alle verplichtingen die de Gemeentewet hier

Een klein aantal woonboten zou ook in Meinerswijk (E) geplaatst kunnen worden en de overige woonboten uit de Nieuwe Haven kunnen op de oude locatie van jachthaven van Jason in

Als een deelnemer niet via internet, maar vanuit de veilingzaal als zaalbieder een bod uitbrengt, kan de internetborg gebruikt worden als bewijs van zijn gegoedheid zoals bedoeld

Doel Door de relatie met het Collegeuitvoeringsprogramma zijn de doelen opgenomen in de Programmabegroting. Activiteiten Door de relatie met het Collegeuitvoeringsprogramma zijn

Door het vaststellen van de nu voorliggende programmabegroting voldoet uw raad aan alle verplichtingen die de Gemeentewet hier

[r]