Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Like dokumenter
INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF2220: Forelesning 1

INF2220: Forelesning 1

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Inf 1020 Algoritmer og datastrukturer

INF2220: Forelesning 2

Binære trær: Noen algoritmer og anvendelser

Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

Trær. En datastruktur (og abstrakt datatype ADT)

Definisjon av binært søketre

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

Object [] element. array. int [] tall

Generelle trær BINÆRTRÆR. Binærtrær

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Algoritmer og Datastrukturer

LO118D Forelesning 12 (DM)

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 2

Et eksempel: Åtterspillet

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

EKSAMEN med løsningsforslag

UNIVERSITETET I OSLO

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Notater til INF2220 Eksamen

Kap 9 Tre Sist oppdatert 15.03

Definisjon: Et sortert tre

UNIVERSITETET I OSLO

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Et eksempel: Åtterspillet

Algoritmer - definisjon

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Løsningsforslag

Uke 5 Disjunkte mengder

Lars Vidar Magnusson

Løsnings forslag i java In115, Våren 1998

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

UNIVERSITETET I OSLO

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Algoritmer og datastrukturer Eksamen

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Algoritmeanalyse. (og litt om datastrukturer)

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og Datastrukturer IAI 21899

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Algoritmer - definisjon

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

PG4200 Algoritmer og datastrukturer Forelesning 7

INF Algoritmer og datastrukturer

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Algoritmer og Datastrukturer

MAT1030 Diskret Matematikk

Løsnings forslag i java In115, Våren 1996

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Disjunkte mengder ADT

IN Algoritmer og datastrukturer

Løsnings forslag i java In115, Våren 1999

INF1010 Binære søketrær ++

Sist forelesning snakket vi i hovedsak om trær med rot, og om praktisk bruk av slike. rot. barn

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Trær og mengder

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Løsningsforslag

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

Grunnleggende Grafteori

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

INF Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 10

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

MAT1030 Diskret matematikk

INF1010 notat: Binærsøking og quicksort

Lars Vidar Magnusson

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

INF1020 Algoritmer og datastrukturer. Dagens plan

INF Algoritmer og datastrukturer

INF1010 siste begreper før oblig 2

Pensum: fra boken (H-03)+ forelesninger

INF3/4130 PRØVE-EKSAMEN MED SVARFORSLAG Gjennomgås 1/ , (lille aud.)

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo

INF Algoritmer og datastrukturer

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

INF2220: Time 12 - Sortering

PG4200 Algoritmer og datastrukturer Forelesning 2

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Pensum: fra boken (H-03)+ forelesninger

Transkript:

va er en algoritme? Vanlig sammenligning: Oppskrift. nput lgoritme NF1020 - ØSTEN 2006 Kursansvarlige Ragnar Normann E-post: ragnarn@ifi.uio.no Output Knuth : tillegg til å være et endelig sett med regler som gir en sekvens av operasjoner for å løse en bestemt type problem, har en algoritme fem viktige kjennetegn: 1. Endelighet. 2. Definerthet. 3. nput. 4. Output. rild Waaler E-post: arild@ifi.uio.no Dagens tema Praktiske opplysninger nalyse av algoritmer (kapittel 2) ntroduksjon til trær (kapittel 4) 5. Effektivitet. Donald E. Knuth: The rt of omputer Programming. Volume 1/Fundamental lgorithms. rk 1 av 21 Forelesning 21.8.2006 rk 3 av 21 Forelesning 21.8.2006 nalyse av tidsforbruk vor mye øker kjøretiden når vi øker størrelsen på input? To typer analyse: Gjennomsnittlig tidsforbruk (average-case) Verste tilfelle (worst-case) lternative metoder: Kode algoritmen og ta tiden for ulike størrelser på input. Finne en enkel funksjon som vokser på samme måte som eksekveringstiden til programmet. NF1020 Et av de mest sentrale grunnkursene i informatikkutdanningen og et av de vanskeligste! Kurset hever programmering fra et håndverk til et universitetsfag. Eksamen krever både teoretiske og praktiske ferdigheter. Et arbeidskrevende modningsfag. Løs oppgaver gjennom hele semesteret! Lærebok Data Structures & lgorithm nalysis in Java av Mark llen Weiss. Sjekk fagets hjemmeside regelmessig. Forelesningsplanen kan bli endret underveis. Kurset forutsetter NF1010. Spesielt: Rekursjon. Forelesning 21.8.2006 rk 4 av 21 Forelesning 21.8.2006 rk 2 av 21

