De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Datastructuren en Algoritmen Datastructuren college 1.

Verwante presentaties


Presentatie over: "Datastructuren en Algoritmen Datastructuren college 1."— Transcript van de presentatie:

1 Datastructuren en Algoritmen Datastructuren college 1

2 Vandaag Organisatie vak Wat en waarom: datastructuren en algoritmen Voorbeelden van datastructuren en algoritmen Analyse van algoritmen 1 Datastructuren

3 Docent Hans Bodlaender Hoofddocent, vakgebied: Algoritmiek – netwerken en grafen Kamer A302, Centrum Gebouw Noord Datastructuren

4 Onderdelen College: zeer belangrijk Werkcollege: onmisbaar 1 e deeltentamen: helft stof 2 e deeltentamen: andere helft stof, telt even zwaar als deeltentamen Practicum: programmeeropgaven: moeten voldoende zijn voor voldoende eindcijfer Minitentamens: paar minuten aan begin van college. Snelle toetsing van stof van werkcolleges Eindcijfer: 40% 1 e deeltentamen; 40% 2 e deeltentamen; 10% 1 e minitentamen; 10% 2 e minitentamen; mits practicum voldoende Practicum kan bonus en malus geven en onvoldoende veroorzaken! Datastructuren

5 Werkcollege ONMISBAAR! Verplicht: nodig voor recht op aanvullende toest Maar nog veel nodiger voor het beheersen van dit vak! Actieve deelname wordt genoteerd Vier groepen Start donderdag deze week Indeling…

6 Practicum Begin op tijd Maak het werk alleen. Fraude wordt gemeld Er zal in tenminste één tentamen een vraag komen die in feite vraagt naar het practicum Java Inleveren via submit Drie opdrachten; derde opdracht is moeilijker dan de eerste 2 Beoordeling: Onvoldoende; Zwak; Voldoende Herkansing: er is een vierde opgave, die U kunt maken als het prakticum onvoldoende is. Deze is duidelijk moeilijker dan opgave 1 en 2, en even minstens zo moeilijk als opgave 3 Datastructuren

7 Prakticum Onvoldoendes:  Bij 1 keer onvoldoende: herkansingsopgave van prakticum Bij 2 keer onvoldoende: GEZAKT voor het vak! Onvoldoendes zijn te vermijden: –Begin op tijd –Lees de opgave goed! –Test je programma

8 Herkansing prakticum Nieuwe opgave 4 Er is geen begeleiding bij de herkansing van het prakticum Inleverdatum: midden in de zomer… U kan ook herkansen om de malus weg te werken in het geval van een onvoldoende Maximumcijfer in geval van prakticumherkansing: 8

9 Bonus en malus Je begint met een bonus van 0.5 voor het prakticum Voor elke ZWAK die U scoort krijgt U een malus van 0.5 Dus: –Drie keer Voldoende geeft een bonus van 0.5: Uw tentamencijfer wordt met 0.5 verhoogd –Twee keer Voldoende en een keer zwak geeft geen bonus of malus –Twee keer Zwak en een keer voldoende geeft een malus van 0.5: Uw tentamencijfer wordt met 0.5 verlaagd –Drie keer Zwak: Uw tentamencijfer wordt met 1.0 verlaagd Tentamencijfer: onafgeronde gemiddelde Afronding: naar dichtsbijzijnde waarde. Cijfers onder de 6 naar hele punten, cijfers boven de 6 naar hele of halve punten

10 Belangrijk Merk op: je moet het practicum alleen doen!!!! Dus niet in groepjes van 2 personen Lever altijd iets in. Als je niets ingeleverd hebt, neem contact op met practicumleiding Vragen over practicum: –Inhoudelijk: op werkcollege –Organisatie: Bart Jansen

11 Aanvullende toets en hertentamens In geval eindcijfer tussen 4.0 en 5.49* en hooguit 4 keer geen deelname aan werkcollege: aanvullende toets; indien goed gemaakt geeft dit een 6 (mits practicum gehaald) Anders: gezakt Deelresultaten vervallen na dit jaar Datastructuren

