ALGORITMEN EN COMPLEXITEIT

Maat: px
Weergave met pagina beginnen:

Download "ALGORITMEN EN COMPLEXITEIT"

Transcriptie

1 ALGORITMEN EN COMPLEXITEIT Syllabus Prof. dr. D. Janssens 1

2 Enkele klassiekers op dit gebied: [1 ] Aho, Hopcroft, Ullman, The Design and Analysis of Computer Algorithms, Addison-Wesley, [2 ] Garey, Johnson, Computers and Intractability, Freeman, [3 ] Hopcroft, Motwani, Ullman, Introduction to Automata Theory, Languages and Computation, Addison- Wesley, [4 ] R. Motwani, P. Raghavan, Randomized Algorithms, Cambridge University Press, Een recent overzicht: A Short History of Computational Complexity, op 2

3 1. Complexiteitsfuncties We nemen aan dat men met elk stel invoerwaarden van een algoritme een natuurlijk getal kan associeren, dat de grootte van de invoer voorstelt. Voor een sorteeralgoritme neemt men bv. het aantal te sorteren elementen. Voor een gegeven getal n kan men dan kijken naar T(n), de maximale tijd nodig voor het verwerken van een invoer van grootte n, en naar S(n), de maximale hoeveelheid geheugenruimte nodig voor het verwerken van een invoer van grootte n. Men associeert dus twee rekenkundige functies met het algoritme: T(n), de tijdscomplexiteit, en S(n), de plaatscomplexiteit. Meestal zijn we enkel geïnteresseerd in de orde van die functies. 3

4 Algoritme Tijdscompl. 1 sec 1 min 1 uur A 1 n A 2 n log(n) A 3 n A 4 n A 5 2 n De laatste drie kolommen geven telkens de maximale invoergrootte (als tijdseenheid is 1 milliseconde gebruikt). Stel dat A 1, A 2,..., A 5 respectievelijk precies 1000 n, 100 n log(n), 10 n 2, n 3 en 2 n stappen nodig hebben. Volgende tabel geeft dan de meest efficiënte algoritmen voor verschillende waarden van n: 2 n 9 A 5 10 n 58 A 3 59 n 1024 A 2 n 1025 A 1 We zullen verschillende algoritmen bekijken voor eenzelfde probleem, en daarvan de complexiteit vergelijken. Dit gebeurt door boven- en benedengrenzen te zoeken en te vergelijken. 4

5 We gebruiken rekenkundige functies (van IN naar IN) om over de complexiteit van algoritmen te redeneren. Om functies met elkaar te vergelijken gebruiken we de big oh (orde) notatie: O(f) = {g : IN IN er bestaan constanten c en n 0 met g(n) c f(n) voor elke n met n n 0 } Stelling. Als g O(f) en f O(g) dan O(f) = O(g) (dit bepaalt een equivalentierelatie). Als f 1, f 2 O(g) en c is een constante, dan geldt: f 1 + f 2 O(g), f 1 f 2 O(g 2 ), c f 1 O(g). Er is een polynomiaal verband tussen de functies f 1 en f 2 als er polynomen p 1 (x), p 2 (x) bestaan zodat f 1 (n) p 1 (f 2 (n)) en f 2 (n) p 2 (f 1 (n)). 5

6 We hebben de volgende rekenkundige eigenschappen nodig. Stelling. Stelling. n i=0 q i = qn+1 1 q 1 i=1... i 2 i = 2 Stelling. log a b = log a c log c b O(log a n) = O(log c n) a logcb = b log ca Stelling. O(log(n!)) = O(n log(n)) Bewijs: n! < n n, dus geldt log(n!) < n log(n). Anderzijds, n! > n (n 1)... ( n/2 ) > (n/2) n/2 en 6

7 bijgevolg log(n!) > (n/4)log(n) (voor n 4). Stelling. Bewijs: O( n i=1 log(i)) = O(n log(n)) 2 log(1)+log(2)+...+log(n) = 2 log(1) 2 log(2)... 2 log(n) Bijgevolg geldt n i=1 = n = 2 log(n!) log(i) = log(n!). De analyse van het aantal stappen dat een algoritme nodig heeft leidt vaak tot recurrentieformules. Hier volgen enkele eigenschappen over recurrentieformules en hun oplossingen. Stelling. Gegeven een recurrentieformule van volgende vorm: T(1) = c T(n) = p(t(n 1)), met p een polynoom. Dan heeft deze formule een unieke oplossing; m.a.w. er is een functie T die voldoet en als zowel T 1 als T 2 voldoen, 7

8 dan geldt T 1 (n) = T 2 (n) voor elke n. (Bewijs: inductie naar n.) Stelling. Als T(2) = 1 T(n) = 2 T(n/2) + 2, voor n = 2 k, waar k 2 Dan is T(n) = 3 n/2 2, voor n een macht van 2. (Bewijs: inductie naar n.) Stelling. Laat a, b, c niet-negatieve constanten zijn, en T(1) = b T(n) = a T(n/c) + b n, voor n = c k, waar k 2. Dan geldt T(n) O(n), als a < c T(n) O(n log c n), als a = c T(n) O(n log ca ), als a > c Bewijs(schets): toon eerst aan, per inductie, dat voor n een macht van c geldt: T(n) = b n 0 i log c n (a/c) i. 8

9 Als a < c, dan convergeert de reeks, dus T(n) = d n voor een constante d. Als a = c, dan T(n) = b n log c n, en als a > c dan is de som gelijk aan (q (log cn)+1 1)/(q 1), met q = a/c. Deze laatste functie is O(a log cn ) wat hetzelfde is als O(n log ca ). 9

10 2. Berekeningsmodellen 2.1. Random Access Machine (RAM, [1]) Een RAM bestaat uit: Een read-only invoerband, met leeskop. Elke cel van de band bevat een geheel getal, en er is maar een eindig aantal cellen in gebruik (de overige bevatten nul). Een write-only uitvoerband, met schrijfkop. Elke cel bevat een geheel getal, of is blanco. De uitvoerband is oneindig lang. Een programma. Een locatieteller (LC) die een natuurlijk getal kan bevatten. Een geheugen. Werking: De leeskop begint links en gaat bij elke READ èèn cel naar rechts. 10

11 In het begin zijn alle cellen van de uitvoerband blanco. De schrijfkop begint links en gaat bij elke WRITE èèn cel naar rechts. Het geheugen bestaat uit een aftelbaar aantal registers r 0, r 1,... die alle een geheel getal kunnen bevatten of blanco kunnen zijn. In het begin van een uitvoering bevatten alle registers het getal nul. Het programma is een rij van instructies, die een label (nummer) hebben. Het getal in de locatieteller LC geeft aan wat de eerstvolgende uit te voeren instructie is. Alle rekenoperaties gebeuren in het register r 0, dat dus een speciale rol speelt (accumulator). Operanden van de instructies zijn van de vorm i, =i (literal), of *i (indirect adres). De beschrijving van de instructies en hun effect gebeurt met behulp van de memory-map c en de value-functie v: c(i) staat voor de inhoud van register r i en v staat voor waarde van een operand: v(i) = c(i), v(= i) = i, v( i) = c(c(i)). 11

12 instructie en operand betekenis LOAD a c(0) v(a) STORE i c(i) c(0) STORE *i c(c(i)) c(0) ADD a c(0) c(0) + v(a) SUB a c(0) c(0) v(a) MULT a c(0) c(0) v(a) DIV a c(0) c(0)/v(a) READ i c(i) input READ *i c(c(i)) input WRITE a output v(a) JUMP b LC b JGTZ b LC b als c(0) > 0 JZERO b LC b als c(0) = 0 HALT stop de berekening Hierin staat a voor een operand, i voor een registernummer en b voor een label. 12

13 Elk programma definieert een (partiële) functie van de inhoud van de invoerband naar de inhoud van de uitvoerband. Een programma kan op volgende manieren gebruikt worden: om een functie f(x 1, x 2,..., x n ) = y te berekenen, om talen te accepteren (accepteren = 1 schrijven en stoppen), om te beslissen (altijd stoppen, en 0 of 1 schrijven). 13

14 begin read r1; if r1 0 then write 0 else begin r2 r1; r3 r1-1; while r3 > 0 do begin r2 r2 r1; r3 r3 1 end; write r2 end end 14

15 RAM Pseudocode READ 1 read r1 LOAD 1 JGTZ pos if r1 0 then write 0 WRITE =0 JUMP endif pos: LOAD 1 STORE 2 r2 r1 LOAD 1 SUB =1 r3 r1 1 STORE 3 while: LOAD 3 JGTZ continue while r3 > 0 do JUMP endwhile continue: LOAD 2 MULT 1 r2 r2 r1 STORE 2 LOAD 3 SUB =1 r3 r3 1 STORE 3 JUMP while endwhile: WRITE 2 write r2 endif: HALT 15

16 begin d 0; read x; while x 0 do begin if x 1 then d d 1 else d d+1; read x end; if d = 0 then write 1 end 16

17 RAM Pseudocode LOAD =0 STORE 2 d 0 READ 1 while: LOAD 1 JZERO endwhile while x 0 do LOAD 1 SUB =1 of x 1 JZERO one LOAD 2 SUB =1 then d d 1 STORE 2 JUMP endif one: LOAD 2 ADD =1 else d d + 1 STORE 2 endif: READ 1 read x JUMP while endwhile: LOAD 2 JZERO output if d = 0 then write 1 HALT output: WRITE =1 HALT 17

18 We kunnen voor elk programma vier functies bekijken: de worst-case-tijdscomplexiteit, de expected-case-tijdscomplexiteit, de worst-case-plaatscomplexiteit, de expected-case-plaatscomplexiteit. Uiteraard zijn dit telkens functies van IN naar IN. We concentreren ons voorlopig vooral op de tijdscomplexiteit. De bekomen resultaten zijn afhankelijk van de veronderstellingen die gemaakt worden over de tijd (of plaats) nodig voor de uitvoering van een instructie. We bekijken twee mogelijkheden: 1. Het Uniform Kost Criterium: alle instructies kosten èèn tijdseenheid en elk register vraagt èèn plaatseenheid. 2. Het Logaritmisch Kost Criterium: dat houdt rekening met de lengte van operanden. 18

19 Laat, voor een geheel getal n, l(n) gedefinieerd zijn door: l(n) = log(n) + 1 als n > 0 1 als n = 0 log( n) + 1 als n < 0 Dan neemt men voor de plaatscomplexiteit de som van de l(x i ), waar x i de grootste waarde is die tijdens de berekening voorkomt in register r i. (De som uiteraard over alle gebruikte registers). Voor de tijdscomplexiteit heeft men bv. LOAD =i l(i) LOAD i l(i) + l(c(i)) LOAD *i l(i) + l(c(i)) + l(c(c(i))) STORE i l(c(0)) + l(i) STORE *i l(c(0)) + l(i) + l(c(i)) DIV =i l(c(0)) + l(i) JUMP b 1 JZERO l(c(0)) Ook bij gebruik van het logaritmisch kost criterium blijven een aantal aspecten buiten beschouwing: we doen bv alsof de analyse van een instructie geen tijd neemt. 19

