INF 295 Algoritmer og datastrukturer Forelesning 1 - kapittel 1 Introduksjon Hans F. Nordhaug (Ola Bø) (Ketil Danielsen, 2007)
Praktiske forhold Lærebok Obligatoriske oppgaver Ukeoppgaver Hjelpelærer (faglærer) E-postliste / ClassFronter Arbeidsformer
Mål for kapittelet Programytelse på store og små datamengder Oppsummering av matematisk bakgrunn Rekursjon Viktige trekk ved Java
Hva handler boka om Mange programmeringsproblemer kan løses på forskjellige måter - med forskjellige algoritmer Algoritmene har ulik effektivitet Et problem kan løses på sekunder eller på dager avhengig av algoritmen Store datamengder fører lett til problemer Det er m.a.o. ikke nok at algoritmen virker - den må også være rask nok -- vi må kunne estimere kjøretid (uten å programmere), foresøke å lage raskere algoritmer, finne flaskehalser m.m.
eksempler gjenganger: Selection Problem - finn k'de høyeste (eller laveste) verdi i en mengde A Sorter A og finn k'de element (1.1) Sorter første k i A, deretter innstikk av eventuelle (1.1) Quickselect (7.7.6, Hoare ca. 1961) raskere Quickselect (10.2.3) ordpusler, dronningproblemet,... oppgave: Lag den enkle varianten av selection.
Matematisk repetisjon (fra diskret matematikk) Potenser Logaritmer Rekker Modulus-aritmetikk Bevis Induksjonsbevis Bevis ved selvmotsigelse
Kort repetisjon av rekursjon (fra videreg.prog.) Direkte rekursjon har vi når en metode kaller seg selv Hva er så indirekte rekursjon Gir ofte enkle algoritmer Kan være ineffektivt (når samme beregning gjentas i ulike rekursjonskall) Kan være umulig (ved stor rekursjonsdybde)
Regler for rekursjonsalgoritmer Regler 1. Basistilfelle som kan løses uten rekursjon må finnes 2. Gjør framgang mot basistilfellet 3. Anta at alle rekursive kall virker 4. Rentesrente regelen - Dupliser aldri arbeid ved å gjenta samme løsning i separate rekursive kall.