12 Data P.O. 1: 18 mei P.O. 2: 1 juni P.O. 3: 29 juni Minitest 1: 10 mei Minitest 2: 14 juni Tentamen 1: 3 juni Tentamen 2: 8 juli (!) Hertentamen: 17 augustus (datum vanwege BSA)

13 Minitest Korte test aan begin van college Kom op tijd (houdt rekening met vertraging van OV) Alle testen en tentamens zijn gesloten boek

14 Vragen stellen In het college In de pauze en na afloop DocentJa BuurmanNeeJa Of tijdens het werkcollege Datastructuren

15 Vragen Over de stof: –Gedurende het college (domme vragen bestaan niet) aan docent –In de pauze of na afloop van het college –Aan werkcollegeleiders of studentassistenten in het werkcollege Over het practicum –Per aan de practicumleider (Bart Jansen) –In het werkcollege aan de practicumleider of werkcollegeleiders Over de werkcollegeopgaven –In het werkcollege Over de tentamens en cijfers –Aan docent: pauze, na afloop college, , telefoon Datastructuren

16 Rondvraag? Vragen over de organisatie? Collegeresponsgroep?

17 Algoritmen en datastructuren: waarom? Iedereen is ongeduldig, want we willen –Dat onze routeplanner snel vertelt welke kant we opmoeten (en niet pas nà het kruispunt) –Vloeiende beelden in het computerspel –Niet een eeuw (of een week) wachten op de planning voor morgen –… Dus: de computer moet alles snel uitrekenen Hoe doet ie dat? Met een goed algoritme en een goede datastructuur! Datastructuren

18 Algoritme Methode om iets uit te rekenen – vgl. recept uit kookboek Naam komt van –Mu ḥ ammad ibn Mūsā Abū Ǧ a’far al- Ḫ awārazmī –Of: Al-Khwarizmi –Schreef boek in 820 over oplossen van lineaire en kwadratische vergelijkingen (“Algebra”) –Misvatting van vertaler die titel en auteur door elkaar haalde Datastructuren

19 Datastructuur Manier om gegevens op te slaan (in computer) Helpt om algoritmen sneller te maken In dit college zullen we allerlei belangrijke datastructuren bekijken –Hoe zitten ze in elkaar? –Hoe werken algoritmen op/met deze datastructuren? –Hoe snel gaat dit? Datastructuren

20 Algoritmisch Wedstrijdje Wat is de missende kaart? Twee vrijwilligers gezocht! Datastructuren

21 Voorbeelden van algoritmische vragen Sorteren van rij getallen Uitrekenen van oplossing wiskundig probleem Berekenen van kortste route in netwerk Zoeken van relevante webpagina’s bij een zoekterm (zoekmachine) Compileren van C++-programma Tonen van 2d-afbeelding aan de hand van 3d-model Datastructuren In dit vak maken we een begin met de theorie. Veel van deze vragen komen in andere/vervolgvakken aan de orde!

22 Onderwerpen uit dit vak Analyse van algoritmen Gelinkte lijsten; stacks & queues Sorteren (op allerlei manieren) Bomen: zoeken, doorlopen; binaire bomen; snelle zoekbomen Dictionaries; Maps Hashing Priority queues Tries … Datastructuren

23 Analyse van algoritmen (en datastructuren) Twee vragen: –Is het correct? –Hoeveel tijd gebruikt het? Meten we in stappen O-notatie wordt veel gebruikt Als ‘t vandaag wat vaag is: we moeten beginnen met wat (saaie) theorie; de leuke* algoritmen en datastructuren komen straks Datastructuren *= vind ik

24 Beschrijven van algoritmen met Pseudocode Pseudocode: niet echt een programmeertaal –Lijkt wat op code in een imperatieve taal Waarom pseudocode: –Echte programmeertaal: veel extra commando’s die begrip verduisteren –Natuurlijke taal: niet precies genoeg –Niet zo moeilijk om te zetten naar code in Java, C++, C#, Pascal, … Imperatief versus functioneel: –Sommige behandelde algoritmen/datastructuren makkelijk om te vormen naar functionele taal; soms is dat lastiger Datastructuren

