Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

Vergelijkbare documenten
Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

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

Friendly Functions and Shared BDD s

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Tiende college algoritmiek. 14 april Gretige algoritmen

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.

3. Structuren in de taal

Elfde college complexiteit. 23 april NP-volledigheid III

16.3 Opgaven hoofdstuk 4: 2-d partities

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

III.2 De ordening op R en ongelijkheden

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Uitwerkingen Sum of Us

n-queens Local Search met Conflict Minimalizatie

Bijzondere kettingbreuken

Examen Datastructuren en Algoritmen II

Tentamen Discrete Wiskunde

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

De partitieformule van Euler

Opgave 2 ( = 12 ptn.)

VBA voor doe het Zelvers deel 22. Handleiding van Helpmij.nl. Auteur: leofact

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort

De symmetrische min-max heap

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University

Netwerkdiagram voor een project. AOA: Activities On Arrows - activiteiten op de pijlen.

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Een combinatorische oplossing voor vraag 10 van de LIMO 2010

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

1 Kettingbreuken van rationale getallen

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie

1 Rekenen in eindige precisie

Hoofdstuk 1. Afspraken en notaties

Rekenen: Meten groep 4 en hoger. Het leren van simpele weegopdrachten.

Tiende college algoritmiek. 26 april Gretige algoritmen

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Discrete Wiskunde 2WC15, Lente Jan Draisma

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

1 Binaire plaatjes en Japanse puzzels

Getaltheorie I. c = c 1 = 1 c (1)

Vierde college complexiteit. 14 februari Beslissingsbomen

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra

Begrenzing van het aantal iteraties in het max-flow algoritme

Een functie is een kant en klare formule. Via de knop Som in de groep Bewerken van het tabblad Start kun je een aantal veelgebruikte functies kiezen:

V = {a, b, c, d, e} Computernetwerken: de knopen zijn machines in het netwerk, de kanten zijn communicatiekanalen.

Combinatoriek groep 1 & 2: Recursie

DE PARTITIONE NUMERORUM

Logic for Computer Science

Examen Datastructuren en Algoritmen II

Geldwisselprobleem van Frobenius

Combinatoriek groep 2

1. Drie relaties Prof. dr. H. W. (Hendrik) Lenstra Universiteit Leiden

Selectietoets vrijdag 10 maart 2017

Appendix Inversie bekeken vanuit een complex standpunt

Inleiding logica Inleveropgave 3

Combinatoriek groep 1

Tweede college algoritmiek. 12 februari Grafen en bomen

Inhoud college 4 Basiswiskunde. 2.6 Hogere afgeleiden 2.8 Middelwaardestelling 2.9 Impliciet differentiëren 4.9 Linearisatie

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011

Combinatoriek groep 1

In Vlaanderen bestaat er nog geen leerlijn programmeren! Hierdoor baseren wij ons op de leerlijn die men in Nederland toepast voor basisscholen.

Minimum Opspannende Bomen. Algoritmiek

Aanvulling bij de cursus Calculus 1. Complexe getallen

VBA voor Doe het Zelvers deel 20

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify

4,7. Praktische-opdracht door een scholier 1959 woorden 1 juni keer beoordeeld

Twaalfde college algoritmiek. 23 mei Branch & Bound, Heapsort

Uitleg van de Hough transformatie

TW2020 Optimalisering

Vector-en matrixvergelijkingen. Figuur: Vectoren, optellen

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen

Polynomen. + 5x + 5 \ 3 x 1 = S(x) 2x x. 3x x 3x 2 + 2

en-splitsingen: een aantal alternatieven worden parallel toegepast, of-splitsingen: van een aantal alternatieven wordt er één toegepast,

Sorteren, groeperen en totaliseren

Netwerkstroming. Algoritmiek

Uitwerkingen toets 12 juni 2010

Wiskunde - MBO Niveau 4. Eerste- en tweedegraads verbanden

tripels van Pythagoras Jaap Top

Vergelijkingen oplossen met categorieën

Week Hier vind je uitwerkingen van enkele opgaven uit het dictaat Grafen: Kleuren en Routeren.

