8. Complexiteit van algoritmen:



Vergelijkbare documenten
9. Strategieën en oplossingsmethoden

Uitwerking tentamen Analyse van Algoritmen, 29 januari

1 Complexiteit. of benadering en snel

b) Teken op de bijlage welke lampjes van het klokje branden om 19:45:52. Schrijf eronder hoe je dit bepaald/berekend hebt. (3p)

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

Elke groep van 3 leerlingen heeft een 9 setje speelkaarten nodig: 2 t/m 10, bijvoorbeeld alle schoppen, of alle harten kaarten.

WISKUNDE B -DAG = 2. maar en hoe nu verder? 29 november 2002

Opgaven Analyse van Algoritmen 10 mei 2019, Datastructuren, Werkgroep.

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder?

Een objectief Ranglijst Systeem. ontworpen door. Martien Maas

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Spider Solitaire is NP-Compleet

4. Exponentiële vergelijkingen

3. Structuren in de taal

Engelse woordjes. Het is ook een leermiddel dat docenten op school en ouders thuis kunnen gebruiken.

Tentamen IN3105 Complexiteitstheorie

Activiteit 13. De arme cartograaf - kaarten kleuren. Samenvatting. Kerndoelen. Vaardigheden. Leeftijd. Materiaal

Opgave 1. (4 punten) Inleiding: Vraag: Hints: (maximaal 2 bonuspunten) Tentamen Algoritmiek voor Biologen

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

(On)Doenlijke problemen

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

ALGORITMIEK. Keuzemodule Wiskunde B/D. Mark de Berg TU Eindhoven

Algoritmes in ons dagelijks leven. Leve de Wiskunde! 7 April 2017 Jacobien Carstens

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

Computationele Intelligentie

HET SCHAAKSPEL OPGELOST Cees Timmer

3. Informatie overzichtelijk maken

Hoofdstuk 8: Algoritmen en Complexiteit

Eerste Toets Datastructuren 22 mei 2019, , Educ-β en Megaron.

Wiskunde 20 maart 2014 versie 1-1 -

Hoofdstuk 2: Grafieken en formules

Mastermind met acht kleuren

Opgaven Kunstmatige intelligentie 4 mei 2012

Fundamentele Informatica

Hoofdstuk 13: Sorteren & Filteren* 2010

Heuristieken en benaderingsalgoritmen. Algoritmiek

Examen HAVO. Wiskunde A (oude stijl)

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

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

Combinatoriek groep 1 & 2: Recursie

Analyse. Samenvatting: logaritmen. Frank Derks Gerard Heijmeriks

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

Trillingen en geluid wiskundig. 1 De sinus van een hoek 2 Uitwijking van een trilling berekenen 3 Macht en logaritme 4 Geluidsniveau en amplitude

Maak zelf een algoritme wanneer je een auto kunt winnen en welke auto je wint.

Voorbereiding toelatingsexamen arts/tandarts. Wiskunde: Logaritmen en getal e. 23 juli dr. Brenda Casteleyn

4. Exponentiële vergelijkingen

1 Rekenen met gehele getallen

2 n 1. OPGAVEN 1 Hoeveel cijfers heeft het grootste bekende Mersenne-priemgetal? Met dit getal vult men 320 krantenpagina s.

Tiende college algoritmiek. 26 april Gretige algoritmen

Differentiëren. Training met de rekenregels en de standaard afgeleiden

LES: Vallende sommen 2

Datastructuren en Algoritmen

Oefening 4.3. Zoek een positief natuurlijk getal zodanig dat de helft een kwadraat is, een derde is een derdemacht en een vijfde is een vijfdemacht.

Speluitleg: Gebruik bij de speluitleg het bestand Hoe wordt het spel gespeeld op

wiskunde C vwo 2018-I

Tentamen combinatorische optimalisatie Tijd:

Arnout Devos 5WeWi nr.3. Radioactief verval