25 Voorbeeld Pseudocode: zoek een element in een array ZOEK-ELEMENT(x,A) {Input: Een element x en een array A (A loopt van 1 tot lengte(A))} {Output: Een index i zodat A[i] = x of 0 als geen element in A gelijk is aan x} i = 1; while i  lengte(A) do if (x == A[i]) then return i else i = i + 1; endif enddo; return 0 Datastructuren

26 Sorteren Input: een rij van n getallen (a 1, …, a n ) Output: een permutatie van de input (a’ 1, …, a’ n ) zodat a’ 1  a’ 2  …  a’ n Kan natuurlijk ook met andersoortige geordende objecten (bijv. verzameling woorden die gealfabetiseerd moeten worden). Datastructuren

27 Insertion sort Sorteeralgoritme, met volgende idee: –Voeg steeds één element toe op de goede plek –We hebben een steeds groter goedgesorteerd deel –Array A loopt van 1 t/m lengte(A) INSERTION-SORT(A) for j = 2 to lengte(A) do key = A[j] {voeg A[j] op de goede plek in} i = j – 1; while i > 0 and A[i] > key do A[i+1] = A[i] {schuif eentje op} i = i – 1; A[i+1] = key Datastructuren

28 Idee van Insertion Sort INSERTION-SORT(A) for j = 2 to lengte(A) do key = A[j] {voeg A[j] op de goede plek in} i = j – 1; while i > 0 and A[i] > key do A[i+1] = A[i] {schuif eentje op} i = i – 1; A[i+1] = key Eerst is rijtje met alleen eerste element goed gesorteerd: (A[1]) Loop doet: van 2 tot eind: stop A[j] op de goede plek Zo: bewaar A[j]; van j naar voren, schuif steeds element eentje naar achter tot we op de plek komen waar A[i] moet staan Datastructuren

29 Correctheid van Insertion Sort 1 Bewijs correctheid met loop- invariant: Als we bij (*) zijn, dan heeft het deelarray A[1 … j – 1] dezelfde elementen als oorspronkelijk in A[1 … j – 1], maar in gesorteerde volgorde Stap 1 van het bewijs: de loopinvariant geldt initieel Datastructuren INSERTION-SORT(A) for j = 2 to lengte(A) do (*) key = A[j] {voeg A[j] op de goede plek in} i = j – 1; while i > 0 and A[i] > key do A[i+1] = A[i] {schuif eentje op} i = i – 1; A[i+1] = key

30 Correctheid van Insertion Sort 2 Als we bij (*) zijn, dan heeft het deelarray A[1 … j – 1] dezelfde elementen als oorspronkelijk in A[1 … j – 1], maar in gesorteerde volgorde Stap 2 van het bewijs: als de loopinvariant geldt voordat we de loop ingaan, dan geldt als we bij (**) zijn: –Het deelarray A[1 … j] bevat dezelfde elementen als oorspronkelijk in A[1 … j], maar in gesorteerde volgorde Dus blijft invariant geldig Datastructuren INSERTION-SORT(A) for j = 2 to lengte(A) do (*) key = A[j] {voeg A[j] op de goede plek in} i = j – 1; while i > 0 and A[i] > key do A[i+1] = A[i] {schuif eentje op} i = i – 1; A[i+1] = key (**)

31 Correctheid van Insertion Sort 3 Stap 3 van het bewijs: nu geldt invariant voor j = lengte(A)+1, dwz.: Het deelarray A[1 … lengte(A)] bevat dezelfde elementen als oorspronkelijk in A[1 … lengte(A)], maar in gesorteerde volgorde Algoritme doet wat we willen Datastructuren INSERTION-SORT(A) for j = 2 to lengte(A) do (*) key = A[j] {voeg A[j] op de goede plek in} i = j – 1; while i > 0 and A[i] > key do A[i+1] = A[i] {schuif eentje op} i = i – 1; A[i+1] = key (**)

32 Tijdsanalyse Tijd van een algoritme: hangt meestal af van: –De implementatie (code, taal, compiler, …) –De machine –En de input Maar meestal kunnen we toch die tijd goed analyseren –Langzaam algoritme blijft langzaam op langzame computer –… Conventies: –O-notatie om wat implementatieaspecten te onderdrukken –Tellen van alle basisoperaties als 1 stap –Kijken naar slechtste (of: gemiddelde en heel soms beste) geval Datastructuren