TW2020 Optimalisering

Aanvullende tekst bij hoofdstuk 1

1 Recurrente betrekkingen

IMO-selectietoets III zaterdag 4 juni 2016

Projectieve Vlakken en Codes

Stabiele koppelingen (Engelse titel: Stable Matchings)

3. Elke lijn van een graaf draagt twee bij tot de som van alle graden.

Verzamelingen. Hoofdstuk 5

Definitie 1.1. Een partitie van een natuurlijk getal n is een niet stijgende rij positieve natuurlijke getallen met som n

Opgave 1: bewijs zelf op algebraïsche wijze dat de lengte van DE gelijk is aan de helft van de lengte van BC.

Examencursus. wiskunde A. Rekenregels voor vereenvoudigen. Voorbereidende opgaven VWO kan niet korter

Tentamen Grondslagen van de Wiskunde A Met beknopte uitwerking

Caleidoscoop: Logica

De statespace van Small World Networks

Radboud Universiteit Nijmegen

Tentamen combinatorische optimalisatie Tijd:

Transcriptie:

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Sjoerd van Egmond LIACS, Leiden University, The Netherlands svegmond@liacs.nl 2 juni 2010 Samenvatting Deze notitie beschrijft een nederlandse vertolking met uitbreiding en uitleg van een deel uit het boek The Art of Computer Programming, Volume 4: Combinatorial Algorithms, Fascicle 1b: Binary Decision Diagrams van Donald E. Knuth [2] (pagina s 8 9 en opgaven 25 en 55). De eerste twee delen van het boek zijn behandeld in [3] en [1] en dit artikel is het derde deel uit deze serie. 1 Introductie In [3] hebben we kennis gemaakt met het Binary Decision Diagram (BDD) en hebben we Algoritme C gezien die ons snel het aantal oplossingen van f(x)=1by gegeven booleaanse functie f laat tellen. Vervolgens hebben we in [1] de n-cirkelgraaf gezien, gevolgd door Algoritme B dat oplossingen met een maximaal gewicht kan genereren. In dit deel zullen we uitwerkingen bekijken van Algoritme B (Hoofdstuk 2) en passen we daarna Algoritme C aan om de genererende functie van een BDD te maken (Hoofdstuk 3). 2 Voorbeelden van Algoritme B Twee voorbeelden verdienen het om onder de aandacht te komen na de uitwerking van Algoritme B, namelijk het vinden van een optimale kernel in 1

een n-cirkelgraaf als we de gewichten baseren op de Thue-Morse reeks, en het vinden van een beste kernel in een graaf die de Amerikaanse staten verbindt, gewogen op basis van de som van de numerieke indexen van de letters in de postcode. 2.1 Thue-Morse n-cirkel kernel In [1] is de n-cirkelgraaf C 6 de revue gepasseerd. Hierin zijn ook de termen onafhankelijk en maximaal onafhankelijk (oftewel een kernel) behandeld. Het volgende voorbeeld gebruikt echter de C 100 graaf, welke een stuk groter is. In deze graaf gaan we proberen om met behulp van Algoritme B een maximaal gewogen kernel te vinden, met gewichten gebaseerd op de Thue-Morse reeks. Definitie 1. De Thue-Morse reeks is gedefinieerd op het binaire getallenstelsel, en wordt als volgt inductief omschreven: de reeks begint met 0, en wordt uitgebreid door de huidige reeks te nemen, en daar het omgekeerde van zichzelf achter te plaatsen. Op deze manier maken we de reeks 0, 01, 0110, 01101001, etc. Voor de gewichten passen we dit echter een beetje aan, we beginnen dan namelijk met 1, en de inversie van 1 wordt 1. Deze reeks kan dan namelijk ook gemakkelijk met een formule worden gemaakt: w j =( 1) νj (1) waarbij νj de zijwaartse optelling is van de binaire representatie van het getal j, wat in simpele termen betekent dat w j = 1 als j een even aantal enen heeft, en w j = 1 als j een oneven aantal enen heeft. Een mooi effect van deze reeks is dat er nooit vaker dan twee keer hetzelfde getal achter elkaar staat, wat voor het vinden van een maximaal gewogen kernel van C 100 goed uitkomt, zoals we zo direct zullen zien. Na het uitvoeren van Algoritme B vinden we het maximum gewicht w 1 x 1 +...+w n x n bij de volgende selectie van knopen {1,3,6,9,12,15,18,20,23,25,27,30,33,36,39,41,43,46,48,51, 54,57,60,63,66,68,71,73,75,78,80,83,86,89,92,95,97,99}. (2) In deze reeks van 38 knopen zitten maar 5 knopen waarvan de binaire representatie een oneven aantal enen heeft, en genereert daarbij dus het gewicht 33 1+5 1=28. 2

