MMI. The Digital World 4. Peter van Kranenburg

Vergelijkbare documenten
Zelftest Inleiding Programmeren

(On)Doenlijke problemen

Javascript oefenblad 1

Uitwerking tentamen Analyse van Algoritmen, 29 januari

TW2020 Optimalisering

TW2020 Optimalisering

NP-Volledigheid. Wil zo snel mogelijke algoritmes om problemen op te lossen. De looptijd is polynomiaal: O n k - dat is heel erg mooi

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

JavaScript. 0 - Wat is JavaScript? JavaScript toevoegen

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

van PSD naar JavaScript

Vakgroep CW KAHO Sint-Lieven

Variabelen en statements in ActionScript

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

TW2020 Optimalisering

1 Complexiteit. of benadering en snel

Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur)

BEGINNER JAVA Inhoudsopgave

Twaalfde college complexiteit. 7 mei NP-volledigheid IV Cook-Levin Savitch 1

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Inleiding Programmeren 2

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

PHP. Les 4 : Variabelen

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

Benaderingsalgoritmen

Software 1. php mysql. bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar semester 1

VAN HET PROGRAMMEREN. Inleiding

Hand-out Introduction to Programming, werkcollege 4 Alex Reuneker (a.reuneker@hhs.nl), 2012

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Web building gevorderden: CSS & JavaScript. Karel Nijs 2008/11

Inleiding Programmeren 2

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Automaten & Complexiteit (X )

Java Les 3 Theorie Herhaal structuren

Programmeren: Visual Basic

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

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

Inhoud leereenheid 4. Inleiding JavaScript. Introductie 99. Leerkern 100. Zelftoets 108. Terugkoppeling 109

syntax, semantiek & lay-out

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Een spoedcursus python

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

10 Meer over functies

Thinking of Development

Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is

algoritmiek - antwoorden

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

Hoofdstuk 7: Werken met arrays

Elfde college complexiteit. 23 april NP-volledigheid III

Inhoud. Informatica. Hoofdstuk 5 Scripting. Context. Editor voor Programmeercode. Scripting 1

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Programmeermethoden NA. Week 3: Controlestructuren

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

Functies. Huub de Beer. Eindhoven, 4 juni 2011

Automaten & Complexiteit (X )

Logica voor Informatica

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Programmeren in Access met VBA

Programmeren in Access 2016 met VBA

Probleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1

2WO12: Optimalisering in Netwerken

Tentamen combinatorische optimalisatie Tijd:

Lab Webdesign: Javascript 11 februari 2008

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Automaten. Informatica, UvA. Yde Venema

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

Module 3: Scratch programmeren: is het logisch of is het niet logisch?

Inleiding Visual Basic en VBA. Karel Nijs 2009/01

Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 6

Bij dit hoofdstukken horen geen opgaven.

Modelleren en Programmeren

Inleiding tot programmeren: Javascript

Oefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer:

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Programmeren. a. 0, 0, 0 b. 0, 0, 27 c. 15, 12, 0 d. 15, 12, 27

Small Basic Programmeren Text Console 2

Reguliere Expressies

9 Meer over datatypen

Informatietechnologie 2. JavaScript. Inleidende les. Kristof Michiels

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.

17 Operaties op bits Bitoperatoren en bitexpressies

Het voert eenvoudige instructies uit die achter elkaar in het geheugen van de machine zijn opgeslagen.

Lab Webdesign: Javascript 11 februari 2008

Verzamelingen deel 2. Tweede college

Helden van de wiskunde: L.E.J. Brouwer Brouwers visie vanuit een logica-informatica perspectief

Programmeren met Arduino-software

Opmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?

Algoritmen en Datastructuren 1. Functies

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby?

Programmeren: Visual Basic

Het computationeel denken van een informaticus Maarten van Steen Center for Telematics and Information Technology (CTIT)

Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens

Syntax- (compile), runtime- en logische fouten Binaire operatoren

OEFENINGEN PYTHON REEKS 1

Les C-04 Programmeren

Tentamen Programmeren in C (EE1400)

Transcriptie:

MMI The Digital World 4 Peter van Kranenburg

Intro Vandaag: Terugblik vorige week Leren programmeren Algoritmes

Terugblik Hogere-orde programmeertalen maken het schrijven van code eenvoudiger. Je hoeft vrijwel nooit assemblercode te schrijven. De eenvoud is echter betrekkelijk: een bug zit in een klein hoekje. een omvangrijke hoeveelheid code wordt al snel onoverzichtelijk. Veel functionaliteit is al geïmplementeerd en beschikbaar. Het besturingssysteem verzorgt (o.a.) het aansturen van de hardware.