Set 1 Inleveropgaven Kansrekening (2WS20)

Getallenleer Inleiding op codeertheorie. Cursus voor de vrije ruimte

6 Nimmt! Geen kaartspel voor stommelingen! Uitgever : Amigo, 1995 Auteur : KRAMER Wolfgang Spelers : spelers vanaf 10 jaar Duurtijd : ± 45

Ieder tweetal heeft nodig: Een kopie van de slagschipspelletjes: 1. 1A, 1B voor spel A, 2B voor spel A, 3B voor spel 3

Trillingen en geluid wiskundig

Bij de volgende vragen Bij een regelmatige veelhoek kun je het gemakkelijkst eerst de buitenhoeken berekenen en daarna pas de binnenhoeken.

P2 Exponentiële groei

Basisvaardigheden Microsoft Excel

Grofweg zijn er twee typen redeneervraagstukken. A. Gedrag van een formule verklaren. B. Het doorzien van de structuur van de formule.

Uitwerkingen Sum of Us

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

Bouwplaat. Datastructuren Opgave 6, Voorjaar

Docentenversie. Hoofdstuk A9 Hellinggrafieken - alternatief. snelheid (m/s)

LES: Vier op een rij 2

TW2020 Optimalisering

Uitleg. Welkom bij de Beverwedstrijd Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden.

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

Hoe schrijf je de logaritmische waarden welke bij db s horen?

Bij het oplossen van een telprobleem zijn de volgende 2 dingen belangrijk: Is de volgorde van de gekozen dingen van belang?

Oefeningen voor de oefeningenles. Oefening 1

Een model voor een lift

Rekentijger - Groep 7 Tips bij werkboekje A

Gemiddelde: Het gemiddelde van een rij getallen is de som van al die getallen gedeeld door het aantal getallen.

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Paragraaf 12.1 : Exponentiële groei

Cursus Excel voor beginners (6) Functies.

Examen VWO wiskunde C. tijdvak 2 woensdag 17 juni uur. Bij dit examen hoort een uitwerkbijlage.

Computationele Intelligentie

LES: Post. BENODIGDHEDEN Per leerling werkblad Postzegels (zie p. 5) potlood en gum AFBEELDING SPELLETJE

Rekenen met verhoudingen

Exponentiële vergelijkingen en groei

Transcriptie:

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 duidelijk dat er problemen zijn waarvoor er geen volledig correct antwoord te berekenen is. Met een voorbeeld wordt duidelijk gemaakt dat het verstandig is om eerst de orde van grootte van je probleem te analyseren en pas daarna het algoritme te bedenken. Je maakt kennis met NP-problemen en NP-volledige problemen en hun oplossingen. Voorbeeld: Een gevaarlijk spel In het volgende voorbeeld gaan we een spel spelen met twee sluipwespen. De sluipwespen worden om de beurt in een bakje met twee drosophila poppen gezet. Er wordt gewacht totdat de wesp in het bakje twee eitjes gelegd heeft. Wanneer de wesp haar 2 eitjes gelegd heeft, is de beurt aan de andere sluipwesp. Deze mag ook 2 eitjes leggen. Dit spel gaat door totdat in beide drosophila poppen 5 eitjes gelegd zijn.we nemen aan dat de wespen kunnen waarnemen hoeveel eitjes van haarzelf en hoeveel eitjes van een andere wesp in de pop aanwezig zijn. De wesp die het meeste eitjes in een pop heeft, heeft de grootste kans dat de uiteindelijke wesp die uit de pop ontstaat een kind van