Vanlige funksjoner for O( ) Eksempler: Funksjon Navn 1 Konstant log n Logaritmisk n Lineær n log n n 2 Kvadratisk n 3 Kubisk 2 n, n! Eksponensiell n/2, n, 2n er alle O(n). n 2 + n + 1 regnes som O(n 2 ). log 2 n, og log 10 n skilles bare av en konstant, begge angis med O(log n). Logaritmer Logaritmer har et grunntall X, for eksempel X = 2 eller X = 10. Vi bruker stort sett X = 2. Logaritmen til et tall er det tallet vi må opphøye grunntallet X i for å få, det vil si: X = = log X Eksempler: 2 1 = 2 1 = log 2 2 2 2 = 4 2 = log 2 4 2 3 = 8 3 = log 2 8 2 4 = 16 4 = log 2 16 2 10 = 1 024 10 = log 2 1 024 2 20 = 1 048 576 20 = log 2 1 048 576 Forelesning 21.8.2006 rk 7 av 21 Forelesning 21.8.2006 rk 5 av 21 Enkel beregning av tid Enkel setning: x = y + z; Enkel for-løkke: brukt[i] = false; Nestede for-løkker: for (int k = 0; k < n; k++) { avstand[i][k] = 0; O-notasjon Generelt er vi ikke interessert i nøyaktig hvor mye tid et program bruker, men heller prøve å angi i hvilken størrelsesorden løsningen ligger. Definisjon La T(n) være kjøretiden til programmet. T(n) = O( f(n)) hvis det finnes positive konstanter c og n 0 slik at T(n) c f(n) når n > n 0. O( f(n)) er da en øvre grense for kjøretiden. Problemet er å finne en f(n) som er minst mulig. Forelesning 21.8.2006 rk 8 av 21 Forelesning 21.8.2006 rk 6 av 21

Trær brukes gjerne til å representere en rekke typer av data som er organisert hierarkisk. Typiske eksempler er: Filorganisering Slektstrær Organisasjonskart Klassehierarki (i for eksempel Java) haracter Number Object Double Float nteger String Error Throwable Exception Sekvens av setninger: x = y + z; brukt[i] = false; etinget setning: if (n < 0) { System.out.println( ngen elementer ); else { sum += i; Forelesning 21.8.2006 rk 11 av 21 Forelesning 21.8.2006 rk 9 av 21 Definisjon Et tre er en samling noder. Et ikke-tomt tre består av en spesiell node r, kalt roten, og null eller flere ikke-tomme subtrær. Fra r går det en rettet kant til roten i hvert subtre. Terminologi Eksempler: D E F er roten (rot-noden) er forelder til D og E D og E er barna til er søsken til D, E, F, G og er bladnoder (løvnoder),, og er interne noder G Trær Ulike typer trær: Generelle trær (kap. 4.1) inærtrær (kap. 4.2) inære søketrær (kap. 4.3) -trær (kap. 4.7) ktuelle temaer: ruksområder mplementasjon nnsetting/fjerning av elementer Søking etter elementer Traversering Forelesning 21.8.2006 rk 12 av 21 Forelesning 21.8.2006 rk 10 av 21

To populære traverseringsmåter: Prefiks (preorder): Gjør noe med en node før vi går videre til barna. Postfiks (postorder): Gjør noe etter at vi har besøkt alle barna til noden. mplementasjoner Forslag 1 tillegg til data kan hver node inneholde en peker til hvert av barna. Problemer: ntall barn kan variere veldig fra node til node. Vet ikke nødvendigvis antall barn på forhånd. Forslag 2 ver node inneholder en liste med pekere til barna. D E F G class TreNode { Object element; TreNode forstearn; TreNode nestesosken; Prefiks: Postfiks: D E F G Forelesning 21.8.2006 rk 15 av 21 Forelesning 21.8.2006 rk 13 av 21 Mer terminologi En vei (sti) fra en node n 1 til en node n k er definert som en sekvens av noder n 1, n 2,..., n k slik at n i er forelder til n i+1 for 1 i k. Lengden av denne veien er antall kanter på veien, det vil si k 1. Traversering Å traversere et tre vil si å besøke alle (eventuelt bare noen av) nodene i treet, for eksempel fordi vi: Leter etter en bestemt node (element) Vil sette inne en ny node (med et nytt element) Vil fjerne en node/element Vil gjøre en eller annen beregning (eller utskrift) på alle nodene i treet. vilken rekkefølge vi besøker nodene i bestemmes av det problemet vi skal løse. Forelesning 21.8.2006 rk 16 av 21 Forelesning 21.8.2006 rk 14 av 21

inærtrær Et binærtre er et tre der hver node aldri har mer enn to barn. Dersom det bare er ett subtre, må det være angitt om dette er venstre eller høyre subtre. verste fall blir dybden N-1! For enhver node er dybden definert som lengden av (den unike) veien fra roten til noden. Roten har altså dybde 0. Rekursiv metode for å beregne dybden til alle nodene i et tre: // Kall: rot.beregndybde(0) void beregndybde(int d) { this.dybde = d; for ( < hvert barn b > ) { b.beregndybde(d + 1); mplementasjon Siden hver node har maks to barn, kan vi ha pekere direkte til dem: class innode { Object element; innode venstre; innode hoyre; D E F G Forelesning 21.8.2006 rk 19 av 21 Forelesning 21.8.2006 rk 17 av 21 Eksempel: Uttrykkstrær uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer. + * 5 3 2 + 1 4 Mulige skrivemåter for dette uttrykket: Prefiks: nfiks: * øyden til en node er definert som lengden av den lengste veien fra noden til en bladnode. lle bladnoder har dermed høyde 0. øyden til et tre er lik høyden til roten. Rekursiv metode for å beregne høyden til alle nodene i et tre: // Kall: rot.beregnoyde() int beregnoyde() { int tmp; this.hoyde = 0; for ( < hvert barn b > ) { tmp = b.beregnoyde() + 1; if (tmp > this.hoyde) { this.hoyde = tmp; return this.hoyde; Postfiks: Forelesning 21.8.2006 rk 20 av 21 Forelesning 21.8.2006 rk 18 av 21

Traversering av binærtrær oppsummering void traverser(innode n) { if (n!= null) { < Gjør PREFKS-operasjonene > traverser(n.venstre); < Gjør NFKS-operasjonene > traverser(n.hoyre); < Gjør POSTFKS-operasjonene > Forelesning 21.8.2006 rk 21 av 21