20 2.2. Random Access Stored Program Machine (RASP, [1]) Het programma staat in het geheugen. LC staat in het geheugen. De analyse van een instructie vraagt tijd. De RASP heeft dezelfde instructies als de RAM, behalve die waarin indirecte addressering voorkomt. Elke instructie staat in een paar van opeenvolgende geheugenregisters: in het eerste staat de (code voor de) operatie, in het tweede staat de operand. We nemen bv. aan dat de codering van de operaties de volgende is. LOAD =i 1 SUB =i 7 WRITE i 13 LOAD i 2 MULT i 8 WRITE =i 14 STORE i 3 MULT =i 9 JUMP i 15 ADD i 4 DIV i 10 JGTZ i 16 ADD =i 5 DIV =i 11 JZERO i 17 SUB i 6 READ i 12 HALT 18 De instructies worden sequentieel uitgevoerd, behalve bij jumps. Voor de tijds-kost van een instructie heeft men 20

21 nu bv, met het logaritmisch kost criterium: ADD i (in r j en r j+1 ) ADD =i (in r j en r j+1 ) l(j) + l(c(0)) + l(i) + l(c(i)) l(j) + l(c(0)) + l(i) De volgende twee resultaten drukken uit dat de tijdscomplexiteit niet echt verandert door de overgang van RAM naar RASP of omgekeerd. Stelling. Als de tijdscomplexiteit van een RAM programma T(n) is, dan bestaat er een constante k en een equivalent RASP programma met tijdscomplexiteit k T(n). Dit geldt zowel voor het uniform als voor het logaritmisch kost criterium. Bewijs: We beschrijven een RASP programma voor de simulatie van een gegeven maar verder willekeurig RAM programma. Register r 0 dient om te rekenen, en r 1 wordt gereserveerd om als dat nodig is een copie van r 0 bij te houden. Het RASP programma wordt in registers r 2,..., r p geplaatst; p zal enkel afhangen van het gegeven RAM programma. Als een instructie van het RAM programma refereert naar register r i, dan zal de overeenkomstige instructie van het RASP programma moeten refereren naar register r i+p. 21

22 De instructies zonder indirecte adressering kunnen verder gewoon overgenomen worden in het RASP programma. Instructies met indirecte adressering worden vervangen door een rij van 6 RASP instructies. Zo wordt SUB *i bv. vervangen door: register inhoud RASP instr verklaring STORE inhoud r 0 bewaren in r LOAD r i van RAM laden, 103 i+p i+p dus i+p ADD = adres verhogen 105 p p met p STORE adres in tweede deel van SUB-instr LOAD inhoud r 0 herstellen SUB eigenlijke simulatie, tweede deel ingevuld door STORE

23 Bij gebruik van het uniform kost criterium is uiteraard k = 6. Ook voor het logaritmisch kost criterium bestaat er een k (zie [1], p18). Stelling. Als de tijdscomplexiteit van een RASP programma T(n) is, dan bestaat er een constante k en een equivalent RAM programma met tijdscomplexiteit k T(n). Dit geldt zowel voor het uniform als voor het logaritmisch kost criterium. Bewijs: Er moet nu een RAM programma geconstrueerd worden dat een gegeven RASP programma simuleert. r 1 wordt gebruikt voor indirecte adressering, r 2 voor de locatieteller van de RASP, en r 3 voor de r 0 van de RASP. Initializeer r 2 met 4. Het RAM programma bestaat uit een loop die telkens een RASP operatie leest (LOAD *2), en op basis van de gelezen code naar èèn van 18 programmadelen springt, die elk èèn van de 18 mogelijke operaties simuleren. Zo wordt SUB i (van de RASP) bv. gesimuleerd door: 23

24 LOAD 2 laat r 2 naar het adresdeel van de ADD =1 te simuleren instructie verwijzen. STORE 2 LOAD *2 laad de oorspronkelijke i, ADD =3 en verhoog i met 3 STORE 1 r 1 bevat nu i+3 LOAD 3 laad de r 0 van de RASP SUB*1 de eigenlijke simulatie STORE 3 resultaat in r 3 LOAD 2 laat r 2 naar de volgende ADD =1 halve instructie verwijzen STORE 2 JUMP a ga terug naar de loop Het bestaan van de constante k wordt aangetoond op dezelfde manier als in vorige stelling. 24

25 2.3. Deterministische Multitape Turing Machine (DMTT, [1]) De meeste resultaten over complexiteit van problemen (in tegenstelling tot individuele algoritmen) worden bewezen voor een meer primitief model: de Turing Machine. Een geheugenplaats van een TM kan enkel èèn van een eindig aantal symbolen bevatten, en dus geen willekeurig groot getal. We bekijken Turing machines met k banden; deze banden zijn aan èèn kant oneindig (rechts) en ze zijn verdeeld in cellen waarin telkens plaats is voor èèn symbool. Op elke band wordt èèn cel gelezen en/of veranderd. Bij het begin van de berekening staan de lees-schrijfkoppen op de meest linkse cel van elke band. Er is een eindig aantal symbolen beschikbaar, en er zijn slechts eindig veel toestanden. Een DMTT wordt gespecifieerd als een 7-tupel waar (Q, T, I, δ, b, q 0, q f ) Q de verzameling van toestanden is, T de verzameling van symbolen is, 25

26 I de verzameling van inputsymbolen is, I T, b het blanco-symbool is, b T I, q 0 de begintoestand is, q 0 Q, q f de eindtoestand is, q f Q, en δ : (Q {q f }) T k Q (T {L, R, S}) k de transitiefunctie is. Verzameling van configuraties: Q (T T ) k. Op de verzameling van configuraties wordt een stap-relatie gedefinieerd. De transitieve en reflexieve sluiting daarvan wordt met genoteerd. 26

27 Laat M een DMTT zijn. De taal geaccepteerd door M is de verzameling L(M) = {w I er bestaan v 1,..., v k met (q 0, w,,..., ) (q f, v 1, v 2,..., v k )}. De functie berekend door M is de (partiële) functie F(M) : I I gedefiniëerd door: F(M)(w) = v 1, als (q 0, w,,..., ) (q f, v 1, v 2,..., v k ) ongedef., anders. Zoals voor de andere modellen hebben we: T(n) is het maximale aantal stappen nodig voor een invoer van lengte n, S(n) is het maximale aantal cellen op èèn van de banden gebruikt in de verwerking van een invoer van lengte n. Een Deterministische Turingmachine (DTM) is een DMTT met k = 1. 27

28 Stelling Elke taal die aanvaard wordt door een DMTT wordt ook aanvaard door een DTM. Bewijs: Gegeven een DMTT M met k banden. Een DTM M 1 die M simuleert kan als volgt geconstrueerd worden. Als alfabet nemen we T 1 = ({0, 1} T) k m.a.w. de DMT M 1 heeft een band met 2 k sporen. Elk paar sporen wordt gebruikt om een band van M voor te stellen: de eerste helft stelt de positie van de lees/schrijfkop voor (overal nullen behalve waar de kop staat) en de tweede helft stelt de inhoud voor. Voor k = 2 krijg je dus zoiets als: a c a a a c c c c c c c c c c c a a a a Een stap van M wordt gesimuleerd in M 1 door eerst de kop vanaf de positie van de meest linkse 1 naar de positie van de meest rechtse 1 te verplaatsen, en intussen de door M gelezen symbolen in het geheugen op te slaan, en vervolgens terug naar links te gaan terwijl alle nodige veranderingen worden aangebracht. 28

29 De volgende twee resulaten tonen aan dat er een polynomiaal verband bestaat tussen de tijdscomplexiteit op RAM en DTM, wanneer men tenminste het logaritmisch kost criterium gebruikt. Stelling Laat M een DMTT zijn met tijdscomplexiteit T(n). Er bestaat een RAM M die M simuleert met T (n) in O(T(n)), voor het uniform kost criterium, en T (n) in O(T(n) log(t(n))), voor het logaritmisch kost criterium. Bewijs: de RAM gebruikt c registers als werkgeheugen en verder een register voor elke cel van de band; dus register c+k i+j wordt gebruikt voor de i-de cel van band j. Voor het inlezen en simuleren van M zijn O(T(n)) stappen nodig (dwz, f(n) stappen met f(n) O(T(n))). Het grootste getal in een register is van de grootte O(T(n)), omdat de DMTT maar ten hoogste zo ver naar rechts kan gaan. Het resultaat volgt. 29

30 Stelling Laat M een RAM zijn met tijdscomplexiteit T(n). Er bestaat een DMTT M die M simuleert met T (n) in O(T 3 (n)), voor het logaritmisch kost criterium. Bewijs: We geven eerst een bewijs voor het geval waarin de RAM geen MULT en DIV instructies bevat, en T 2 (n). Er zijn 3 banden, die gebruikt worden als volgt. band 1: ##i 1 #c 1 ##i 2 #c 2 ##... ##i k #c k ##, waar de i j registernummers zijn en de c j hun inhoud (in binaire voorstelling) band 2: inhoud van r 0 band 3: werkgeheugen Instructies zoals bv ADD*20 of STORE 30 kunnen als volgt gesimuleerd worden. 30

31 ADD *20 zoek op band 1 ##10100, dus i j = 20 copieer c j naar band 3 zoek op band 1 de i j die gelijk is aan de inhoud van band 3 copieer c j naar band 3 tel de inhoud van band 3 op bij die van band 2 STORE 30 zoek op band 1 ##11110, dus i j = 30 copieer het stuk van band 1 vanaf de eerstvolgende ## naar band 3 copieer de inhoud van band 2 op band 1 copieer de inhoud van band 3 rechts daarvan De band kan nooit langer worden dan O(T(n)), dus het opzoeken duurt slechts O(T(n)). ADD en STORE zelf nemen ook ten hoogste O(T(n)). Er zijn O(T(n)) RAM instructies uit te voeren. Dat geeft dus in totaal O(T 2 (n)). 31

32 Voor het algemene geval, waar ook MULT en DIV mogen voorkomen, volstaat het DTM-subroutines te schrijven die MULT en DIV simuleren, en die zo zijn dat de logaritmische kost ervan niet groter is dan het kwadraat van de logaritmische kost van de gesimuleerde instructie. Het resultaat geldt niet als men het uniform kost criterium gebruikt: Stelling. Er bestaat een RAM R die niet gesimuleerd kan worden door een DTM M zodanig dat er een polynomiaal verband bestaat tussen de (uniforme kost) tijdscomplexiteit van R en die van M. Bewijs: Het is heel eenvoudig een RAM te schrijven die in O(n) stappen de functie f(n) = 2 (2n) berekent. In pseudocode: j 2 doe n keer j j j Voor de representatie van het getal 2 (2n) heeft de DTM O(2 n ) cellen nodig. 32

33 2.4. PASCAL Elk PASCAL programma kan gesimuleerd worden door een RAM en omgekeerd. Er is een polynomiaal verband tussen de tijdscomplexiteiten, net zoals tussen RAM/RASP met logaritmische kost en DTM. 33

34 3. Sorteringsalgoritmen Sorteringsalgoritmen komen veel voor en zijn vrij goed bestudeerd. In dit hoofdstuk bekijken we enkele resultaten i.v.m. de worst-case tijdscomplexiteit en de expected tijdscomplexiteit. Specificatie: gegeven een rij S = a 1, a 2,..., a n van elementen uit een totaal geordende verzameling (A, ), zoek een permutatie π van {1, 2,...,n} zo dat a π(1) a π(2)... a π(n). 34