Pagina 8-2 haar is en heeft een punt gewonnen. Bij 2 poppen kan een wesp dus met 2-0 winnen of 1-1 gelijk spelen. Stel dat de wespen de namen w1 en w2 krijgen en de drosophila poppen de namen pop1 en pop2. W1 mag met het spel beginnen. Er zou dan een volgend spelverloop kunnen zijn: pop1 pop2 w1 w2 w1 w2 w1 legt 2 eitjes in pop1 2 0 0 0 w2 legt 1 eitje in pop1 en 1 eitje in pop2 2 1 0 1 w1 legt 1 eitje in pop1 en 1 eitje in pop2 3 1 1 1 w2 legt 2 eitjes in pop2 3 1 1 3 w1 legt 1 eitje in pop1 en 1 eitje in pop2 4 1 2 3 Allebei de poppen zitten nu vol, w1 heeft pop1 gewonnen en w2 heeft pop2 gewonnen de eindstand is dus 1-1. De 5 rijen met cijfers geven de toestand aan waar het spel zich op dat moment in bevindt. Hier zijn slechts 5 toestanden te zien,in totaal zijn er echter veel meer. Om een overzicht te krijgen van het aantal toestanden, is het handig om een spelboom te maken. Hieronder zie je een voorbeeld van zo'n spelboom. 00 00 Wesp 1 20 00 10 10 22 00 20 02 21 01 02 20 00 22 01 21 Wesp 2 12 10 10 12 11 11 Wesp 1 22 20 32 10 Wesp 1 Wesp 2 32 30 23 21 22 22 32 32 Wesp 1 wint 23 41 Gelijkspel 32 32 Wesp 1 wint Spelboom voor het wespenspel Door ruimte gebrek is deze spelboom niet helemaal afgemaakt. De toestanden zijn de knopen van de boom en de getallen die erbij staan (00 00, 20 00 enz.) zijn weergaven van de stand (net zoals in de tabel). Als je vanuit een knoop naar links gaat dan leg je in pop1 2 eitjes, als je vanuit een knoop de middelste tak neemt dan leg je in pop2 2 eitjes,als je de rechter tak neemt dan legt de wesp 1 eitje in pop1 en 1 eitje in pop2. Er zijn ook knopen die illegale toestanden afbeelden. Dit zijn toestanden die niet voor mogen komen. In zo n geval zouden er meer dan 5 eitjes in een pop gelegd worden. (Zoek ze op en geef ze met een kruis aan).

Pagina 8-3 Wanneer je nu wilt weten welke zet je bij een bepaalde toestand moet doen, kan je voor elke mogelijke zet door de spelboom naar beneden wandelen en kijken wat de kans op winst is bij die bepaalde zet.welke zet zou jij b.v. doen wanneer je wesp1 was en de toestand is 22 00? Bij 2 poppen is deze boom nog redelijk te overzien. Het spel kan echter ook met 4 of 5 poppen gespeeld worden. De spelboom zal in die gevallen groter worden. De vraag is echter: Hoe groot worden die bomen? De diepte van de boom is gelijk aan het aantal eieren gedeeld door 2. Als er 2 poppen zijn dan moeten er 10 eieren gelegd worden. Omdat er per beurt 2 eieren gelegd worden, zijn er 10/2 = 5 beurten nodig voordat de poppen vol zijn. De diepte van de spelboom is dus 5. In het algemeen kan je zeggen dat voor n poppen de diepte 5n/2 = 2.5n zal zijn. Het aantal mogelijkheden waarop de wesp haar n eieren kan leggen neemt ook bij het toenemen van het aantal toe. Bij 1 pop kan het maar op 1 manier. Bij 2 poppen kan het op 1 + 2 = 3 manieren. Bij 3 poppen kan het op 1 + 2+ 3 = 6 manieren Bij n poppen kan het op 1 + 2 + 3...+ n manieren. Wanneer je alle punten (alle toestanden) wilt berekenen moet je voor elk niveau berekenen hoeveel toestanden er per niveau zijn. Bij n = 2 zijn er op het eerste niveau 3 toestanden, op het tweede niveau zijn er 9, op het derde niveau zijn er 27, op het vierde niveau zijn er 81 en op het vijfde niveau zijn er 243 toestanden; in totaal zijn er dus 363 toestanden (voor het gemak zijn de onmogelijke toestanden meegerekend, het gaat namelijk om de orde van grootte). In het algemeen geldt: (1+2+ +n) n voor n=1 tot 2.5a Waarbij a het aantal poppen voorstelt. Voor a = 2 geldt dus: (1+2) n voor n=1 tot 5 Dit is 3 +... + 32 + 33 +34 + 35 = 363 toestanden Als we voor een aantal poppen het aantal toestanden berekenen dan komen we tot de volgende tabel: aantal poppen aantal toestanden tijdsduur 1 3 0.03 sec 2 363 3.63 sec 3 335922 56 minuten 4 1.11 x 10 10 3.5 jaar 5 2 x 10 15 661215 jaar Bij tijdsduur hebben we aangenomen dat de computer ongeveer 0.01 seconde nodig heeft om een toestand te berekenen.