Leren Programmeren Een programmeertaal heeft: 1. syntax : de structuur van wat uitgedrukt wordt. 2. semantiek : de betekenis van wat uitgedrukt wordt. 3. Lexicon : de woordenschat Syntax is gedefinieerd door een verzameling productieregels. De set regels wordt een grammatica genoemd.

Leren Programmeren: grammatica Een (contextvrije) grammatica wordt gedefinieerd door: Een set eindsymbolen Een set tussensymbolen Een set productieregels met de vorm NTS ts, waarbij NTS : tussensymbool ts : string met eindsymbool en tussensymbolen Een startsymbool (één van de tussensymbolen)

Leren Programmeren: grammatica NTS ts Voorbeeld van een grammatica met twee regels: Eindsymbolen: a en b Tussensymbolen: S S Startsymbool: S regel 2 Productieregels: 1. S a bs regel 2 2. S bs bbs bba is een geldige expressie in deze taal. bbbba ook bba regel 1 syntaxboom parse tree bab niet

Leren Programmeren: grammatica NTS ts Voorbeeld: Eindsymbolen: e, j, 3 Tussensymbolen: T Startsymbool: T Productieregels: 1. T etj 2. T jt 3. T 3 T jt jetj jejtj jej3j regel 2 regel 1 regel 2 regel 3 Een van de niet-eindsymbolen is het startsymbool. Deze representeert de gehele expressie. In dit geval is het T.

Leren Programmeren: grammatica NTS ts Voorbeeld: Eindsymbolen: 3, 5, 8 Tussensymbolen: S, A, B Startsymbool: S Productieregels: 1. S SS 3. S BA 4. B 3A 5. A 5 6. A 8 385358 is een geldige expressie in deze taal.

Leren Programmeren: grammatica Voorbeeld: getallen in JavaScript. Uit de standaard (iets andere notatie):

Leren Programmeren: grammatica Getallen in JavaScript (vervolg). https://www.ecma-international.org/publications/files/ecma-st/ecma-262.pdf

Leren Programmeren: grammatica Voorbeeld: 3.48e10 ( = 3,48 x 10 10 = 34.800.000.000 )

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica Voorbeeld: 3.48e10

Leren Programmeren: grammatica De syntax van een programmeertaal wordt geheel en ondubbelzinnig vastgelegd door een dergelijke grammatica. Zie: https://www.ecma-international.org/publications/files/ecma- ST/Ecma-262.pdf voor de grammatica van JavaScript. (De standaard heet officiëel ECMAScript).

Leren Programmeren: Semantiek Semantiek: De betekenis van de expressies. Voorbeeld: wederom getallen in de JavaScript standaard:

Leren Programmeren Een compiler gebruikt de grammatica om de programmeercode te ontleden in elementen. Vervolgens wordt de betekenis van de elementen uitgevoerd. Daar moet de programmeur van de compiler voor zorgen.

Leren Programmeren: JavaScript JavaScript wordt uitgevoerd door een webbrowser. Een JavaScript-programma wordt dus ingebed in een web-pagina. Voorbeeld: <html> <body> <script> alert( Hello, world ); </script> </body> <html> HTML JavaScript HTML

Leren Programmeren: JavaScript <html> <body> <script> alert( Hello, world ); </script> </body> <html> Sla deze code op in een tekstbestand met de extensie.html Open het bestand in een browser. Of gebruik een online tool. Bijvoorbeeld: http://math.chapman.edu/~jipsen/js/

Leren Programmeren: JavaScript <html> <body> <script> alert( Hello, world ); </script> </body> <html> Roept functie alert() aan.

Leren Programmeren: JavaScript <html> <body> <script> alert( Hello, world ); </script> </body> <html> https://www.w3schools.com/jsref/met_win_alert.asp

Leren Programmeren: JavaScript var username; username = prompt("what s your name?"); alert("hello, " + username); 3 statements statement: een uitvoerbare instructie

Leren Programmeren: JavaScript var username; username = prompt("what s your name?"); alert("hello, " + username); Declareert een variabele (label voor een geheugenplaats). Declareren: Er wordt een geheugenlocatie aangevraagd om iets op te slaan. Het is nog niet duidelijk wat er opgeslagen gaat worden. Het is zelfs niet duidelijk wat voor soort data er opgeslagen gaat worden (getal, tekst, lijst, ). Wel krijgt de locatie een naam, in dit geval: username.

