logo
Forelesningsplan
Algoritmer og datastrukturer
IT, Høgskolen i Østfold
AlgDat 12 > Forelesningsplan

Forelesningsplan

Her finner du en plan over hva som skal foregå i de nærmeste forelesningene.

Fra og med mandag 9. januar:

  • Mandag 09:15 - 11:00, D1-057
  • Torsdag 10:15 - 12:00, D1-052
  • Torsdag 10:15 - 12:00, D1-052 (Øving)

Jeg regner læreboka som støttelitteratur. I de tilfellene det vil være særlig nyttig å konsultere læreboka, vil jeg referere til spesifikke kapitler i oversikten over forelesningene.

Uke nr. Mandag Torsdag Fredag (Øving)
2 Introduksjon, oppvarmingsøvelser.
Emner: Kurset, Datastrukturer, Algoritmer.
Notater
Lewis & Chase: 1.2
Mer oppvarming. Java repetisjon. Emner: Java.
Notater
Java intro, Netbeans, primitive typer, referanse typer, løkker etc.
Java: Main.java, MyInt.java.
Ressurser: What Is an Object?, What Is a Class?, What Is a Package?.
3 Mer Java: Klasser, arv, interface. Lineære datastrukturer: Arrays, lenkede lister.
Emner: Java, Samlinger, Lenkde lister.
Java: Main.java, MyList.java, ArrList.java.
Ressurser: What Is Inheritance?, What Is An Interface?, Lesson: Generics.
Lewis & Chase: Appendix B
Mer om lister.
Java: Main.java, MyList.java, ArrList.java, Node.java, LinkList.java.
Emner: Lister, Lenkede lister.
Ressurser: Collections, Innsetting i tabelliste, Fjerning i tabelliste, Finne i lenket list, Fjerning i lenket liste, Sette inn i lenket liste.
Lewis & Chase: Chapter 6
Oppgavesett 01 og 02, Java/Eclipse "orakel"-tjeneste, debugging
4 Java Generics. Kø, Stack. Emner: Køer, Stakker.
Java: Lecture05.GenList,Lecture05.ArrGenList, Lecture05.LinkGenList, Lecture05.Main.
Lewis & Chase: Chapter 4 og 5
Oppvarming til algoritmeanalyse: Sortering, worst case.
Lewis & Chase: 8.1 - 8.2
Oppgavesett 02 og 03, debugging
5 Oppvarming til algoritmeanalyse: Søking, sortering, kvasikode.
Java: lecture07.Sort, lecture07.Search, lecture07.Main.
Emner: Notasjon.
Logaritmer, Algoritmeanalyse.
Notater
Emner: Analyse.
Lewis & Chase: Chapter 2
Oppgavesett 03 og 04, Algoritmeanalyse med testkjøringer.
Empirisk algoritmeanalyse: Sort.java (obs: ikke bruk System.gc() under timingen, det ødelegger resultatet fullstendig!), og regneark med plotting: algtest.odt
6 Rekursjon, Quicksort
Notater
Lewis & Chase: 7.1, 7.2, 7.4
avlyst Oppgavesett 04 og 05
7 Mer Quicksort, Mergesort (flettesortering)
Java: Lecture11.QuickSort
Lewis & Chase: 250-255
Moro med stack: Syntaxsjekking og kalkulator
Lewis & Chase: 3.5
Ingen øvelse.
8 Ingen forelesning Ingen forelesning. Ingen øvelse.
9 Trær: Binære trær, søketrær, traversering
Lewis & Chase: 9.1 - 9.7
Mer trær Avlyst
10 Mer trær
Lewis & Chase: 10.1 - 10.4
Java: Lecture15.TreeNode, Lecture15.Bst
Balansering av trær. AVL trær
Lewis & Chase: 10.5 - 10.6
Oppgavesett 06 og 07
11 Dronningproblemet: permutasjoner Permutasjoner, hashing.
Java: Queens.java
Ingen øvelse
12 Avlyst Mer hashing. Binærheap.
Emner: Hashtabeller
Lewis & Chase: 11.1 - 11.4, 14.1 - 14.5
Oppgavesett 08 ++
13 Implisitt (tabell) representasjon av trær. Heapsort
Lewis & Chase: 11.5
Påskelabyrint!
Lewis & Chase: 7.3
Java: Maze.java
Oppgavesett 09 ++
14 Påske Påske Påske
15 Påske Nettverk
Lewis & Chase: 12.1-13.6
Oppgavesett 10
Java: HeapSort.java...som vi gjør ferdig neste fredag :)
16 Nettverk: Korteste vei, traveling salesman problem Dijkstras algoritme Eksamenstrening, labyrint + Dijkstra: V2011-4 og V2010-4
Java: Graph.java, ferdigstilt HeapSort: HeapSort.java.
17 Oppsummering: Eksamenstips, Overblikk Eksamenstrening
Meny (Vi kommer ikke til å rekke gjennom alt like nøye, derfor er det viktig at dere forbereder dere og melder fra der skoen trykker mest):
  • v10 1: Analyse
  • v11 3: Kø
  • h04 1.5-1.7: Innsettingssortering på lenket liste
  • h02 2: Binære søketrær
  • v10 3: Binærheap + AVL
  • h02 3: Magisk kvadrat
  • h01 4, 5: Snadder :)