Pagina 8-4 8.1 Complexiteit Je ziet dat de tijd die nodig is schrikbarend toeneemt met het aantal poppen. Bij 5 poppen is de oplossing voor het probleem al onuitvoerbaar (ook al zou je een duizend keer zo snelle computer hebben). We spreken in zo n geval van een onhandelbaar probleem. Voor dergelijke problemen is geen redelijk algoritme beschikbaar. Wat verstaan we dan onder een redelijk algoritme? Om te kunnen beoordelen of er voor een probleem een redelijk algoritme mogelijk is moeten we kijken naar de samenhang tussen de omvang van de invoer van een probleem en de hoeveelheid tijd en geheugenruimte die nodig is om een oplossing van het probleem te berekenen. Die twee factoren bepalen de complexiteit van een algoritme. Complexe algoritmen vragen veel van een computer in termen van beschikbaar geheugen en vereiste rekentijd door de centrale processor (CPU). Complexiteit kunnen we beschrijven door te kijken naar het aantal handelingen en/of vergelijkingen dat nodig is om van input naar gewenste output te komen. Daarbij gaat het niet om het precieze aantal handelingen maar om de orde van grootte van het aantal handelingen. Die orde van grootte geven we aan met de hoofdletter O. We spreken daaarom ook wel van de grote-o-notatie. Wanneer we van een probleem zeggen dat het in de klasse O(n) ligt dan betekent dat dat er een lineair verband is tussen de omvang van het probleem, i.e., het aantal te verrichten handelingen of vergelijkingen dat nodig is om de input om te zetten in een oplossing van het probleem, en de hoeveelheid tijd die daar voor nodig is. We onderscheiden verschillende klassen van problemen al naar gelang de relatie tussen omvang en tijd: O(log n) O(n) O(n 2 ) : logaritmisch : lineair O(2 n ) : exponentieel : kwadratisch (i.h.a., polynomiaal) Problemen die tot de eerste drie klassen behoren noemen we handelbaar. Voor dergelijke problemen zijn redelijke algoritmen mogelijk. Zodra de relatie tussen omvang van het probleem en de benodigde rekentijd exponentieel van karakter wordt noemen we het probleem onhandelbaar, en is er geen redelijk algoritme mogelijk. In het algemeen geldt dus dat het asymptotisch gedrag (hoe snel verandert de rekentijd met

Pagina 8-5 de grootte van het probleem) bepaalt of een probleem uitvoerbaar is of niet. Een voorbeeld van een handelbaar probleem is bijvoorbeeld het zogenaamd lineair zoeken in een lijst (met namen bijvoorbeeld). Van de lijst is bekend dat er N namen in staan. Het is onbekend of de lijst is geordend, d.w.z. we weten niet van te voren of de namen alfabetisch zijn gerangschikt. We zoeken naar de naam X en we weten zeker dat de naam in de lijst voorkomt. De vraag is nu: hoe complex is dit probleem? Om die vraag te kunnen beantwoorden moeten we ons een idee vormen over hoeveel namen uit de lijst we moeten vergelijken met de naam die we zoeken. We weten dat als de gezochte naam X als eerste op de lijst voorkomt er maar 1 vergelijking nodig is geweest. Staat X op plaats 2 dan zijn er 2 vergelijkingen nodig, en staat X op plaats N dan zijn er N vergelijkingen nodig. Dat wil zeggen dat voor dit probleem in het algemene geval voor het aantal te verrichten handelingen geldt: (1+2+3+ +N)/N = 0.5N (N+1)/N = 0.5 (N+1) = O(N) De orde van grootte van het lineaire zoek probleem is dus recht evenredig met de omvang van de lijst waarin we moeten zoeken. We mogen dus verwachten dat er een redelijk algoritme bestaat om dit zoek-probleem op te lossen. Het is zelfs zo dat er een beter algoritme te formuleren is als we iets aan de eigenschappen van de lijst kunnen sleutelen. Een beter algoritme wil in dit geval zeggen dat het een gunstiger relatie tussen probleem-omvang en benodige rekentijd bezit. Om dit te kunnen bereiken is het nodig dat de lijst is gesorteerd, d.w.z. alfabetisch is geordend (om zover te komen met die lijst is op zich zelf natuurlijk ook weer een probleem, een zg. sorteer probleem, waar in de literatuur zeer veel oplossingen voor worden aangereikt). We hebben dus weer een lijst L met N namen waarin we op zoek zijn naar naam X. L is alfabetisch geordend, en X komt voor in L. Hoe complex is dit probleem, m.a.w. hoeveel vergelijkingen zijn er globaal nodig om X te vinden? Herhaal M := middelste element uit L