35 Men kan verschillende soorten sorteringsalgoritmen onderscheiden: comparison-based: elementen kunnen enkel vergeleken worden met elkaar, verdere informatie over de structuur van de elementen wordt niet gebruikt. andere: de te sorteren elementen zijn getallen, woorden, enz, en hebben dus een niet triviale structuur die bij het sorteren gebruikt wordt. of ook: intern (in-place), extern. 35

36 3.1. Niet Comparison-Based Sorteren 1. Radix Sort Eerste versie: laat A = {1, 2,...,m}. Het algoritme gebruikt m queues Q[i], dus èèn per mogelijke waarde. Deze queues noemt men buckets. begin 1. Initializeer m lege queues Q[1], Q[2],...,Q[m]; 2. for i := 1 to n do plaats a i in queue Q[a i ] od; 3. concateneer de queues Q[1], Q[2],...,Q[m] end Voor de worst-case tijdscomplexiteit heeft men: 1. O(m) 2. O(n) 3. O(m) en dus voor het hele algoritme O(m + n). 36

37 Tweede versie: Laat A k de verzameling zijn van alle woorden van lengte k over een alfabet A met m letters. Neem aan dat ook een totale orde op A gegeven is: A = {a 1, a 2,..., a m } met a i a j als i j. Ook de lexicografische orde op A k wordt met genoteerd; dus voor s 1, s 2 A k geldt s 1 s 2 als ofwel 1. s 1 = a.s 1 en s 2 = a.s 2 voor a A en s 1 s 2, ofwel 2. s 1 = a.s 1 en s 2 = b.s 2 voora, b A met a b. 37

38 De input bestaat nu uit n woorden s 1, s 2,...,s n in A k. Met s ij wordt de j-de letter van s i genoteerd; dus s ij A. Naast de m buckets Q[l] wordt nog een queue Queue gebruikt. begin plaats s 1, s 2,..., s n in Queue for j := k downto 1 do begin for l := 1 to m do maak Q[l] leeg while Queue niet leeg do begin laat s i het eerste element van Queue zijn; verplaats s i van Queue naar Q[s ij ]; end for l := 1 to m do concateneer Q[l] achter Queue end end 38

39 Voorbeeld Laat A = {1, 2, 3}, input: 312, 321, 233, 132, 311, 211. input (out) Queue (in) Figuur 1: Radix Sort: tweede versie De worst-case tijdscomplexiteit is nu O((m + n) k). 39

40 Derde versie: uitbreiding tot A, dwz. de verzameling van alle woorden over het geordende alfabet A. De lexicografische orde op A is gedefiniëerd door: s 1 s 2 als ofwel 1. s 1 is het lege woord, ofwel 2. s 1 = a.s 1 en s 2 = a.s 2 voor a A en s 1 s 2, ofwel 3. s 1 = a.s 1 en s 2 = b.s 2 voor a, b A met a b. De input bestaat nu uit n woorden s 1, s 2,..., s n in A. Een mogelijke oplossing bestaat erin alle woorden rechts aan te vullen met een speciaal ( padding ) symbool ß, met ß a voor elke a A, en dan het vorige algoritme toe te passen. De gewone orde op natuurlijke getallen (binair of decimaal voorgesteld) is hiervan een variant: blanco is dan het padding symbool, maar de padding gebeurt links. Nadeel: dit is inefficiënt. 40

41 l i is de lengte van s i, l max is het maximum van de l i, en l tot = n i=1 l i, dus l tot is het totale aantal letters van de input. Het algoritme gebruikt l max lijsten Length[l] die de s i bevatten van lengte l, dus die met l i = l. Verder gebruikt het l max gesorteerde lijsten Nonempty[l] die, in volgorde en zonder duplicaten, de j bevatten zo dat de letter a j op positie l voorkomt; dus die waarvoor een i bestaat met s il = a j. 41

42 begin initializeer de lijsten Length[l] en Nonempty[l]; maak Queue leeg; for l := 1 to m do maak Q[l] leeg for j := l max downto 1 do begin concateneer Length[j] voor Queue; while Queue niet leeg do begin laat s i het eerste element van Queue zijn; verplaats s i van Queue naar Q[s ij ]; end for elke l in Nonempty[j] do begin concateneer Q[l] achter Queue maak Q[l] leeg end end end 42

43 Tijdscomplexiteit: De woorden s i kunnen voorgesteld worden in een array, waarin elke s i voorafgegaan wordt door zijn lengte. Het manipuleren van de s i kan dan gebeuren via pointers in die array. De hulpstructuren Length[l], Q[l] en Queue bevatten dus enkel pointers, en het verplaatsen van de s i kan in èèn stap. Voor het initializeren van de Nonempty[l], sorteer eerst lexicografisch de koppels (j, s ij ). Dit kan in O(m+l tot ) tijd. Ook het initializeren van de Length[l] kan in O(l tot ) tijd. Laat n j het aantal s i zijn die tenminste lengte j hebben, en laat m j de lengte zijn van Nonempty[j]. Dus zeker m j n j, en l max j=1 n j = l tot. Voor elke j zijn er O(m j + n j ) stappen nodig. Dat geeft een totaal van O( l max j=1 (n j +m j )) = O(l tot ) stappen voor de tweede for -lus. Rekening houdend met de eerste lus (initializatie van de buckets Q[l]), is de worst-case tijdscomplexiteit van het hele algoritme bijgevolg O(m+l tot ). 43

44 2. Toepassing: isomorfisme van bomen Een isomorfisme tussen bomen is een bijectie f tussen de knopen die de structuur bewaart: m.a.w. er is een tak (x, y) in de eerste boom d.e.s.d. als er een tak (f(x), f(y)) is in de tweede boom. We tonen aan: Stelling. Er bestaat een algoritme dat in O(n) tijd nagaat of twee bomen T 1 en T 2, elk met ten hoogste n knopen, isomorf zijn. Bewijs: Laat de knopen op niveau i van een boom de knopen zijn op afstand i van de wortel. Laat h de maximale hoogte zijn van T 1 en T 2. Het algoritme gaat als volgt. 44

45 begin for i := h downto 0 do begin 1. ken aan de bladeren op niveau i het lege tupel () toe; 2. ken aan elke inwendige knoop v op niveau i het geordende tupel toe bestaande uit de getallen toegekend aan de kinderen van v; 3. orden lexicografisch de tupels van niveau i. Dit levert rijen S 1 en S 2 op. 4. vergelijk S 1 en S 2. Als S 1 S 2 dan zijn de bomen niet isomorf (stop). 5. als S 1 = S 2, nummer dan de verschillende elementen van S 1 met 1, 2,... (daarbij komen i.h.a. herhalingen voor). 6. ken elke knoop van niveau i het overeenkomstige getal toe. end; T 1 en T 2 zijn isomorf; end 45

46 Voorbeeld 1 (1,2) 2 1 (1,2,2) (1,1,1) (1,1) (1,1) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 1 (1,2) 1 2 (1,1,1) (1,2,2) ( ) ( ) ( ) (1,1) ( ) (1,1) ( ) ( ) ( ) ( ) Figuur 2: Twee isomorfe bomen 46

47 Tijdscomplexiteit: het doorlopen van een boom kan in O(n). In een doortocht kan men lijsten maken van de niveaus. Hou per niveau een lijst bij van de knopen op dat niveau, gesorteerd naar de toegekende getallen. Als n i het aantal knopen is op niveau i, dan kunnen 2, 3, 4 en 5 in tijd O(n i+1 ). De rest kan in tijd O(n i ). De som over alle niveaus geeft O(n). 47

48 3.2. Comparison-Based Sorteren We geven eerst een algemeen resultaat dat een benedengrens geeft voor de worst-case complexiteit van een willekeurig comparison-based sorteeralgoritme. Voor functies f, g: f Ω(g) d.e.s.d. als g O(f). Stelling. Elk comparison-based sorteeralgoritme heeft een worst-case tijdscomplexiteit in Ω(n log(n)). Bewijs: alle mogelijke uitvoeringen kunnen voorgesteld worden in een beslissingsboom. Elke uitvoering, voor een gegeven stel invoerwaarden, komt overeen met een rij van uitspraken van de vorm x i x j of not x i x j, waar de x i x j de uitgevoerde testen zijn. Al deze uitvoeringen vormen een binaire boom; de knopen hebben als label een test x i x j en de takken hebben als label true of false. 48