Leren Programmeren: JavaScript Variabelen kunnen verschillende soorten data bevatten: var x = 3; getal var x = 3.14; getal var x = "Hello, world!"; string (tekst) var x = "3"; string (tekst) var x = ["Saab", "Volvo", "BMW"]; lijst

Leren Programmeren: JavaScript var username; username = prompt("what s your name?"); alert("hello, " + username); Roept functie prompt() aan.

Leren Programmeren: JavaScript var username; username = prompt("what s your name?"); alert("hello, " + username); Roept functie prompt() aan. https://www.w3schools.com/jsref/met_win_prompt.asp

Leren Programmeren: JavaScript Toekenning var username; username = prompt("what s your name?"); alert("hello, " + username); Roept functie prompt() aan. Hierna bevat de variabele username de tekst die de gebruiker heeft ingevoerd.

Leren Programmeren: JavaScript var username; username = prompt("what s your name?"); alert("hello, " + username); Roept functie alert() aan.

Leren Programmeren: JavaScript "Hello, " + username Als de operator + wordt gebruikt voor tekst-strings, krijgt deze de betekenis: aaneenschakelen. "Hello, " + "John" "Hello, John" "1"+"2"+"3"+"4" "1234" 1+2+3+4 10 http://math.chapman.edu/~jipsen/js/

Leren Programmeren: JavaScript Program flow Conditionals: ALS DAN ANDERS var b = 3; if (b > 0) alert("groter dan nul"); Conditional: Als b groter dan nu, dan alert

Leren Programmeren: JavaScript Program flow Conditionals: ALS DAN ANDERS if ( condition ) block else block block : { statement1; statement2; statement n; }

Leren Programmeren: JavaScript Program flow if ( condition ) block; else block; Conditionals: ALS DAN ANDERS var b = parseint(prompt("geef een getal")); if (b > 0) alert("groter dan nul"); else alert("kleiner of gelijk aan nul");

Leren Programmeren: JavaScript var b = parseint(prompt("geef een getal")); Vraag gebruiker een getal (tekst) Maak er een getal van Sla het resultaat op in variabele b

Leren Programmeren: JavaScript Program flow if ( condition ) block; else block; Conditionals: ALS DAN ANDERS var b = parseint(prompt("geef een getal")); if (b > 0) alert("groter dan nul"); else alert("kleiner of gelijk aan nul");

Leren Programmeren: JavaScript Loop (lus): statements een aantal keer herhalen. var n = parseint(prompt("geef een getal")); var res = 1; var input = n; while ( n > 0 ) { res = res * n; Lus: Zolang n groter is dan nul, doe {.} n = n - 1; } alert ( input + "! is " + res);

Leren Programmeren: JavaScript Functie: stukje code met een naam. function fact(n) { var res = 1; while ( n > 0 ) { res = res * n; n = n - 1; } return res; }

Leren Programmeren: JavaScript Functie: stukje code met een naam. function fact(n) { } Naam Uit te voeren opdrachten Invoer: 1 variabele n

Leren Programmeren: JavaScript Functie: stukje code met een naam. function fact(n) { var res = 1; while ( n > 0 ) { res = res * n; n = n - 1; } return res; } De functie geeft een waarde terug.

Leren Programmeren: JavaScript Functie: stukje code met een naam. De functie fact() kan nu gebruikt worden. Bijvoorbeeld: var i = 10; while ( i > 0 ) { var f = fact(i); alert(i + "! is " + f); i = i - 1; }

Leren Programmeren: JavaScript In Javascript is witruimte (spaties, tabs, regeleinden) optioneel en betekenisloos. We gebruiken dit alleen voor de leesbaarheid. function fact(n) { var res = 1; while ( n > 0 ) { res = res * n; n = n - 1; } return res; } Doet hetzelfde als function fact(n){var res=1;while(n>0){res=res*n;n=n- 1;}return res;}

Algoritmes INVOER Algoritme (Procedure) UITVOER Algoritme: Een procedure/stappenplan om iets uit te rekenen. Neemt invoer Genereert uitvoer Bestaat uit stappenplan voor berekening Heeft geheugen ter beschikking voor invoer, uitvoer en tussenresultaten

Algorithms INVOER Algoritme (Procedure) UITVOER Kernighan (p.56): Careful, precise, unambiguous, sequence of steps. Each step is expressed in basic operations whose meaning is completely specified. Guaranteed to compute a result correctly. No ambiguity about what anything means. The nature of the input (and output) data is given. All possible situations are covered: the algorithm never encounters a situation where it doesn t know what to do next. Has to stop eventually.