Pagina 8-6 Als X KLEINER DAN M Dan L := bovenste helft van L Anders L := onderste helft van L Eindals Totdat X IS_GELIJK M Eindherhaal Stel dat N = 2 k - 1, en k = 3. N is dan gelijk aan 7 Als X gelijk is aan het middelste element (nummer 4) dan is er 1 vergelijking nodig geweest. Indien dat niet het geval is wordt L gelijk aan of de bovenste of de onderste helft van L (met nog maar drie namen). Indien X gelijk is aan de middelste naam (de tweede) dan zijn er 2 vergelijkingen nodig geweest. Indien niet, dan breken we L weer op in of de bovenste of de onderste helft. Hier zit dan nog maar 1 naam in die per definitie (want we hebben afgesproken dat X in de lijst zit) gelijk moet zijn aan de gezochte naam. Dat wil zeggen dat voor dit probleem in het algemene geval voor het aantal te verrichten handelingen geldt: (1x1 + 2x2 + 4x3 + + (2 k-1 x k))/n = ((k-1)x 2 k +1)/N = (N+1) x (( 2 log(n+1)-1)/n) + 1/N = 2log (N+1) - 1 = O(logN) De logaritme van N is duidelijker kleiner dan N zelf. We hebben om dit probleem op te lossen bij een gelijke omvang van de lijsten dus minder rekentijd nodig dan met het lineaire zoek probleem. 8.2 NP-problemen In het algemeen geldt dus dat de tijd die nodig is om een probleem op te lossen een functie is van de omvang van het probleem. Bij een probleem dat in polynomiale tijd uitvoerbaar is, een P-probleem, hoort een functie waarbij n (aantal) het grondtal is, b.v. f(n) = n of f(n) = n + n 2. Bij een probleem dat niet in een polynomiale tijd te berekenen is, hoort een