2.2 Amerikaanse staten Het mooie van BDD s is dat ze niet alleen op nette mathematische problemen goed werken, maar ook op andere wereldse problemen die niet zo net te beschrijven zijn. Als voorbeeld nemen we de graaf van Amerikaanse staten (Figuur 2), en het begin van de BDD dat alle kernels kan vinden, zie Figuur 1. Deze BDD heeft een grootte van 780 knopen en er zijn 266.137 kernels te vinden. In plaats van een BDD voor de kernels hadden we ook de BDD kunnen maken voor alle onafhankelijke grafen, en deze BDD zou kleiner zijn geworden met maar 428 knopen terwijl er wel 211.954.906 onafhankelijke grafen te vinden zijn. Figuur 1: Begin van de BDD van de Amerikaanse Staten (a) Minimalizatie (b) Maximalizatie Figuur 2: Resultaten van het minimalizatie en maximalizatie van de afkortingen van een kernel van de Amerikaanse Staten 3

Figuur 2 laat ons ook gelijk twee kernels zien met respectievelijk minimum gewicht (Figuur 2(a)) en maximum gewicht (Figuur 2(b)). Hierbij is de som van de letters in de postcode de waarde van de knoop, waarbij A bijdrage 1 heeft,..., en Z bijdrage 26. Dit voorbeeld laat ons ook gelijk het volgende zien: Eigenschap 1. Als alle gewichten van een graaf positief zijn, dan is een kernel van maximaal gewicht gelijk aan een onafhankelijke graaf van maximaal gewicht. Hoe gaat dat in zijn werk? Neem een onafhankelijke graaf van maximaal gewicht. Stel dat we een knoop toevoegen om er een kernel van te maken, maar omdat die knoop positief bijdraagt wordt het gewicht van de graaf groter, en hebben we bewezen dat onze oorspronkelijke graaf niet van maximaal gewicht kon zijn. Hieruit blijkt dat Eigenschap 1 altijd geldig is. 3 P 3 P 3 Een geheel ander soort graaf is te zien in Figuur 3, waarvan we takken wel of niet gaan gebruiken (in plaats van de knopen). Figuur 4 is de bijbehorende BDD die alle samenhangende oplossingen kan genereren, waarbij samenhangend inhoudt dat er zoveel takken gebruikt zijn dat alle knopen in een samenhangende graaf zitten. Algoritme C uitgevoerd op de BDD laat ons zien dat er precies 431 samenhangende grafen te maken zijn, van de 2 12 = 4096 deelgrafen van P 3 P 3. Figuur 3: De P 3 P 3 graaf 4

Figuur 4: De BDD van de volledige verbondenheid van de graaf P 3 P 3 3.1 Een BDD genereren voor P 3 P 3 Het maken van een BDD is een lastig karwei. Hier beginnen we alvast met het maken van een niet-gereduceerde graaf van deze situatie (Opgave 55), waarvan we later zullen zien dat er een algoritme is dat deze kan reduceren. De nummering van de graaf (Figuur 3) is ook niet arbitrair gekozen, maar zodanig dat als we de takken geordend aflopen we zo snel mogelijk knopen geheel afhandelen. Stap 1. Sorteer de takken u k v k zo dat we een lexicografische ordening krijgen volgens u k v k,u k < v k. We nemen dus alle takken vanuit een bepaalde knoop eerst, en beginnen dan pas aan de volgende. Voor de graaf P 3 P 3 geeft ons dat de volgorde zoals in Tabel 1 te zien is. En als we de takken in deze volgorde bekijken in de graaf kunnen we zien dat in oplopende volgorde alle knopen geheel afgehandeld worden. Stap 2. Maak een array S waarin we de indexen uit Tabel 1 van de eerste keer dat een knoop aan de linkerkant voorkomt in zetten. Hierbij zijn s 9 en s 10 (de laatste knoop en een niet bestaande knoop erna) nodig voor de juiste afhandeling van het algoritme; deze worden gedefinieerd als het aantal takken + 1. 5