Algoritmes Voorbeeld: Maximum van een lijst getallen. INVOER Lijst getallen Algoritme (Procedure) UITVOER Grootste getal 1, 2, 3 5, 8, 3, 4, 1 0, 5, 0, 5 3 8 5

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoe doe ik dit stap voor stap? ALGORITME voor lijst met één getal {a}: 1. max = a 2. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoe doe ik dit stap voor stap? ALGORITME voor lijst met twee getallen {a, b}: 1. max = a 2. if b > max: max = b 3. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoe doe ik dit stap voor stap? ALGORITME voor lijst met drie getallen {a, b, c}: 1. max = a 2. if b > max: max = b 3. if c > max: max = c 4. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoe doe ik dit stap voor stap? ALGORITME voor lijst met vier getallen {a, b, c, d}: 1. max = a 2. if b > max: max = b 3. if c > max: max = c 4. if d > max: max = d 5. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoe doe ik dit stap voor stap? ALGORITME voor n getallen {x 1, x 2,, x n }: 1. max = x 1 2. for t in {x 2, x 3,, x n }: 3. if t > max : max = t 4. return max Pseudocode

Algoritmes Voorbeeld: Maximum van een lijst getallen. Implementatie in JavaScript: function grootste(lijst) { max = lijst[0]; for ( i = 1; i < lijst.length; i = i + 1) { if ( lijst[i] > max ) max = lijst[i]; } return max; }

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoeveel stappen heb ik eigenlijk nodig?

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoeveel stappen heb ik eigenlijk nodig? ALGORITME voor lijst met één getal {a}: 1. max = a 1 stap 2. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoeveel stappen heb ik eigenlijk nodig? ALGORITME voor lijst met twee getallen {a, b}: 1. max = a 2 stappen 2. if b > max: max = b 3. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoeveel stappen heb ik eigenlijk nodig? ALGORITME voor lijst met drie getallen {a, b, c}: 1. max = a 2. if b > max: max = b 3 stappen 3. if c > max: max = c 4. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoeveel stappen heb ik eigenlijk nodig? ALGORITME voor lijst met vier getallen {a, b, c, d}: 1. max = a 2. if b > max: max = b 3. if c > max: max = c 4 stappen 4. if d > max: max = d 5. return max

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Hoeveel stappen heb ik eigenlijk nodig? ALGORITME voor n getallen {x 1, x 2,, x n }: 1. max = x 1 2. for t in {x 2, x 3,, x n }: 3. if t > max : max = t 4. return max n stappen

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Wat is de verhouding tussen n en het aantal stappen? Uiterst belangrijke vraag!

Algoritmes Voorbeeld: Maximum van een lijst getallen. VRAAG: Wat is de verhouding tussen n en het aantal stappen? Aantal stappen om max van n getallen te vinden = n Lineaire verhouding

Algoritmes complexiteit: de verhouding tussen n en het aantal benodigde stappen. Herinner: n is het aantal elementen in de invoer. Verschillende soorten verhoudingen: De factor die gaat overheersen als n heel groot wordt (-> oneindig) ORDE VAN GROOTTE van het aantal benodigde stappen Constant: a (a is een constante) Logaritmisch log(n) Lineair: n Polynomiaal: Exponentieel: n a a n Factoriaal: n!

Algoritmes complexiteit: de verhouding tussen n en de ordegrootte van het aantal benodigde stappen. Bijvoorbeeld als a=2: Constant: Logaritmisch Lineair: Polynomiaal: Exponentieel: Factoriaal: Altijd 2 stappen n 2 keer zo groot -> 1 stap erbij n 4 keer zo groot -> 2 stappen erbij n 2 keer zo groot -> aantal stappen 2 keer zo groot n 3 keer zo groot -> aantal stappen 3 keer zo groot n 2 keer zo groot -> aantal stappen 4 keer zo groot n 3 keer zo groot -> aantal stappen 9 keer zo groot 1 element erbij -> aantal stappen 2 keer zo groot 2 elementen erbij -> aantal stappen 4 keer zo groot 1 element erbij -> aantal stappen n keer zo groot 2 elementen erbij -> aantal stappen n*(n-1) keer zo groot

Algoritmes Terminologie: Polynomiaal met a=2 : Kwadratisch (n 2 ) Polynomiaal met a=3 : Kubisch (n 3 )