Eksamenstrening
18 Ekstra eksamenstrening - -

Gjennomgåtte temaer

Java

  • Pakker, primitive typer (int, char etc.), referanser
  • Løkker
  • Tabeller
  • Klasser: Arv, Interface, Generics

Datastrukturer

  • Definisjon
  • Lineære, hierarkiske og nettverksstrukturer
  • Lister
  • Tabellbaserte lister
  • Lenkede lister
  • Kø (FIFO), Stack (LIFO)
  • Binære trær
  • Binære søketrær
  • AVL trær
  • Komplett binærtre
  • Hash tabell
  • Prioritetskø
  • Max- og Min-Heap
  • Hash tabell
  • Nettverk: matrise
  • Nettverk: Noder og kanter

Algoritmer

  • Definisjon
  • Pseudokode
  • Iterativ løsning av Hanoi's tårn
  • Søking, innsetting og fjerning av elementer i lister
  • Binærsøk
  • Innsettingssorterting, utvalgssortering
  • Pseudokode
  • Rekursjon
  • Effektivitet, algoritmeanalyse, Store O, Big Oh
  • Flettesorterting (Mergesort)
  • QuickSort
  • Syntax sjekking med stack
  • Konvertering fra infix til postfix
  • Evaluering av postfix-uttrykk
  • Søking i binære søketrær
  • Beregne høyden i et binærtre
  • Innsetting og sletting i binære søketrær
  • AVL-balansering
  • Permutasjoner
  • Hashing
  • Sette inn og ta ut i max(min)heap
  • Bygge heap
  • Heapsort
  • Dybdesøk
  • Breddesøk
  • Korteste vei: Dijkstra

Anvendelser

  • Google Maps
  • Hanoi's tårn
  • Palindromsjekking
  • Syntaxsjekking
  • Dronningproblemet (8-queens, N-queens)

Diverse

  • Summen av de N første heltall: (N2+N)/2
  • Her er er et eksempel på løsning av en typisk Dijkstra oppgave (v08-5): Ferdigbehandlede noder er streket under. Oppdaterte noder (der veien er blir kortere enn før) er uthevet med fet skrift.
    a b c d e Kommentar
    Init a:0 -:∞ -:∞ -:∞ -:∞ Avstanden fra a til a settes til 0. De andre avstandene settes til uendelig, og deres "via"-noden settes til "-"
    1 a:0 a:13 a:4 a:7 Vi velger noden med kortest avstandsverdi, dvs. a. Dernest oppdaterer vi avstanden til a ("via a") i alle nabonodene som ikke er ferdigbehandlet, dvs,. b, c, og d. Noden a er etter dette ferdig behandlet, og vi markerer med å sette strek under den.
    2 a:4 c:11 Vi velger node c (kortest vei). For alle naboene til c som ikke er ferdigbehandlet, dvs e, sjekker vi om veien til a er kortere via c enn den til nå korteste veien, og det er den, og vi oppdaterer.
    3 a:7 d:9 Vi velger node d (korteste vei til nå). For alle noboer som ikke er ferdigbehanldet (e), sjekker vi om veien er kortere via d enn via c, og det er den, og vi oppdaterer e.
    4 e:10 d:9 Blant nodene som ikke er ferdighbehandlet, har e har nå kortest vei. Den har en nabo som ikke er ferdig, b, og veien til a vi e er 9, som er mindre enn 13, og vi oppdaterer.
    5 e:10 Det er nå kun en node som ikke er ferdigbehandlet, b, og den har jo da ingen naboer som ikke er ferdigbehandlet, og vi er framme!
Gunnar Misund, 13.jun.2012