k 1 2 3 4 5 6 7 8 9 10 11 12 u k v k 1 2 1 3 2 4 2 5 3 5 3 6 4 7 5 7 5 8 6 8 7 9 8 9 Tabel 1: De gesorteerde takken s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 1 3 5 7 8 10 11 12 13 13 Tabel 2: S array Stap 3. Nu definiëren we het front, de knopen waar we op een bepaald niveau naar kijken, via V 0 ={1} en V k ={1,v 1,...,v k } {u k,...,n} met(1 k 12) en(n=9). Als de index van V als element in S te vinden is dan kan er een knoop uit het front gehaald worden waar we helemaal klaar mee zijn. Hiermee verkrijgen we het front per niveau van de BDD, zoals gegeven in Tabel 3. Hiermee kunnen we eindelijk aan de slag om daadwerkelijk een niet-gereduceerde BDD te maken. Op ieder niveau l van de BDD, tellend vanaf 0, beschouwen we de knopen gegeven in V l, en we bouwen de BDD door de takken op volgorde uit Stap 1 te nemen. Op dit moment zetten we bij de knopen een representatie van het front neer die aangeeft of de knopen aan elkaar zitten (12), of niet (1 2). V 0 {1} V 5 {3,4,5} V 9 {5,6,7,8} V 1 {1,2} V 6 {3,4,5,6} V 10 {6,7,8} V 2 {1,2,3} V 7 {4,5,6,7} V 11 {7,8,9} V 3 {2,3,4} V 8 {5,6,7} V 12 {8,9} V 4 {2,3,4,5} Tabel 3: Het front per niveau In Figuur 5 is het begin van deze BDD te zien, en er zijn nu twee interessante eigenschappen naar voren gekomen die we even de revue willen laten passeren. Allereerst is helemaal aan de linkerkant van de boom de knoop (1 2 3) te zien, welke als enige niet verder is uitgewerkt. Dit komt omdat we nu al kunnen zien dat knoop 1 nooit meer verbonden zal worden met de rest van de graaf, vanwege de ordening in Stap 1. Het tweede is dat de knopen (13 2) en(12 3) precies dezelfde kinderen bevatten, en deze twee knopen zullen zich dus verder precies hetzelfde doorontwikkelen en zullen uiteindelijk 6

samengevoegd worden door het reduceer-algoritme dat later behandeld zal worden. Figuur 5: Het begin van de niet-gereduceerde BDD van P 3 P 3 3.2 Oplossingen tellen Zoals gezegd aan het begin van deze notitie gaan we ook nog kijken hoe we Algoritme C kunnen aanpassen om ons meer informatie te geven over de oplossingen van een BDD met verschillende aantallen variabelen die true zijn, de zogenaamde genererende functie (Opgave 25). In [3] is Algoritme C behandeld, dus voor details verwijzen we de lezer terug naar die notitie. De enige echte verandering is dat we in plaats van het aantal oplossingen we bij willen houden hoe vaak er HI en hoe vaak er LO is gekozen voor een oplossing. Hiervoor introduceren we de notatie z n, waarbij n aangeeft hoe vaak er HI gekozen is, oftewel hoeveel variabelen true zijn. Het resultaat van de genererende functie is dus een polynoom in z waarvan de term a k z k aangeeft dat er a k oplossingen zijn met k maal HI. Om de formule nog wat te verduidelijken wordt z 0 vereenvoudigd tot simpelweg 1. Omdat Algoritme C bottom-up werkt, kunnen we er vanuit gaan dat de knopen onder de huidige knoop al een juiste waarde voor de genererende functie hebben. Om de genererende functie van de huidige knoop te berekenen doen we het volgende c k = c l + zc h (3) 7