33 Basisoperaties Tijd onafhankelijk van compiler en machine (afhankelijk van programma en van input): Tel de basisoperaties: –rekenkundige operatie op integer, Boolean, character; –assignatie aan getal, boolean, character,reference (pointer) –doorlopen van een reference naar de inhoud ervan –indexberekening van een array –het pakken van een veld uit een record/structure –parameter overdracht bij aanroep function, methode Zo tel je: hoeveel operaties doet algoritme op een bepaalde input Formeel: Random Access Machine model Datastructuren

34 Optimisten en pessimisten Analyse: –Slechtste geval? –Beste geval? –Gemiddelde geval?

35 Is algoritmische analyse iets voor pessimisten? Meest gebruikelijke analyse: –Stel we hebben een input van lengte n –Wat is het maximum aantal operaties dat ons algoritme kan doen? Worst case – slechtste geval Datastructuren

36 Optimisten en gewone mensen Wat is het gemiddelde aantal operaties dat ons algoritme kan doen over alle mogelijke inputs van lengte n –Average case – gemiddelde geval –Probleempjes: vaak moeilijk om uit te rekenen; wat is eigenlijk de kansverdeling over de inputs (komen alle inputs even vaak voor als mogelijke input???)? Wat is het minimum aantal operaties dat ons algoritme kan doen op inputs van lengte n? Best case – beste geval (meestal niet zo interessant, behalve voor aartsoptimisten)

37 Twee technieken voor tijdsanalyse Tel van elke basisoperatie hoe vaak deze wordt uitgevoerd Analyseer de loopstructuur van je algoritme van binnen naar buiten Geavanceerdere technieken bestaan ook –Analyse van recursieve algoritmen met recurrente betrekkingen –… Datastructuren

38 Analyse van ZOEK-ELEMENT ZOEK-ELEMENT(x,A) {Input: Een element x en een array A (A loopt van 1 tot lengte(A))} {Output: Een index i zodat A[i] = x of 0 als geen element in A gelijk is aan x} i = 1; while i  lengte(A) do if (x == A[i]) then return i else i = i + 1; endif enddo; return 0 Elke slag van de while-loop doet 6 basisoperaties (of zo), en dit doen we voor elk van de elementen van de array hooguit 1 keer. Dus op een array met n elementen maximaal 6n+2 stappen Notatie: O(n) (leg ik later uit) Best case: O(1); average case: O(n) Datastructuren

39 Tijdsanalyse van INSERTION-SORT 1 Eerst dit: Hoeveel stappen kost één slag van de loop voor een bepaalde waarde van j ? –Weer een loop. –Elke doorgang door de loop kost iets van 8 elementaire stappen –Deze loop gaan we hooguit j keer rond –Nog eens 6 operaties buiten de loop –Dus 8 j + 6 operaties voor deze slag Datastructuren INSERTION-SORT(A) for j = 2 to lengte(A) do (*) key = A[j] {voeg A[j] op de goede plek in} i = j – 1; while i > 0 and A[i] > key do A[i+1] = A[i] {schuif eentje op} i = i – 1; A[i+1] = key (**)

40 Tijdsanalyse van INSERTION-SORT 2 Hoeveel stappen kost één slag van de loop voor een bepaalde waarde van j ? –8 j + 6 of minder We doen dit voor j=2, 3, …, tot lengte(A)=n Totaal: constante keer n 2 Schrijven we als O(n 2 ) Datastructuren INSERTION-SORT(A) for j = 2 to lengte(A) do (*) key = A[j] {voeg A[j] op de goede plek in} i = j – 1; while i > 0 and A[i] > key do A[i+1] = A[i] {schuif eentje op} i = i – 1; A[i+1] = key (**)

41 Tenslotte Volgende keer: –O-notatie: hoe zit dat nou precies? –Zoeken: binary search –Sorteren Datastructuren


Download ppt "Datastructuren en Algoritmen Datastructuren college 1."

Verwante presentaties


Ads door Google