Pagina 8-7 functie waarbij n in de macht staat, b.v. f(n) = e n of f(n) = n + 4 2n. Een bijzondere klasse van problemen wordt gevormd door gevallen waarvan de status onbekend is. Er bestaan wel algoritmen voor de afzonderlijke gevallen uit deze categorie, maar deze oplossingen zijn geen van alle redelijk. Maar van deze gevallen is daarentegen ook nog niet bewezen dat ze tot de categorie van onhandelbare problemen behoren. Ze zijn in polynomiale tijd te berekenen als we zouden kunnen raden (in plaats van van te voren exact bepalen = determineren) hoe de berekening moet gaan. We noemen een probleem wat tot deze categorie behoort een NP-probleem (NP = Nondeterministisch Polynomiaal). Voorbeelden van NP problemen zijn: Het berekenen van de beste zet bij schaken een lesrooster maken; het bepalen van de kortste weg, als je een gegeven aantal plaatsen moet bezoeken. 8.3 De oplossing Toch willen we voor de NP problemen een oplossing hebben. Dit kan, maar dan moeten we met iets minder tevreden zijn. In veel gevallen kan er namelijk een vuistregel, of een andere truc bedacht worden die [vaak] een goed antwoord geeft. We spreken in zo n geval van een heuristische (heuriskein grieks voor ontdekken ) in plaats van een exacte oplossingsmethode. We noemen een methode heuristisch als het op basis van ervaring of logisch redeneren redelijk aannemelijk te maken is dat die methode een goede oplossing voor een probleem oplevert, echter zonder dat we kunnen garanderen dat die oplossing optimaal is. Er zijn talrijke voorbeelden van dergelijke op ervaring berustende vuistregels. Voor de 3 problemen die we boven noemden zouden we met de volgende compromissen tevreden kunen zijn: Bij schaken wordt maar een aantal zetten vooruit bedacht en worden standaard regels gebruikt. Bij lesroosters wordt een rooster gemaakt waar iedereen mee kan leven, het bevat dan nog tussen-uren en lange dagen.

Pagina 8-8 Bij het vinden van de kortste weg worden de eisen iets verzwakt en wordt gezocht naar een acceptabel korte weg. 8.4 Een vuistregel Even terug naar het probleem waar we dit hoofstuk mee begonnen. Bij onze voorstelling van de eileg competitie tussen twee wespen als spel, zou de beste zet berekend kunnen worden door het uitrekenen van de komplete spelboom. Bij 5 poppen zou het berekenen van de beste zet dan 661215 jaar in beslag nemen. We kunnen echter ook een vuistregel verzinnen die in de meeste gevallen wel voor winst zorgt. Een voorbeeld van een vuistregel is: 1. Zoek naar poppen met 4 eitjes waarvan er 2 van jezelf zijn en leg er 1 eitje bij. 2. Zoek naar poppen met 3 eitjes waarvan er 1 van jezelf is en leg er 2 eitjes bij. 3. Zoek naar poppen met 1 eitje en leg er 1 eitje bij. 4. Zoek naar een lege pop en leg alle overige eieren. 5. Leg 1 eitje bij poppen met 2 eigen eieren. 6. Leg 1 eitje bij poppen met 2 andere eieren. 7. Leg willekeurig ergens een eitje. Voor alle duidelijkheid: Dit is één vuistregel die uit 7 regels bestaat welke in volgorde van belangrijkheid gerangschikt zijn. Misschien is er een betere vuistregel te vinden, maar deze vuistregel zal het in de praktijk aardig doen. Het grote voordeel van deze vuistregel is de tijdswinst. Bij 5 poppen zijn er 13 speelbeurten. 13 keer moeten er dus (maximaal) 7 regels over 5 poppen toegepast worden. Er moeten dus 13x7x5 = 455 handelingen verricht worden. Stel dat ook dit keer elke handeling 0.01 seconde duurt, dan zou het spel in 4.55 seconden gespeeld zijn.

Pagina 8-9 Een ander groot voordeel is de hoeveelheid geheugen die de computer aan moet spreken om het probleem op te lossen. Bij de vuistregel levert dit geen enkel probleem op, terwijl bij het berekenen van een hele spelboom er waarschijnlijk een geheugen probleem ontstaat.

Pagina 8-10