waarbij c l het aantal oplossingen van de LO kant is, en c h het aantal oplossingen van de HI kant. Dit werkt echter alleen op een graaf zoals gegeven in Figuur 6, welke niet gereduceerd is. Als we een gereduceerde graaf hebben moeten we ook rekening houden met knopen die er niet meer zijn, en de zogenaamde don t cares die ze introduceren. Op een weggevallen niveau kunnen we Formule 3 simpel aanpassen naar c k =(1+z)c k, (4) als k het weggevallen kind is. Door Formule 3 en Formule 4 te combineren verkrijgen we de volgende formule die geldt voor een gereduceerde BDD: c k =(1+z) v l v k 1 c l +(1+z) v h v k 1 zc h (5) waarbij de notatie uit [3, 1] en omdat er voor de wortel ook knopen weggelaten kunnen zijn vinden we de totale oplossing met c=(1+z) v s 1 1 c s 1 (6) waarbij v s 1 1 het aantal gemiste knopen voor de wortel is. In Figuur 6 staan ook de functies bij de knopen die aangeven hoeveel oplossingen er te vinden zijn met precies z y keer HI kiezen. In Formule 7 staat de uitkomst van de genererende functie uitgevoerd op de BDD van P 3 P 3 (Figuur 4): G(z)=Σ x z νx f(x)=192z 8 + 164z 9 + 62z 10 + 12z 11 + z 12 (7) Met behulp van de binomiaal-coefficient kunnen we snel controleren dat de laatste twee delen kloppen, omdat er precies( 12 12 )=1 manier is om alle takken te gebruiken, en precies( 12 )=12 11 manieren om elf takken te gebruiken door een tak per keer weg te laten. Bij tien takken is het echter iets lastiger, want als we 2 takken weghalen terwijl de graaf samenhangend moet blijven kan het fout gaan als we de twee takken naar een hoekpunt verwijderen. Dit houdt in dat er dan( 12 2 ) 4= 66 4=62 manieren zijn om door 2 takken weg te halen nog steeds een samenhangende graaf over te houden. Met nog maar negen takken wordt de situatie nog lastiger, want met het verwijderen van 3 takken zijn er nog meer manieren om knopen uit de graaf weg te snijden. We kunnen namelijk de losse hoekknopen (1,4,6,9) met een 8

Figuur 6: Non-BDD graaf met genererende functies willekeurige andere knoop weg halen, wat ons 4 ( 10 )=40 1 situaties oplevert die niet geldig zijn. Verder kunnen we de middelste knopen van een zijkant (2,3,7,8) ieder voor zich wegsnijden door alle drie de takken er omheen te verwijderen wat ons nog 4 ongeldige situaties oplevert, en van iedere zijkant kunnen we ook twee keer 2 of een keer 3 knopen tegelijk wegsnijden (bijvoorbeeld{1,2},{2,4} en{1,2,4}), wat ons nog 4 2 en 4 ongeldige situaties oplevert. In totaal krijgen we bij negen takken dan dus ( 12 ) (4 10) 4 (4 2) 4=164 (8) 3 geldige situaties (mogelijkheden - hoekpunten - middelste knoop aan een zijkant - twee knopen aan een zijkant - drie knopen aan een zijkant). De situatie met z 8 is daarentegen te lastig om met de hand te controleren, want dan zijn er namelijk vele overlappende situaties waar rekening mee gehouden moet worden. Echter dit is wel precies de situatie waarbij de grafen alle opspannende bomen representeren. 9

Bibliografie [1] Giso Dal. Seminar Combinatorische Algoritmen, LIACS: Onafhankelijke Verzamelingen en Gewogen Oplossingen, 2010. [2] Donald E. Knuth. The Art of Computer Programming, Volume 4: Combinatorial Algorithms, Fascicle 1b: Binary Decision Diagrams. Addison- Wesley, 2009. [3] Jonathan Vis. Seminar Combinatorische Algoritmen, LIACS: Over Binaire Beslissingdiagrammen, 2010. 10