Algoritmes Voorbeeld kwadratisch algoritme: selection sort Doel: een lijst met n getallen sorteren. Idee: Zoek steeds het kleinste getal en zet dat vooraan.

Algoritmes N.B Deze slide is gewijzigd t.o.v. het college Selection sort: voorbeeld met 5 getallen 45 4 4 4 4 6 6 6 6 6 22 22 22 9 9 9 9 9 22 22 4 45 45 45 45 Aantal stappen om kleinste te vinden: 5 + 4 + 3 + 2 + 1 = 15 Voor een lijst van n getallen geldt: n(n+1)/2 vergelijkingen. Dat is in de ordegrootte van n 2.

Algoritmes Exponentiële complexiteit (of meer) is problematisch 2 64-1 is meer dan 18 triljoen!

Algoritmes Belangrijke vraag: Is het mogelijk te bewijzen dat een probleem geen oplossing met polynomiale tijd-complexiteit heeft? Zo ja, dan kun je stoppen met zoeken naar een algoritme dat het probleem in polynomiale tijd oplost.

Algoritmes Er is theorie voor beslis-problemen. Beslisprobleem: Uitkomst is JA of NEE. INVOER Algoritme (Procedure) UITVOER JA of NEE Bijvoorbeeld: Is het gemiddelde van deze lijst getallen groter dan 10? Kruisen deze twee lijnsegmenten? Is x een even getal? etc.

Algoritmes Reductie: Probleem L1 kan tot probleem L2 worden gereduceerd als er een extra bewerking T op de invoer van L1 gedaan kan worden, zodat de resulterende invoer voor L2 gebruikt kan worden, terwijl de uitvoer hetzelfde is als die voor L1 (herinner: JA of NEE). INVOER voor L1 Algoritme voor L1 UITVOER voor L1 INVOER voor L1 T INVOER voor L2 Algoritme voor L2 UITVOER voor L1

Algoritmes Reductie INVOER voor L1 Algoritme voor L1 UITVOER voor L1 INVOER voor L1 T INVOER voor L2 Algoritme voor L2 UITVOER voor L1 T heeft ook een tijd-complexiteit

Algoritmes Er is een klasse (groep) problemen waarvoor geldt: Een oplossing kan in polynomiale tijd worden gevonden. Een oplossing kan in polynomiale tijd worden gecontroleerd. Deze klasse heet P

Algoritmes Er is een klasse (groep) problemen waarvoor geldt: Een oplossing kan in niet-deterministisch polynomiale tijd worden gevonden. Een oplossing kan in polynomiale tijd worden gecontroleerd. Deze klasse heet NP niet-deterministisch polynomiaal: als het algoritme een keuze moet maken, worden alle mogelijkheden tegelijk uitgevoerd (in plaats van ná elkaar). Dit kan alleen door een denkbeeldige machine gedaan worden.

Algoritmes Er is een klasse problemen in NP waarvoor geldt dat elk ander probleem in NP naar een probleem in deze klasse gereduceerd kan worden in polynomiale tijd. Deze klasse heet NP-Volledig (NP-Complete). Als je voor één van deze problemen een algoritme vindt dat in polynomiale tijd een antwoord geeft, heb je een dus ook een algoritme dat alle problemen in NP in polynomiale tijd kan oplossen. Zo'n algoritme is nog niet ontdekt. Zie: Cook, Stephen A. "The complexity of theorem-proving procedures." Proceedings of the third annual ACM symposium on Theory of computing. ACM, 1971.

Algoritmes Een openstaande vraag in de Informatica: P = NP? Eén van de 'milleniumproblemen'. Je kunt $1 miljoen verdienen als je het oplost. Zie ook bijvoorbeeld: https://www.claymath.org/sites/default/files/pvsnp.pdf https://www.win.tue.nl/~gwoegi/p-versus-np.htm http://www.claymath.org/millennium-problems

Algoritme Voorbeeld: Handelsreiziger (Travelling salesman): Ik wil een aantal steden bezoeken via de wegen die tussen de steden lopen. Welke route moet ik nemen zodat ik de kortst mogelijke afstand afleg, maar wel alle steden bezoek? Geen oplossing in polynomiale tijd bekend. De 'beslisvariant' van dit probleem is in set NP-Volledig.

Tentamen Drie soorten vragen. Kennis-vragen Welke programmeertaal werd eerder ontwikkeld, Java of Fortran? Wat is een lineair algoritme? Vaardigheid-vragen Getalconversies (dec->bin, bin->hex, etc) Geheugenrepresentatie Inzicht-vragen Waarom werkt dit toy-cpu programma niet?