Het eerstejaarsvak Algoritmiek is verplicht voor alle
studenten Informatica, Bioinformatica, Informatica en Economie,
en voor studenten die een dubbele propedeuse Wiskunde/Informatica doen.
Het vak levert 6 EC op.
Praktische informatie
Docent: Rudy van Vliet
te vinden op: kamer 140 van het Snellius
telefoon: 071-527 2876
email: rvvliet(at)liacs(dot)nl Assistenten werkcollege en practicum: ... Onderwijsvorm: hoorcollege, werkcollege en drie programmeeropdrachten Collegetijden:
hoorcollege vrijdag,
meestal
van 11.00-12.45 uur van Rudy van Vliet;
werkcollege vrijdag,
meestal
van 13.30-15.15 uur van de assistenten;
van 8 februari tot en met 24 mei 2019.
Het eerste hoorcollege, op vrijdag 8 februari, is vanwege de diesviering
al om 09.00 uur, en het werkcollege om 11.00 uur.
Op de vrijdagen 15 maart en 19 april
zijn er om diverse redenen geen colleges van dit vak.
Zowel hoorcollege als werkcollege is in principe in een collegezaal
(meestal in de De Sitterzaal).
Alleen op vier vrijdagen vindt het werkcollege plaats in
de computerzaal.
Voorkennis voor dit vak is het college
Programmeermethoden.
Het college dat op Algoritmiek aansluit heet
Datastructuren.
Dit wordt gegeven in het najaar (derde semester van de studie Informatica
(en Economie/Biologie)).
Inhoud van het vak
Algoritmiek gaat uiteraard over algoritmen.
Het vak behandelt diverse algemene algoritmische methoden voor het oplossen
van problemen, alsmede enkele bekende algoritmen zoals het algoritme van
Dijkstra. Elke methode wordt geillustreerd aan de hand van bekende of minder
bekende voorbeelden.
Probleemoplossingsmethoden die worden behandeld zijn o.a.:
toestand-actie-ruimte/state space tree
(als hulp bij het probleemoplossen),
brute force,
exhaustive search
(waaronder depth first search en breadth first search),
verdeel en heers,
backtracking,
dynamisch programmeren,
gretige algoritmen,
en branch-and-bound.
Verder wordt de sorteermethode heapsort behandeld, en komt het begrip
complexiteit
(om de efficientie van algoritmen te beschrijven en te vergelijken)
zijdelings aan de orde.
Voor globale informatie over het vak in studiejaar 2018-2019
wordt men verwezen naar de
algemene webpagina.
Doelstelling
Het leren toepassen van diverse probleemoplossingsmethoden.
Het leren en bestuderen van enige concrete algoritmen.
De bij het college behorende slides zijn hieronder nog te bekijken.
Programma
Het programma van colleges en werkcolleges
is hieronder nog na te kijken.
Voor elke week wordt vermeld welke onderwerpen aan de orde zijn
gekomen, met de bijbehorende hoofdstukken uit het boek en de gebruikte slides.
Op de laatste pagina van de slides staat overigens doorgaans ook welke
stof uit het boek bij het betreffende college hoort.
Ten slotte vind je hieronder de bij het werkcollege behandelde opgaven,
met (soms) antwoorden.
De tentamenstof bestaat uit: alles wat we gedurende het semester hebben
behandeld.
Dat komt op het volgende neer:
De hierboven gegeven slides bij de hoorcolleges.
Alleen slides 17 t/m 20 van hoorcollege 3
(over complexiteit-en-recursie)
hoef je niet te kennen.
De hierboven vermelde delen uit de derde editie van
het boek van Anany Levitin.
De opgaven die bij het werkcollege zijn behandeld, en die je hierboven
nog kunt vinden.
Alles wat bij hoor- en werkcollege en de programmeeropdrachten
aan de orde is gekomen.
Uiteraard moet je behandelde ontwerptechnieken voor algoritmes
ook op nieuwe problemen kunnen toepassen.
In afwijking van de tentamenstof van eerdere jaren hebben we dit jaar:
wel topologisch sorteren, het algoritme van Prim en de implementatie
van het algoritme van Kruskal behandeld,
niet de heap en heapsort behandeld.
Opgaven
Tijdens werkcolleges zijn opgaven gemaakt, meestal op papier,
soms achter de computer. Deze opgaven zijn hierboven in de tabel opgenomen.
Tweede werkcollege
Tijdens het tweede werkcollege is er een practicumopdracht gedaan
in de computerzalen van het Snellius.
Daarvoor kon je gebruik maken van het volgende
framework.
Volg de volgende stappen om te beginnen:
Download het framework, en zet het in de gewenste directory.
Pak het framework uit
(onder Linux kan dat bijvoorbeeld met "tar xvfz bomenpracticum.tar.gz").
Ga naar de directory "bomenpracticum" (onder Linux kan dat bijvoorbeeld
met "cd bomenpracticum").
Bekijk het bestand "readmelinux.txt"
voor de precieze bedoeling en werking van het programma.
De opgaven staan hierboven in de tabel met het programma van colleges
en werkcolleges.
Bewerk "boom.cc" zoals aangegeven in de twaalf opgaven.
De liefhebbers kunnen ook zelf bomen maken om uit te proberen.
Zie voor de gewenste codering van de bomen het bestand
"readmelinux.txt".
Programmeeropdrachten
Bij het vak horen drie programmeeropdrachten in de programmeertaal C++,
in elk waarvan een besproken oplossingsmethode toegepast moet worden
om een gegeven probleem op te lossen.
De opdrachten moeten alle drie voldoende zijn
(>=5.5). Programmeerwerk mag in tweetallen worden gemaakt.
De opdrachten dienen op (of voor) de deadlines te worden ingeleverd.
Eventueel mag (uiterlijk) twee weken te laat worden ingeleverd,
maar dan gaat er voor iedere (gedeeltelijke) week 1 punt van het cijfer af.
Als plagiaat wordt geconstateerd, krijgen de betrokken teams geen cijfer
voor de betreffende opdracht en dit collegejaar ook geen mogelijkheid
om de opdracht alsnog te doen.
Studenten die vorig studiejaar alle drie programmeeropdrachten hebben afgerond,
hoeven het programmeerwerk dit jaar niet opnieuw te doen.
Ouderejaars studenten die het practicum helemaal niet of slechts
gedeeltelijk hebben gedaan,
moeten contact opnemen met de docent: rvvliet(at)liacs(dot)nl.
Deelresultaten blijven niet automatisch geldig.
Meer informatie, zoals over het schrijven van het verslag in LaTeX, is
hier
te vinden.
Alle opdrachten zijn nagekeken, en ook de herkansingen.
U vindt de cijfers in
Blackboard.
Toetsing
Schriftelijk tentamen aan het eind van het semester.
Het eindcijfer van het vak is een gewogen gemiddelde van de cijfers
voor het tentamen (twee derde) en de programmeeropdrachten (samen een derde).
Zowel tentamen als (alle) programmeeropdrachten moeten voldoende
(>=5.5) zijn.
Wie het tentamen niet haalt, krijgt het (onvoldoende) tentamencijfer als
eindcijfer. Wie het tentamen wel haalt, maar de programmeeropdrachten niet
(allemaal) heeft afgerond, krijgt nog geen eindcijfer. In dit laatste geval
blijft het voldoende tentamencijfer staan totdat het programmeerwerk is
afgerond.
Tentamens
Grafische/programmeerbare rekenmachines zijn niet toegestaan tijdens
het tentamen.
Er zijn twee tentamens geweest:
Eerste tentamen: donderdag 6 juni 2019, 14.00-17.00 uur,
in het Snellius in Leiden.
Hertentamen: maandag 8 juli 2019
14.00-17.00, in het Snellius in Leiden.
Beide tentamens zijn nog terug te vinden in de lijst met oude tentamens
onderaan. Voor het eerste tentamen staat daar ook
een uitwerking van de docent.
Beide tentamens zijn nagekeken, de cijfers zijn bekend,
en ook de eindcijfers, voor zover die al te bepalen zijn.
Alle cijfers zijn te vinden in
Blackboard.
Hierbij geldt de volgende
legenda.
Vragenuur
Op woensdag 5 juni 2019 was er vanaf 11.00 uur een vragenuur voor
het tentamen.
Daarbij kon je de vragen stellen die opgekomen waren bij
het leren voor het tentamen.
Het vak Algoritmiek wordt al vele jaren gegeven.
De vorige keer was in het voorjaar van 2018. De website van die keer
vindt u hier.
U vindt daar ook nog meer oude tentamens.
Vragen en/of opmerkingen kunt u sturen naar:
Rudy van Vliet;
rvvliet(at)liacs(dot)nl
Laatste wijziging: 16 december 2019
- http://www.liacs.leidenuniv.nl/~vlietrvan1/algoritmiek/