49 Elk stel invoerwaarden bepaalt een uitvoering, en dus een blad van de boom. Elke uitvoering berekent een permutatie, en er zijn n! permutaties, die allemaal kunnen voorkomen, dus de boom heeft tenminste n! bladeren. De hoogte van de boom is evenredig met het aantal stappen in de langste uitvoering. Voor een binaire boom met hoogte h en aantal bladeren m geldt m 2 h en dus h log(m). Voor m = n! dus log(n!), en O(log(n!) = O(n log(n)). 49

50 1. Mergesort Sorteer een rij elementen a 1, a 2,...,a n. Neem voorlopig aan dat n = 2 k voor zekere k. function sort(i, j); begin if i j then begin m := (i + j 1)/2; merge(sort(i, m), sort(m + 1, j)); end; end; Initiële aanroep: sort(1, n). m is altijd geheel (per inductie). 50

51 Tijdscomplexiteit: stel n = (j i+1), dus n is het aantal te sorteren elementen in een aanroep sort(i, j). merge gebruikt n 1 vergelijkingen. Dus geldt voor het aantal vergelijkingen T(n): T(n) = 1, als n = 1 = 2 T(n/2) + n 1, als n > 1. Bijgevolg T(n) O(n log(n)) (zie inleiding). De argumentatie kan aangepast worden voor alle stappen (niet enkel vergelijkingen) en voor willekeurige n. 51

52 2. Heapsort Een heap is een binaire boom, opgevuld niveau per niveau, van links naar rechts, waarvan elke knoop een element bevat, en zo dat, voor elk paar knopen v, w geldt: v parent van w element(v) element(w). Een heap met n elementen wordt vaak bijgehouden in een array van lengte n; de kinderen van plaats i staan dan op plaatsen 2i en 2i + 1. Gebruik van zo een heap in heapsort: Gegeven: n elementen a 1, a 2,..., a n in een array A[1..n]. Permuteer de elementen tot ze een heap vormen. Verwissel A[1] met A[n]. A[1] is het grootste element. Permuteer tot A[1],...,A[n 1] terug een heap vormen. enz. 52

53 procedure Maakheap(A); begin for i := n downto 1 do Heapify(A, i, n); end; procedure Heapify(A, i, j); begin if (a i is geen blad) and (a i < a 2i or a i < a 2i+1 ) then begin if a 2i < a 2i+1 then k := 2i + 1 else k := 2i; verwissel a i en a k ; Heapify(A, k, j); end; end; 53

54 Heapify(A, i, j) permuteert de elementen a i,..., a j tot ze weer een heap vormen, vertrekkend van een situatie waarbij enkel a i verkeerd staat. Lemma. Als a i+1, a i+2,..., a n wortels zijn van heaps, dan zullen na de oproep Heapify(A, i, n) de elementen a i, a i+1,...,a n wortels van heaps zijn. Bewijs: met neerwaartse inductie op i. i = n: Heapify(A, n, n) doet niets, a n is de wortel van een heap, ok. i < n en a i is een blad: Heapify(A, i, n) doet niets, ok. i < n en a i is geen blad: a i a 2i en a i a 2i+1 : Heapify(A, i, n) doet niets, ok. a 2i+1 a 2i en a i < a 2i : a i en a 2i worden verwisseld en Heapify(A, 2i, n) wordt aangeroepen; ok. a 2i < a 2i+1 en a i < a 2i+1 : a i en a 2i+1 worden verwisseld en Heapify(A, 2i + 1, n) wordt aangeroepen; ok. 54

55 Stelling. Maakheap(A) maakt een heap in O(n) tijd. Bewijs: het lemma impliceert dat Maakheap(A) een heap maakt. Laat T(h) de tijd zijn die nodig is voor Heapify(A, i, n) indien i op hoogte h in de heap zit: m.a.w. h takken boven het niveau van a n. Dan geldt T(h) = T(h 1) + c en T(0) = d, voor constanten c en d. Dus T(h) is O(h). In een volledige binaire boom met n knopen zijn er n/2 h+1 knopen op hoogte h, en dus zijn er ook in een heap met n knopen ten hoogste n/2 h knopen op hoogte h. Laat k de hoogte zijn van de heap, dan is de totale tijd dus aangezien h=1,..., O( k h=0 h n 2 h ) = O(n), h = 2 (cfr. introductie). 2h 55

56 Het sorteeralgoritme. begin Maakheap(A); for i := n downto 2 do begin verwissel a 1 en a i ; Heapify(A, 1, i 1); end; end Na afloop staan de a i in niet-dalende volgorde (bewijs per inductie). Stelling. Heapsort sorteert in O(n log(n)) tijd. Bewijs: Heapify(A, 1, i) vraagt O(log(i)) tijd, want de hoogte van een heap met i elementen is ten hoogste log(i). Voor de totale tijd heeft men dus O( n i=1 log(i)) = O(n log(n)). 56

57 Expected-time complexiteit van comparison-based sorteren Neem aan dat alle permutaties van de n invoerelementen even waarschijnlijk zijn. Stelling. Elk comparison-based sorteeralgoritme heeft expected-time complexiteit in Ω(n log(n)). Bewijs: de expected-time complexiteit van een sorteeralgoritme, voor een invoer van grootte n, is tenminste b B p b l b, waar B de verzameling van bladeren van de beslissingsboom is, p b de waarschijnlijkheid van blad b, en l b de lengte is van het pad van de root naar het blad b. Als alle bladeren even waarschijnlijk zijn is p b = p voor elk blad b, en wordt dat p b B Laat, voor een boom T en een natuurlijk getal m, D(T) en D(m) bepaald zijn door: l b. D(T) is de som b B l b voor de boom T, D(m) is de minimale waarde van D(T) voor bomen T met tenminste m bladeren. 57

58 We tonen (per inductie) aan dat D(m) m log(m). m = 1: ok. stel D(k) k log(k) voor elke k met k < m. Laat T een boom zijn met tenminste m bladeren. Laat T l en T r respectievelijk de linker- en de rechterdeelboom van T zijn. Stel dat i het aantal bladeren is van T l. Dan geldt D(T) = i + D(T l ) + (m i) + D(T r ). Bijgevolg geldt, per inductie, D(m) = min 1 i m (m + D(i) + D(m i)) m + min 1 i m (i log(i) + (m i) log(m i)). De functie (i log(i) + (m i) log(m i)) bereikt een minimum voor i = m/2, en dus D(m) m + m log(m/2) = m log(m). Voor de beslissingsboom van een sorteeralgoritme is m = n! en p = 1 n! en dus is de expected-time complexiteit voor een invoer van grootte n tenminste ( 1 ) n! log(n!) = log(n!). n! Het resultaat volgt nu uit O(log(n!)) = O(n log(n)). 58

59 3. Quicksort Het algoritme sorteert een rij S van elementen a 1, a 2,..., a n. function Quicksort(S); begin if S heeft maar één element then return(s) else begin Kies a random uit S; S 1 := de rij van elementen < a uit S; S 2 := de rij van elementen = a uit S; S 3 := de rij van elementen > a uit S; return(append(quicksort(s 1 ), S 2,Quicksort(S 3 )); end; end Voor dit algoritme is de orde van de expected-time complexiteit optimaal. 59

60 Stelling. Quicksort(S) ordent S in O(n log(n)) expected tijd. Bewijs: Neem aan dat alle elementen van S verschillend zijn. Voor n = 0 en n = 1 is de verwachte tijd een constante b; dus T(0) = T(1) = b. Voor n > 1 geldt dat er een constante c bestaat met: T(n) c n + ( 1 n ) n (T(i 1) + T(n i)) i=1 = c n + ( 2 n ) n 1 (T(i)). i=0 We tonen aan, per inductie, dat voor n > 1, Voor n = 2 geldt: T(n) 2(b + c) n log e (n). T(2) = 2(b + c) 2 (b + c) 2 log e (2). Voor n > 2: T(n) c n + ( 2 n ) n 1 (T(i)) i=0 c n + ( 4b n ) + (2 n ) n 1 i=2 c n + ( 4b n ) + (4(b+c) n ) n 1 2(b + c) i log e i i=2 i log e i c n + ( 4b n ) + (4(b+c) n ) n x log 2 ex dx 60

61 c n + ( 4b n ) + (4(b+c) n ) ( (n2 log e n) 2 n2 4 ) c n + ( 4b n ) + 2(b + c) n log en (b + c) n 2(b + c) n log e n Waar (2) volgt per inductie, (4) en (5) uit de elementaire analyse, en (7) uit 4 n n voor n > 2. De worst-case tijdscomplexiteit is O(n 2 ). 61

62 4. Het k-de element selecteren Gegeven is een rij S van n elementen a 1, a 2,...,a n uit een totaal geordende verzameling A, en een k met 1 k n. Gevraagd wordt het k-de element te selecteren, m.a.w. een element a zo dat er k 1 elementen a zijn. Een simplistische oplossing bestaat erin eerst S te sorteren, en dan het k-de element (in volgorde) van de gesorteerde rij te selecteren. We tonen aan dat er betere algoritmen bestaan, met O(n) worst-case tijdscomplexiteit. Laat S de lengte van de rij S zijn. 62

63 function Select(k, S); begin if S < 50 then begin sorteer S; return k-de element; end; else begin verdeel S in deelrijen van elk 5 elementen; sorteer elke deelrij; M := de rij gevormd door 3 de elementen van elke deelrij; m :=Select( M /2, M); S 1 := de rij van elementen < m in S; S 2 := de rij van elementen = m in S; S 3 := de rij van elementen > m in S; if S 1 k then return Select(k, S 1 ); else if ( S 1 + S 2 k) then return m; else return Select((k S 1 S 2 ), S 3 ); end 63

64 Stelling. Dit algoritme heeft worst-case tijdscomplexiteit in O(n). Bewijs: Het aantal elementen van M die m zijn is tenminste n/10. Voor elk van die elementen zijn er nog twee andere (per deelrij van 5) die m zijn. Dus het totaal aantal elementen m in S is tenminste 3 n/10. Voor n > 50 geldt dus S 1 n 3 n/10 < 3n/4. Bijgevolg ook S 1 3n/4. Men kan een analoge redenering maken voor S 3. De recursieve aanroepen op het einde van het algoritme vragen dus elk ten hoogste T( 3n/4 ) tijd. Er bestaat dus een constante zo dat T(n) c n, voor n < 50, en T(n) T( n/5 ) + T( 3n/4 ) + c n, voor n 50. Men kan eenvoudig per inductie bewijzen dat, voor elke n, T(n) 20c n. 64

65 Stelling. Elk comparison-based algoritme voor het selecteren van het k-de element heeft expected-time complexiteit Ω(n). Eerst wordt een hulpresultaat bewezen. Laat T de beslissingsboom zijn van een algoritme dat het k-de element selecteert uit elementen a 1,...,a n. Laat p een pad in T zijn van de wortel tot een blad. Definieer de relatie R p op de {a 1,...,a n } door: a i R p a j als er een knoop op p is die overeenkomt met een test waarin a i en a j vergeleken worden en die als resultaat geeft dat a i < a j of a i a j. Laat R + p de transitieve sluiting zijn van R p. Lemma. Als het blad van p overeenkomt met de beslissing dat a m het k-de element is, dan geldt voor alle i met i m dat a i R + p a m of a m R + p a i. Bewijs: Stel dat er een element a i is met niet a i R + p a m en niet a m R + p a i. Dan kan men voor de a 1,..., a n twee concrete stellen waarden kiezen zó dat in het ene geval de waarde van a i net vóór die van a m ligt, in het andere geval net na die van a m, en dat alleen de waarde van a i in de twee gevallen verschillend is. Dit levert duidelijk een contradictie op: a m kan niet in beide gevallen het k-de element zijn. 65

66 Bewijs van de stelling: toon aan dat elk blad van de beslissingsboom T tenminste op afstand n 1 van de wortel ligt. Beschouw weer een blad en een pad p zoals voor het lemma. p bepaalt de relaties R p en R + p. Laat, voor elke i m, de hoofdknoop van i de eerste knoop zijn op p waar één van volgende dingen gebeurt: a i wordt vergeleken met a m, a i wordt vergeleken met a j, a i R p a j en er geldt a j R + p a m, a i wordt vergeleken met a j, a j R p a i en er geldt a m R + p a j. Uit het lemma volgt dat elke i m een hoofdknoop heeft. Een knoop kan geen hoofdknoop zijn van twee verschillende i, en dus volgt het resultaat. De benedengrens voor de expected-time complexiteit wordt al bereikt (op een constante na) voor het volgende, eenvoudige algoritme. 66

67 function Select(k, S); begin if S = 1 then return a 1 else begin kies m random in S; S 1 := de rij van elementen < m in S; S 2 := de rij van elementen = m in S; S 3 := de rij van elementen > m in S; if S 1 k then return Select(k, S 1 ); else if ( S 1 + S 2 k) then return m; else return Select((k S 1 S 2 ), S 3 ); end Stelling. De expected tijd van dit algoritme is in O(n). Bewijs: bekijk eerst de tijd nodig voor de recursieve oproepen. Als m het i-de element in volgorde van grootte is, dan vraagt de recursieve oproep T(n i) indien i < k en T(i 1) indien i k + 1. Dus gemiddeld wordt dat 1 n k 1 T(n i) + i=1 n i=k+1 T(i 1) 67

68 en, na wat herschikken, 1 n Bijgevolg geldt T(n) c n+max k n 1 i=n k+1 1 n T(i) + n 1 n 1 i=n k+1 i=k T(i). T(i) + n 1 i=k T(i). Men bewijst eenvoudig per inductie dat, als c zo gekozen is dat T(1) c, dan T(n) 4c n. 68

69 4. Grafen en Diskrete Structuren We beschouwen eerst het all pairs shortest path probleem. Door de labels van de takken van een graaf te nemen in een abstracte algebraische structuur, kunnen we een algemeen algoritme schrijven in termen van de operaties van die structuur. Door verschillende concrete modellen van de structuur te nemen bekomen we varianten van het algemene algoritme. De algebraische structuur die we nodig hebben is de volgende. Definitie. Een gesloten semiring is een structuur (S, +,,0,1) zodat (S, +) en (S, ) zijn monoiden (inwendig, associatief, neutraal element), en 0 en 1 zijn de neutrale elementen van (S, +) en (S, ), respectievelijk. + is commutatief en idempotent (a + b = b + a en a + a = a). 0 a = 0 = a 0. is distributief t.o.v. +. Aftelbare sommen i a i bestaan en zijn uniek. 69

70 De distributiviteit kan uitgebreid worden tot aftelbare sommen, m.a.w. ( i a i ) ( j b j ) = i,j a i b j. In een gesloten semiring wordt a gedefinieerd door: a = 1 + a + a a + a a a + Enkele voorbeelden: S 1 = ({0, 1}, +,, 0, 1), met + en de booleaanse operaties In dit geval is a = 1 voor elke a. S 2 = (R, min, +,, 0), waar R de sluiting van de niet-negatieve reële getallen is, en min en + dus de rol spelen van de + en, respectievelijk, uit de definitie. Hier geldt a = 0 voor elke a. S 3 = (F Σ,,,, {ɛ}), waar F Σ de verzameling van alle talen over Σ is, de concatenatie van talen en ɛ het lege woord. 70

71 Laat G = (V, E) een gerichte graaf zijn. Elke tak heeft als label een element van een gesloten semiring (S, +,,0,1). We kennen labels toe aan paden: een pad met lengte 0 krijgt label 1, en voor de andere paden neemt men het product van de labels van de takken. Stel, voor v, w V, c(v, w) gelijk aan de som van de labels van de paden van v naar w. Een algoritme om de c(v, w) te berekenen, voor een willekeurige S, is het volgende. 71

72 Gegeven: een graaf G = (V, E), met V = {v 1,... v n }, en een labeling functie l : V V (S, +,,0,1) met l(v i, v j ) = 0 als (v i, v j ) / E. Gevraagd: c(v i, v j ), voor elke i en j. begin for i := 1 to n do Cii 0 = 1 + l(v i, v i ); for i := 1 to n do for j := 1 to n do if i j then Cij 0 = l(v i, v j ); for k := 1 to n do for i := 1 to n do for j := 1 to n do C k ij := C k 1 ij + C k 1 ik for i := 1 to n do for j := 1 to n do c(v i, v j ) := C n ij end (C k 1 kk ) C k 1 kj ; 72

73 Stelling. Dit algoritme is correct en heeft worst-case complexiteit O(n 3 ), in de veronderstelling dat de operaties +, en maar een constante tijd in beslag nemen. Bewijs: de correctheid volgt uit het feit dat C k ij de som is van de labels van alle paden van v i naar v j met de eigenschap dat alle tussenliggende knopen behoren tot {v 1,..., v k }. Dat de tijdscomplexiteit in O(n 3 ) is, is evident. Speciale gevallen. Berekenen of er al dan niet een pad bestaat van v naar w, voor elk paar knopen v, w: neem de semiring S 1 en laat l(v, w) = 1 als (v, w) E en l(v, w) = 0 anders. Er komt dan op lijn 9 van het algoritme: C k ij := Ck 1 ij a {0, 1}. + C k 1 ik C k 1 kj, want a = 1 voor elke Berekenen van het kortste pad van v naar w, voor elk paar knopen v, w: neem de semiring S 2 en laat l(v, w) de lengte zijn van de tak (v, w). Op lijn 9 komt er dan: Cij k := min(cij k 1, Cik k 1 +Ckj k 1 ), want a = 0 voor elke a (0 speelt de rol van 1 in de definitie van gesloten semiring). 73

74 Een graaf G = (V, E) met n knopen en labeling l zoals in het voorgaande kan voorgesteld worden door een n n matrix A G met elementen l(v i, v j ) (adjacency matrix). Er is een nauw verband tussen het berekenen van de c(v i, v j ) en de vermenigvuldiging van matrices. Meer bepaald geldt het volgende. Als (S, +,,0,1) een gesloten semiring is, dan is de verzameling van n n matrices over S dat ook (+ is de componentsgewijze som, en is het matrixproduct). Het (i, j)-de element van A G A G A G (k keer) is de som van de labels van de paden van lengte k van v i naar v j. Bijgevolg is het (i, j)-de element van (A G ) gelijk aan c(v i, v j ). Het berekenen van het product van twee n n matrices over S en het berekenen van van een n n matrix over S zijn taken die computationeel equivalent zijn: op basis van een algoritme voor de ene taak kan men een algoritme construeren voor de andere, en zo dat de worst-case complexiteit slechts met een constante factor toeneemt. 74

75 Wanneer men een ring neemt in de plaats van een gesloten semiring (+ heeft inverse elementen), dan kan het matrixproduct in O(n (log7) ), wat beter is dan O(n 3 ). 75

76 Het single source shortest path probleem kan in minder tijd opgelost worden. Gegeven is een gerichte graaf G = (V, E), een knoop v 0 V, en een labeling functie l : V V R zodat l(v, v) = 0, voor elke v V, l(v, w) =, voor elke v, w V met v w en (v, w) / E, en l(v, w) 0 als v w. We gebruiken dus semiring S 2. Gevraagd is om c(v 0, v) te berekenen voor elke v, m.a.w. de kost van het goedkoopste pad van v 0 naar v. 76

77 Algoritme van Dijkstra: begin S := {v 0 }; D[v 0 ] := 0; for elke v V \ {v 0 } do D[v] := l(v 0, v); while S V do begin kies w V \ S met D[w] minimaal; S := S {w}; for elke v V \ S do D[v] := min(d[v], D[w] + l(w, v)); end; end 77

78 Stelling. Het algoritme is correct en heeft worst-case tijdscomplexiteit in O(n 2 ). Bewijs: het is evident dat de tijdscomplexiteit O(n 2 ) is. De correctheid volgt uit het feit dat na lijn 9 de volgende invariant geldt: Voor elke v S is D[v] de kost van het goedkoopste pad van v 0 tot v, en voor elke v V \ S is D[v] de kost van het goedkoopste pad van v 0 tot v dat, met uitzondering van v zelf, in S ligt. Dit wordt bewezen per inductie naar het aantal elementen van S. S = {v 0 }: ok. Stel dat w is toegevoegd, dus S = S {w}. v S : ok. v V \ S, v w: de paden die, op v na, in S liggen, maar niet in S, zijn paden die eindigen met (w, v), en die worden in lijn 9 correct in rekening gebracht. 78

79 v = w: stel dat er een goedkoper pad p zou zijn van v 0 naar w, dus met kost kleiner dan D[w]. Dan bevat p een knoop w buiten S, per inductie. Stel dat u de eerste dergelijke knoop op p is. Dan geldt per inductie dat D[u] < kost van p < D[w], maar dat is in strijd met de manier waarop w gekozen is. 79

80 5. Woorden en Reguliere Uitdrukkingen Woorden (rijen symbolen) zijn veruit de meest voorkomende discrete structuur. Sets van woorden (talen) kunnen eenvoudig gespecifieerd worden met reguliere uitdrukkingen; deze komen overeen met eindige automaten. We bekijken een algoritme voor het opzoeken van deelwoorden dat gebaseerd is op deze technieken. De reguliere uitdrukkingen over een alfabet Σ zijn gedefinieerd als volgt. is een r.u, en stelt de lege taal voor. ɛ is een r.u, en stelt de taal {ɛ} voor, waar ɛ het lege woord is. Voor elke a Σ is a een r.u, en stelt de taal {a} voor. Als u en w r.u. zijn die respectievelijk de talen U en W voorstellen, dan zijn (u + w), (u w) en (u ) r.u, die respectievelijk de talen U W, U W en U voorstellen. We spreken af dat de hoogste prioriteit heeft, dan en dan +, zodat we een deel van de haakjes kunnen weglaten 80

81 zonder dubbelzinnigheid in te voeren. Verder laten we soms gewoon weg, schrijven we w n voor w w w (n keer w), en voor een eindige verzameling A = {a 1,... a n } gebruiken we soms A voor a a n. Een niet-deterministische eindige automaat (NDFA) is een 5-tupel (Q, Σ, δ, q 0, F), met Q een eindige verzameling van toestanden, Σ een eindig alfabet, δ : Q (Σ {ɛ}) 2 Q de transitiefunctie, q 0 Q de begintoestand en F Q de verzameling van eindtoestanden. Stelling. Voor elke reguliere uitdrukking u kan er in O( u ) tijd een NDFA geconstrueerd worden die de taal voorgesteld door u aanvaardt. De NDFA heeft ten hoogste 2 u toestanden en vanuit elke toestand zijn er ten hoogste 2 verschillende stappen mogelijk (m.a.w, voor elke q is de som van de aantallen elementen in de δ(q, x) ten hoogste 2, waar de som genomen wordt over alle x Σ {ɛ}). 81

82 Stel dat men een algoritme wenst om te beslissen of een gegeven woord x = a 1 a 2... a n in Σ behoort tot de taal van een gegeven r.u. w. Een eerste oplossing bestaat erin de NDFA om te vormen tot een DFA en dan te testen of die x aanvaardt. Het nadeel daarven is dat de algemene constructie van een DFA voor een NDFA gebaseerd is op de vervanging van de toestandsverzameling Q door 2 Q, met als gevolg dat de constructie exponentieel afhangt van u. Daarom is het volgende algoritme beter (zie ook compilers ). 82

83 begin construeer de NDFA van w; for i := 1 to n do begin if i = 0 then Q i := {q 0 } else Q i := q Qi 1 δ(q, a i ); for elke q Q do klaar[q] := (q Q i ); Queue := Q i ; while Queue niet leeg do begin haal het eerste element t uit Queue; for elke u δ(t, ɛ) do if not klaar[u] then begin klaar[u] := true; voeg u toe aan Queue en Q i ; end; end; end; return F Q n ; end; 83

84 Stelling. Als m de lengte is van de reguliere uitdrukking w, dan heeft dit algoritme O(m n) tijd nodig. Bewijs: lijn 2 kan in O(m). Het deel binnen de for-lus (berekenen van de ɛ-sluiting) kan ook in O(m), want elke q komt ten hoogste één keer in Queue en op lijn 11 zijn er ten hoogste 2 u s. Beschouw nu een nog meer voorkomend probleem: het opzoeken van een woord y = b 1... b l in een ander woord x = a 1...a n. Gewoonlijk is n veel groter dan l. We kunnen het voorgaande resultaat toepassen: y komt voor in x d.e.s.d. als x behoort tot de taal van de r.u. Σ y Σ. Dat levert dus een tijdscomplexiteit in O(l n) op. We geven een beter algoritme dat in O(l + n) werkt. 84

85 Definitie. De falingsfunctie van een woord b 1... b l is de functie f : {1,...,l} {0,..., l 1} zodat, voor elke i met 1 i l, f(i) de grootste index is waarvoor b 1... b f(i) een echte suffix is van b 1... b i. Voorbeeld: voor het woord aabbaaba is f gegeven door: i f(i) Het algoritme is een deterministische eindige automaat M y met l + 1 toestanden, die x als invoer krijgt. Er zijn zowel gewone als ɛ-stappen, maar we spreken af dat er maar een ɛ-stap genomen wordt als er geen andere stap mogelijk is. De automaat is dus wel degelijk deterministisch. Het algoritme zal het de eerste occurrence van y in x vinden, als die bestaat l 1 l b 1 b 2 b 3 b l notb 1 Figuur 3: basisstructuur van M y 85

86 ɛ ɛ ɛ a a b b a b ɛ a ɛ 6 ɛ b 7 Figuur 4: M y voor y = aabbaab Als het algoritme in toestand i is op het ogenblik dat de j- de letter van x gelezen wordt, dan betekent dat: b 1...b i is de langste prefix van y die suffix is van a 1... a j. Als de volgende gelezen letter, a j+1, gelijk is aan b i+1, dan zal M y in de volgende stap naar toestand i + 1 gaan, maar als a j+1 b i+1, dan volgt er een ɛ-stap. Deze stap brengt M y naar de toestand q die overeenkomt met de op één na langste prefix van y die suffix is van a 1... a j. Dat is de langste prefix van y die echte suffix is van b 1...b i, en dus is q de toestand f(i). 86

87 De automaat M y kan ten hoogste n gewone stappen nemen. Voor wat de ɛ-stappen betreft: M y vertrekt in toestand 0, en elke ɛ-stap gaat van een toestand met hogere index naar een toestand met lagere index, want f(i) < i. De index kan echter maar n keer verhogen, want dat verhogen gebeurt enkel in de gewone stappen. Dus zijn er ook ten hoogste n ɛ-stappen. Besluit: M y doet ten hoogste 2n stappen. 87

88 Om het algoritme compleet te maken hebben we uiteraard ook een algoritme nodig om de falingsfunctie f te berekenen. begin f(1) := 0; for j := 2 to l do begin i := f(j 1); while (b j b i+1 ) and (i > 0) do i := f(i); if (b j b i+1 ) and (i = 0) then f(j) := 0 else f(j) := i + 1 end end In de toekenningen i := f(i) op lijn 6 wordt i verlaagd. De enige manier waarop i verhoogd wordt is de combinatie f(j) := i + 1 (lijn 8) j := j + 1 (lijn 3, for-lus) i := f(j 1) (lijn 5). 88

89 i is dan verhoogd met 1. Aangezien men begint met i = 0, wordt de body van de while-lus, i := f(i), ten hoogste l keer uitgevoerd. In combinatie met de eerdere beschouwingen over M y hebben we volgend resultaat. Stelling. Het algoritme bepaalt in O(l+n) tijd de eerste occurrence van y in x. 89

90 6. Intractability 6.1. P-TIME en NP-TIME In dit hoofdstuk bekijken we de complexiteit van problemen, en dus niet van individuele algoritmen. Meer bepaald bestuderen we klassen van problemen die in polynomiale tijd (deterministisch of niet-deterministisch) kunnen opgelost worden: P-TIME en NP-TIME. We gebruiken Turingmachines als berekeningsmodel; daarom moeten de problemen gecodeerd worden in woorden. Coderingen voor de structuren die we nodig hebben (grafen, sets, lijsten, enz.) zijn min of meer voor de hand liggend, en we nemen aan dat ze in polynomiale tijd in elkaar omgezet kunnen worden. Dat heeft voor gevolg dat we de coderingen buiten beschouwing kunnen laten. We bekijken beslissingsproblemen die voorgesteld worden d.m.v. talen. Een beslissingsprobleem is een functie P : I P {true, false}. De elementen van I P noemt men de instanties van P; 90

91 een instantie is dus een concrete mogelijke invoer voor P. Door de codering kunnen we I P zien als een verzameling van woorden; de taal die met P overeenkomt is dan de verzameling van alle woorden w waarvoor P(w) = true. Een groot aantal problemen kan op deze manier bestudeerd worden, zelfs als ze op het eerste gezicht niet van de juiste vorm zijn: bv. het optimalizatieprobleem bereken, in een gerichte graaf met een kost voor de pijlen, de kost van de goedkoopste cycle die alle knopen juist éénmaal bevat is nauw verbonden met het beslissingsprobleem (Traveling Salesman Problem, TS) is er, in een gerichte graaf met een kost voor de pijlen, een cycle die alle knopen juist éénmaal bevat en een kost heeft kleiner dan een gegeven getal k? 91

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

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort Algoritmiek 018/Algoritme van Dijkstra Elfde college algoritmiek 18 mei 018 Algoritme van Dijkstra, Heap, Heapify & Heapsort 1 Algoritmiek 018/Algoritme van Dijkstra Uit college 10: Voorb. -1- A B C D

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Zevende college complexiteit. 7 maart Mergesort, Ondergrens sorteren (Quicksort)

Zevende college complexiteit. 7 maart Mergesort, Ondergrens sorteren (Quicksort) College 7 Zevende college complexiteit 7 maart 2017 Mergesort, Ondergrens sorteren (Quicksort) 1 Inversies Definitie: een inversie van de permutatie A[1],A[2],...,A[n] is een paar (A[i],A[j]) waarvoor

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007 Uitgebreide uitwerking Tentamen Complexiteit, mei 007 Opgave. a. Een beslissingsboom beschrijft de werking van het betreffende algoritme (gebaseerd op arrayvergelijkingen) op elke mogelijke invoer. In

Nadere informatie

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort

Zevende college complexiteit. 17 maart Ondergrens sorteren, Quicksort College 7 Zevende college complexiteit 17 maart 2008 Ondergrens sorteren, Quicksort 1 Sorteren We bekijken sorteeralgoritmen gebaseerd op het doen van vergelijkingen van de vorm A[i] < A[j]. Aannames:

Nadere informatie

Getallensystemen, verzamelingen en relaties

Getallensystemen, verzamelingen en relaties Hoofdstuk 1 Getallensystemen, verzamelingen en relaties 1.1 Getallensystemen 1.1.1 De natuurlijke getallen N = {0, 1, 2, 3,...} N 0 = {1, 2, 3,...} 1.1.2 De gehele getallen Z = {..., 4, 3, 2, 1, 0, 1,

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 7 Leo van Iersel Technische Universiteit Delft 26 oktober 2016 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 1 / 28 Deze week: analyseren van algoritmes Hoe

Nadere informatie

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Rick van der Zwet 8 december 2010 Samenvatting Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek [JS2009]

Nadere informatie

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Rick van der Zwet 13 november 2010 Samenvatting Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek [JS2009]

Nadere informatie

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

V = {a, b, c, d, e} Computernetwerken: de knopen zijn machines in het netwerk, de kanten zijn communicatiekanalen. WIS14 1 14 Grafen 14.1 Grafen Gerichte grafen Voor een verzameling V is een binaire relatie op V een verzameling geordende paren van elementen van V. Voorbeeld: een binaire relatie op N is de relatie KleinerDan,

Nadere informatie

Negende college complexiteit. 9 april NP-volledigheid I: introductie

Negende college complexiteit. 9 april NP-volledigheid I: introductie College 9 Negende college complexiteit 9 april 2019 NP-volledigheid I: introductie 1 Handelbaar/onhandelbaar -1- N 10 50 100 300 1000 log 2 N 3 5 6 8 9 5N 50 250 500 1500 5000 N log 2 N 33 282 665 2469

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 7 Leo van Iersel Technische Universiteit Delft 21 oktober 2015 Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 1 / 20 Deze week: algoritmes en complexiteit

Nadere informatie

Stelling. SAT is NP-compleet.

Stelling. SAT is NP-compleet. Het bewijs van de stelling van Cook Levin zoals gegeven in het boek van Sipser gebruikt niet-deterministische turing machines. Het is inderdaad mogelijk de klasse NP op een alternatieve wijze te definiëren

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 11 Leo van Iersel Technische Universiteit Delft 25 november 2015 Leo van Iersel (TUD) TW2020 Optimalisering 25 november 2015 1 / 28 Vandaag Vraag Voor welke problemen

Nadere informatie

Vierde college algoritmiek. 23/24 februari Complexiteit en Brute Force

Vierde college algoritmiek. 23/24 februari Complexiteit en Brute Force Algoritmiek 2017/Complexiteit Vierde college algoritmiek 23/24 februari 2017 Complexiteit en Brute Force 1 Algoritmiek 2017/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:

Nadere informatie

Zesde college complexiteit. 19 maart Mergesort, Ondergrens sorteren Quicksort, Shellsort

Zesde college complexiteit. 19 maart Mergesort, Ondergrens sorteren Quicksort, Shellsort College 6 Zesde college complexiteit 19 maart 2019 Mergesort, Ondergrens sorteren Quicksort, Shellsort 1 Vorige keer Voor sorteeralgoritmen gebaseerd op arrayvergelijkingen, waarbij per arrayvergelijking

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017 Uitgebreide uitwerking Tentamen Complexiteit, juni 017 Opgave 1. a. Een pad van de wortel naar een blad stelt de serie achtereenvolgende arrayvergelijkingen voor die het algoritme doet op zekere invoer.

Nadere informatie

(On)Doenlijke problemen

(On)Doenlijke problemen Fundamentele Informatica In3 005 Deel 2 College 1 Cees Witteveen Parallelle en Gedistribueerde Systemen Faculteit Informatie Technologie en Systemen Overzicht Inleiding - Relatie Deel 1 en Deel 2 - Doenlijke

Nadere informatie

Kortste Paden. Algoritmiek

Kortste Paden. Algoritmiek Kortste Paden Toepassingen Kevin Bacon getal Six degrees of separation Heeft een netwerk de small-world eigenschap? TomTom / Google Maps 2 Kortste paden Gerichte graaf G=(N,A), en een lengte L(v,w) voor

Nadere informatie

Automaten & Complexiteit (X )

Automaten & Complexiteit (X ) Automaten & Complexiteit (X 401049) Inleiding Jeroen Keiren j.j.a.keiren@vu.nl VU University Amsterdam Materiaal Peter Linz An Introduction to Formal Languages and Automata (5th edition) Jones and Bartlett

Nadere informatie

Automaten en Berekenbaarheid 2016 Oplossingen #4

Automaten en Berekenbaarheid 2016 Oplossingen #4 Automaten en Berekenbaarheid 2016 Oplossingen #4 28 oktober 2016 Vraag 1: Toon aan dat de klasse van context vrije talen gesloten is onder concatenatie en ster. Antwoord Meerdere manieren zijn mogelijk:

Nadere informatie

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

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument Complexiteit 2019/04 College 4 Vierde college complexiteit 26 februari 2019 Beslissingsbomen en selectie Toernooimethode Adversary argument 1 Complexiteit 2019/04 Zoeken: samengevat Ongeordend lineair

Nadere informatie

1 Complexiteit. of benadering en snel

1 Complexiteit. of benadering en snel 1 Complexiteit Het college van vandaag gaat over complexiteit van algoritmes. In het boek hoort hier hoofdstuk 8.1-8.5 bij. Bij complexiteitstheorie is de belangrijkste kernvraag: Hoe goed is een algoritme?

Nadere informatie

Kortste Paden. Algoritmiek

Kortste Paden. Algoritmiek Kortste Paden Vandaag Kortste Paden probleem All pairs / Single Source / Single Target versies DP algoritme voor All Pairs probleem (Floyd s algoritme) Dijkstra s algoritme voor Single Source Negatieve

Nadere informatie

Tweede college complexiteit. 12 februari Wiskundige achtergrond

Tweede college complexiteit. 12 februari Wiskundige achtergrond College 2 Tweede college complexiteit 12 februari 2019 Wiskundige achtergrond 1 Agenda vanmiddag Floor, Ceiling Rekenregels logaritmen Tellen Formele definitie O, Ω, Θ met voorbeelden Stellingen over faculteiten

Nadere informatie

Zevende college algoritmiek. 24 maart Verdeel en Heers

Zevende college algoritmiek. 24 maart Verdeel en Heers Zevende college algoritmiek 24 maart 2016 Verdeel en Heers 1 Verdeel en heers 1 Divide and Conquer 1. Verdeel een instantie van het probleem in twee (of meer) kleinere instanties 2. Los de kleinere instanties

Nadere informatie

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 ) OI 2010 Finale 12 Mei 2010 Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub VOORNAAM :....................................................... NAAM :..............................................................

Nadere informatie

Zevende college Algoritmiek. 6 april Verdeel en Heers

Zevende college Algoritmiek. 6 april Verdeel en Heers Zevende college Algoritmiek 6 april 2018 Verdeel en Heers 1 Algoritmiek 2018/Backtracking Programmeeropdracht 2 Puzzel 2: D O N A L D G E R A L D + R O B E R T Elke letter stelt een cijfer voor (0,1,...,9)

Nadere informatie

Elfde college complexiteit. 23 april NP-volledigheid III

Elfde college complexiteit. 23 april NP-volledigheid III college 11 Elfde college complexiteit 23 april 2019 NP-volledigheid III 1 TSP Als voorbeeld bekijken we het Travelling Salesman/person Problem, ofwel het Handelsreizigersprobleem TSP. Hiervoor geldt: TSP

Nadere informatie

Zevende college algoritmiek. 23/24 maart Verdeel en Heers

Zevende college algoritmiek. 23/24 maart Verdeel en Heers Zevende college algoritmiek 23/24 maart 2017 Verdeel en Heers 1 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht 0 1 2 3 0 1 2 3 4 1 2 3 4 5 2 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, juni 2018

Uitgebreide uitwerking Tentamen Complexiteit, juni 2018 Uitgebreide uitwerking Tentamen Complexiteit, juni 018 Opgave 1. a. Een pad van de wortel naar een blad stelt de serie achtereenvolgende arrayvergelijkingen voor die het algoritme doet op zekere invoer.

Nadere informatie

Datastructuren en algoritmen voor CKI

Datastructuren en algoritmen voor CKI Datastructuren en algoritmen voor CKI Jeroen Bransen 1 11 september 2015 1 met dank aan Hans Bodlaender en Gerard Tel Heaps en heapsort Heap 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1 16 14 10 8 7 9 3

Nadere informatie

Logische Complexiteit Hoorcollege 12

Logische Complexiteit Hoorcollege 12 Logische Complexiteit Hoorcollege 12 Jacob Vosmaer Bachelor CKI, Universiteit Utrecht 22 maart 2011 Tijdscomplexiteit Inleiding Grote O en kleine o Complexiteitsanalyse van een simpele taal Complexiteitsverschillen

Nadere informatie

Vierde college complexiteit. 14 februari Beslissingsbomen

Vierde college complexiteit. 14 februari Beslissingsbomen College 4 Vierde college complexiteit 14 februari 2017 Restant zoeken Beslissingsbomen 1 Binair zoeken Links := 1; Rechts := n; while Links Rechts do Midden := Links + Rechts 2 ; if X = A[Midden] then

Nadere informatie

Automaten. Informatica, UvA. Yde Venema

Automaten. Informatica, UvA. Yde Venema Automaten Informatica, UvA Yde Venema i Inhoud Inleiding 1 1 Formele talen en reguliere expressies 2 1.1 Formele talen.................................... 2 1.2 Reguliere expressies................................

Nadere informatie

Derde college complexiteit. 7 februari Zoeken

Derde college complexiteit. 7 februari Zoeken College 3 Derde college complexiteit 7 februari 2017 Recurrente Betrekkingen Zoeken 1 Recurrente betrekkingen -1- Rij van Fibonacci: 0,1,1,2,3,5,8,13,21,... Vanaf het derde element: som van de voorgaande

Nadere informatie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie Discrete Structuren Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 22 februari 2009 INDUCTIE & RECURSIE Paragrafen 4.3-4.6 Discrete Structuren Week 3:

Nadere informatie

IN2505 II Berekenbaarheidstheorie. IN2505-II Berekenbaarheidstheorie. Practicum: Inschrijven. Practicum

IN2505 II Berekenbaarheidstheorie. IN2505-II Berekenbaarheidstheorie. Practicum: Inschrijven. Practicum IN2505 II Berekenbaarheidstheorie College 1 Algoritmiekgroep Faculteit EWI TU Delft 7 april 2009 Docent: Colleges/oefeningen: dinsdag 5 + 6 (EWI-A), vrijdag 1 + 2 (AULA-A) Boek: Michael Sipser, Introduction

Nadere informatie

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek Divide & Conquer: Verdeel en Heers vervolg Algoritmiek Algoritmische technieken Vorige keer: Divide and conquer techniek Aantal toepassingen van de techniek Analyse met Master theorem en substitutie Vandaag:

Nadere informatie

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.

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. Grafen Grafen Een graaf bestaat uit een verzameling punten (ook wel knopen, of in het engels vertices genoemd) en een verzameling kanten (edges) of pijlen (arcs), waarbij de kanten en pijlen tussen twee

Nadere informatie

Datastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46

Datastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46 Datastructuren Analyse van algoritmen José Lagerberg FNWI, UvA José Lagerberg (FNWI, UvA) Datastructuren 1 / 46 Datastructuren en Algoritmen Datastructuren, 6 ECTS eerstejaars Bachelor INF Datastructuren,

Nadere informatie

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Hoofdstuk 8: Algoritmen en Complexiteit

Hoofdstuk 8: Algoritmen en Complexiteit Hoofdstuk 8: Algoritmen en Complexiteit Vandaag: Hoe meten we de performance van algoritmen? Waar ligt de grens tussen een goed en een slecht algoritme? 22 oktober 2014 1 Vandaag: Hoe meten we de performance

Nadere informatie

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie Complexiteit 2016/04 College 4 Vierde college complexiteit 16 februari 2016 Beslissingsbomen en selectie 1 Complexiteit 2016/04 Zoeken: samengevat Ongeordend lineair zoeken: Θ(n) sleutelvergelijkingen

Nadere informatie

Paradox van zelfreproductie. IN2505-II Berekenbaarheidstheorie. Zelfreproductie? Programma s en zelfreproductie. College 11.

Paradox van zelfreproductie. IN2505-II Berekenbaarheidstheorie. Zelfreproductie? Programma s en zelfreproductie. College 11. Paradox van zelfreproductie College 11 Algoritmiekgroep Faculteit EWI TU Delft 27 mei 2009 1 Levende wezens zijn machines. 2 Levende wezens kunnen zich reproduceren. 3 Machines kunnen zich niet reproduceren.

Nadere informatie

Automaten en Berekenbaarheid

Automaten en Berekenbaarheid Automaten en Berekenbaarheid Bart Demoen KU Leuven 2016-2017 Les 2: 20-35 reguliere expressies NFA DFA minimalisatie Van RE naar NFA I 2/11 structureel (als algebra s) zijn RegExp en de NFA s gelijk voor

Nadere informatie

Discrete Wiskunde 2WC15, Lente Jan Draisma

Discrete Wiskunde 2WC15, Lente Jan Draisma Discrete Wiskunde 2WC15, Lente 2010 Jan Draisma HOOFDSTUK 2 Gröbnerbases 1. Vragen We hebben gezien dat de studie van stelsels polynoomvergelijkingen in meerdere variabelen op natuurlijke manier leidt

Nadere informatie

Derde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte

Derde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte Algoritmiek 2018/Complexiteit Derde college algoritmiek 2 februari 2018 Complexiteit Toestand-actie-ruimte 1 Algoritmiek 2018/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:

Nadere informatie

Doorzoeken van grafen. Algoritmiek

Doorzoeken van grafen. Algoritmiek Doorzoeken van grafen Algoritmiek Vandaag Methoden om door grafen te wandelen Depth First Search Breadth First Search Gerichte Acyclische Grafen en topologische sorteringen 2 Doolhof start eind 3 Depth

Nadere informatie

Tweede college algoritmiek. 12 februari Grafen en bomen

Tweede college algoritmiek. 12 februari Grafen en bomen College 2 Tweede college algoritmiek 12 februari 2016 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices)

Nadere informatie

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie Discrete Structuren Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 3 maart 2008 GRAFEN & BOMEN Paragrafen 6.1-6.4 Discrete Structuren

Nadere informatie

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3 Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3 Koen Rutten, Aris van Dijk 30 mei 2007 Inhoudsopgave 1 Verzamelingen 2 1.1 Definitie................................ 2 1.2 Eigenschappen............................

Nadere informatie

IN2505 II Berekenbaarheidstheorie Tentamen Maandag 2 juli 2007, uur

IN2505 II Berekenbaarheidstheorie Tentamen Maandag 2 juli 2007, uur TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica Mekelweg 4 2628 CD Delft IN2505 II Berekenbaarheidstheorie Tentamen Maandag 2 juli 2007, 14.00-17.00 uur BELANGRIJK Beschikbare

Nadere informatie

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

Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4 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

Nadere informatie

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

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify Algoritmiek 2016/Branch & Bound Twaalfde college algoritmiek 13 mei 2016 Branch & Bound Heap, Heapsort & Heapify 1 Algoritmiek 2016/Branch & Bound TSP met Branch & Bound Mogelijke ondergrenzen voor de

Nadere informatie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie Discrete Structuren Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 23 februari 2009 GRAFEN & BOMEN Paragrafen 6.1-6.4 Discrete Structuren Week 3 en 4:

Nadere informatie

Module Limieten van de berekenbaarheid : antwoorden

Module Limieten van de berekenbaarheid : antwoorden Module Limieten van de berekenbaarheid : antwoorden Gilles Coremans 2018 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license. Dit werk is gebaseerd

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 28 oktober 2015 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 1 / 25 Definitie Een boom is een samenhangende

Nadere informatie

8. Complexiteit van algoritmen:

8. Complexiteit van algoritmen: 8. Complexiteit van algoritmen: Voorbeeld: Een gevaarlijk spel 1 Spelboom voor het wespenspel 2 8.1 Complexiteit 4 8.2 NP-problemen 6 8.3 De oplossing 7 8.4 Een vuistregel 8 In dit hoofdstuk wordt het

Nadere informatie

Vorig college. IN2505-II Berekenbaarheidstheorie. Turingmachines. Turingmachine en Taal. College 2

Vorig college. IN2505-II Berekenbaarheidstheorie. Turingmachines. Turingmachine en Taal. College 2 Vorig college College 2 Algoritmiekgroep Faculteit EWI TU Delft Welke problemen zijn (niet) algoritmisch oplosbaar? Wat is een probleem? Wat is een algoritme? 13 april 2009 1 2 Turingmachines Turingmachine

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 2 november 2016 Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 1 / 28 Minimum Opspannende Boom (Minimum Spanning

Nadere informatie

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument Complexiteit 2017/05 College 5 Vijfde college complexiteit 21 februari 2017 Selectie Toernooimethode Adversary argument 1 Complexiteit 2017/05 Opgave 28 Gegeven twee oplopend gesorteerde even lange rijen

Nadere informatie

Aanvullingen bij Hoofdstuk 8

Aanvullingen bij Hoofdstuk 8 Aanvullingen bij Hoofdstuk 8 8.5 Definities voor matrices De begrippen eigenwaarde eigenvector eigenruimte karakteristieke veelterm en diagonaliseerbaar worden ook gebruikt voor vierkante matrices los

Nadere informatie

We beginnen met de eigenschappen van de gehele getallen.

We beginnen met de eigenschappen van de gehele getallen. II.2 Gehele getallen We beginnen met de eigenschappen van de gehele getallen. Axioma s voor Z De gegevens zijn: (a) een verzameling Z; (b) elementen 0 en 1 in Z; (c) een afbeelding +: Z Z Z, de optelling;

Nadere informatie

3 De stelling van Kleene

3 De stelling van Kleene 18 3 De stelling van Kleene Definitie 3.1 Een formele taal heet regulier als hij wordt herkend door een deterministische eindige automaat. Talen van de vorm L(r) met r een reguliere expressie noemen we

Nadere informatie

Oefeningen voor de oefeningenles. Oefening 1

Oefeningen voor de oefeningenles. Oefening 1 Oefeningen voor de oefeningenles Oefening 1 Gegeven een arbitraire binaire zoekboom T met n toppen en een (andere of gelijke) binaire zoekboom T die ook n sleutels bevat. Beschrijf een algoritme dat in

Nadere informatie

Datastructuren en Algoritmen

Datastructuren en Algoritmen Datastructuren en Algoritmen Tentamen Vrijdag 6 november 2015 13.30-16.30 Toelichting Bij dit tentamen mag je gebruik maken van een spiekbriefje van maximaal 2 kantjes. Verder mogen er geen hulpmiddelen

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

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

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra Algoritmiek 017/Gretige Algoritmen Tiende college algoritmiek 13/1 april 017 Gretige Algoritmen Algoritme van Dijkstra 1 Algoritmiek 017/Gretige Algoritmen Muntenprobleem Gegeven onbeperkt veel munten

Nadere informatie

Automaten & Complexiteit (X )

Automaten & Complexiteit (X ) Automaten & Complexiteit (X 401049) Beschrijven van reguliere talen Jeroen Keiren j.j.a.keiren@gmail.com VU University Amsterdam 5 Februari 2015 Talen Vorig college: Talen als verzamelingen Eindige automaten:

Nadere informatie

Tentamen in2505-ii Berekenbaarheidstheorie

Tentamen in2505-ii Berekenbaarheidstheorie TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica Tentamen in2505-ii Berekenbaarheidstheorie 16 juni 2008, 14.00 17.00 uur Dit tentamen bestaat uit 5 open vragen. Totaal

Nadere informatie

Beslisbare talen (1) IN2505-II Berekenbaarheidstheorie. Beslisbare talen (2) Beslisbare talen (3) De talen: College 7

Beslisbare talen (1) IN2505-II Berekenbaarheidstheorie. Beslisbare talen (2) Beslisbare talen (3) De talen: College 7 Beslisbare talen (1) College 7 Algoritmiekgroep Faculteit EWI TU Delft 10 mei 2009 De talen: A DFA = { M, w M is een DFA die w accepteert} A NFA = { M, w M is een NFA die w accepteert} E DFA = { M M is

Nadere informatie

Derde college algoritmiek. 22 februari Complexiteit Toestand-actie-ruimte

Derde college algoritmiek. 22 februari Complexiteit Toestand-actie-ruimte Algoritmiek 2019/Complexiteit Derde college algoritmiek 22 februari 2019 Complexiteit Toestand-actie-ruimte 1 Algoritmiek 2019/Complexiteit Opgave 1 bomenpracticum Niet de bedoeling: globale (member-)variabele

Nadere informatie

Automaten en Berekenbaarheid

Automaten en Berekenbaarheid Automaten en Berekenbaarheid Bart Demoen KU Leuven 2016-2017 Les 8: 118-125 orakels en reducties met orakels Turing-berekenbare functies de bezige bever Orakelmachines I 2/14 we kennen al: een TM die een

Nadere informatie

Het minimale aantal sleutels op niveau h is derhalve

Het minimale aantal sleutels op niveau h is derhalve 1 (a) In een B-boom van orde m bevat de wortel minimaal 1 sleutel en maximaal m 1 sleutels De andere knopen bevatten minimaal m 1 sleutels en maximaal m 1 sleutels (b) In een B-boom van orde 5 bevat elke

Nadere informatie

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

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur Tentamen Discrete Wiskunde 0 april 0, :00 7:00 uur Schrijf je naam op ieder blad dat je inlevert. Onderbouw je antwoorden, met een goede argumentatie zijn ook punten te verdienen. Veel succes! Opgave.

Nadere informatie

V.4 Eigenschappen van continue functies

V.4 Eigenschappen van continue functies V.4 Eigenschappen van continue functies We bestuderen een paar belangrijke stellingen over continue functies. Maxima en minima De stelling over continue functies die we in deze paragraaf bewijzen zegt

Nadere informatie

Ter Leering ende Vermaeck

Ter Leering ende Vermaeck Ter Leering ende Vermaeck 15 december 2011 1 Caleidoscoop 1. Geef een relatie op Z die niet reflexief of symmetrisch is, maar wel transitief. 2. Geef een relatie op Z die niet symmetrisch is, maar wel

Nadere informatie

2 Recurrente betrekkingen

2 Recurrente betrekkingen WIS2 1 2 Recurrente betrekkingen 2.1 Fibonacci De getallen van Fibonacci Fibonacci (= Leonardo van Pisa), 1202: Bereken het aantal paren konijnen na één jaar, als 1. er na 1 maand 1 paar pasgeboren konijnen

Nadere informatie

1 Recurrente betrekkingen

1 Recurrente betrekkingen WIS1 1 1 Recurrente betrekkingen 1.1 De torens van Hanoi De torens van Hanoi Edouard Lucas, 1884: Gegeven 3 pinnen en 64 schijven van verschillende grootte. Startsituatie: 64 op linkerpin, geordend naar

Nadere informatie

Een combinatorische oplossing voor vraag 10 van de LIMO 2010

Een combinatorische oplossing voor vraag 10 van de LIMO 2010 Een combinatorische oplossing voor vraag 10 van de LIMO 2010 Stijn Vermeeren (University of Leeds) 16 juni 2010 Samenvatting Probleem 10 van de Landelijke Interuniversitaire Mathematische Olympiade 2010vraagt

Nadere informatie

Benaderingsalgoritmen

Benaderingsalgoritmen Benaderingsalgoritmen Eerste hulp bij NP-moeilijkheid 1 Herhaling NP-volledigheid (1) NP: er is een polynomiaal certificaat voor jainstanties dat in polynomiale tijd te controleren is Een probleem A is

Nadere informatie

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

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

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

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Achtste college algoritmiek. 8 april Dynamisch Programmeren Achtste college algoritmiek 8 april 2016 Dynamisch Programmeren 1 Werkcollege-opgave Dutch Flag Problem Gegeven een array gevuld met R, W, en B. Reorganiseer dit array zo dat van links naar rechts eerst

Nadere informatie

Begrenzing van het aantal iteraties in het max-flow algoritme

Begrenzing van het aantal iteraties in het max-flow algoritme Begrenzing van het aantal iteraties in het max-flow algoritme Het oplossen van het maximum stroom probleem met behulp van stroomvermeerderende paden werkt, maar het aantal iteraties kan aardig de spuigaten

Nadere informatie

Gerichte Grafen Boolese Algebra s &. Logische Netwerken

Gerichte Grafen Boolese Algebra s &. Logische Netwerken Discrete Structuren Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 10 maart 2009 Gerichte Grafen Boolese Algebra s &. Logische Netwerken. Paragrafen

Nadere informatie

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III 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

Nadere informatie

Hoofdstuk 3. Equivalentierelaties. 3.1 Modulo Rekenen

Hoofdstuk 3. Equivalentierelaties. 3.1 Modulo Rekenen Hoofdstuk 3 Equivalentierelaties SCHAUM 2.8: Equivalence Relations Twee belangrijke voorbeelden van equivalentierelaties in de informatica: resten (modulo rekenen) en cardinaliteit (aftelbaarheid). 3.1

Nadere informatie

Progra-MEER - Algoritmiek Leuven 20 maart 2018

Progra-MEER - Algoritmiek Leuven 20 maart 2018 Progra-MEER - Leuven 20 maart 2018 Bart Demoen KU Leuven Veerle Fack UGent Frank Neven/Wim Lamotte UHasselt schooljaar 2017-2018 Vandaag... 2/33 waar staan we i.v.m. 24 april? werkblad met twee thema s

Nadere informatie

Vierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force

Vierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force Algoritmiek 2019/Toestand-actie-ruimte Vierde college algoritmiek 1 maart 2019 Toestand-actie-ruimte Brute Force 1 Algoritmiek 2019/Toestand-actie-ruimte Torens van Hanoi Voorbeeld 3: Torens van Hanoi

Nadere informatie

Verzamelingen deel 3. Derde college

Verzamelingen deel 3. Derde college 1 Verzamelingen deel 3 Derde college rekenregels Een bewerking op A heet commutatief als voor alle x en y in A geldt dat x y = y x. Een bewerking op A heet associatief als voor alle x, y en z in A geldt

Nadere informatie

(Isomorfie en) RELATIES

(Isomorfie en) RELATIES Discrete Structuren Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 15 maart 2009 (Isomorfie en) RELATIES. Paragrafen 10.5,11.1,11.2,11.4,11.5 Discrete

Nadere informatie

1 Limiet van een rij Het begrip rij Bepaling van een rij Expliciet voorschrift Recursief voorschrift 3

1 Limiet van een rij Het begrip rij Bepaling van een rij Expliciet voorschrift Recursief voorschrift 3 HOOFDSTUK 6: RIJEN 1 Limiet van een rij 2 1.1 Het begrip rij 2 1.2 Bepaling van een rij 2 1.2.1 Expliciet voorschrift 2 1.2.2 Recursief voorschrift 3 1.2.3 Andere gevallen 3 1.2.4 Rijen met de grafische

Nadere informatie

3 De duale vectorruimte

3 De duale vectorruimte 3 De duale vectorruimte We brengen de volgende definitie in de herinnering. Definitie 3.1 (hom K (V, W )) Gegeven twee vectorruimtes (V, K) en (W, K) over K noteren we de verzameling van alle lineaire

Nadere informatie

Definitie 1.1. Een groep is een verzameling G, uitgerust met een bewerking waarvoor geldt dat:

Definitie 1.1. Een groep is een verzameling G, uitgerust met een bewerking waarvoor geldt dat: Hoofdstuk 1 Eerste begrippen 1.1 Wat is een groep? Definitie 1.1. Een groep is een verzameling G, uitgerust met een bewerking waarvoor geldt dat: 1. a, b G : a b G 2. a, b, c G : a (b c) = (a b) c = a

Nadere informatie

Greedy algoritmes. Algoritmiek

Greedy algoritmes. Algoritmiek Greedy algoritmes Algoritmiek Algoritmische technieken Trucs, methoden, paradigma s voor het ontwerpen van algoritmen Dynamisch Programmeren Divide & Conquer Greedy 2 Greedy algoritme Bouwt de oplossing

Nadere informatie

Algoritmiek. 2 februari Introductie

Algoritmiek. 2 februari Introductie College 1 Algoritmiek 2 februari 2017 Introductie 1 Introductie -1- docent: Rudy van Vliet rvvliet@liacs.nl assistent werkcollege: Bart van Strien bartbes@gmail.com website: http://www.liacs.leidenuniv.nl/~vlietrvan1/algoritmiek/

Nadere informatie