INF2220: Forelesning 1

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

INF2220: Forelesning 1

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

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

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

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

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

INF2220: Forelesning 2

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

Inf 1020 Algoritmer og datastrukturer

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

INF2220: Forelesning 2

Definisjon av binært søketre

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

Binære trær: Noen algoritmer og anvendelser

Object [] element. array. int [] tall

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

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

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

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

Definisjon: Et sortert tre

UNIVERSITETET I OSLO

Kap 9 Tre Sist oppdatert 15.03

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

EKSAMEN med løsningsforslag

Lars Vidar Magnusson

IN Algoritmer og datastrukturer

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

Et eksempel: Åtterspillet

UNIVERSITETET I OSLO

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer IAI 21899

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

PG4200 Algoritmer og datastrukturer Forelesning 7

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

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

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

INF Algoritmer og datastrukturer

Notater til INF2220 Eksamen

INF1010 Binære søketrær ++

Algoritmer og Datastrukturer

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

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

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

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

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

EKSAMEN. Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

København 20 Stockholm

Algoritmeanalyse. (og litt om datastrukturer)

INF1010 siste begreper før oblig 2

UNIVERSITETET I OSLO

INF1010 notat: Binærsøking og quicksort

Algoritmer og Datastrukturer

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

Balanserte binære søketrær

Algoritmer og datastrukturer Eksamen

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

LO118D Forelesning 12 (DM)

Algoritmer - definisjon

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

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

Algoritmer og datastrukturer Eksamen

Trær. Består av sammenkoblede noder Hver node har 0 eller flere barne-noder. Må være asyklisk. Et tre med n noder har n-1 kanter.

INF2220: Time 12 - Sortering

Pensum: fra boken (H-03)+ forelesninger

Et eksempel: Åtterspillet

Algoritmer - definisjon

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Pensum: fra boken (H-03)+ forelesninger

UNIVERSITETET I OSLO

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

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

INF2810: Funksjonell Programmering. Trær og mengder

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Løsningsforslag

INF1020 Algoritmer og datastrukturer. Dagens plan

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

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

Disjunkte mengder ADT

Lars Vidar Magnusson

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

UNIVERSITETET I OSLO

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

Selv-balanserende søketrær

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

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

Transkript:

INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6)

Praktisk informasjon 2

Praktisk informasjon Kursansvarlige Ingrid Chieh Yu de Vibe (ingridcy@ifi.uio.no) Dino Karabeg (dino@ifi.uio.no) Arne Maus (arnem@ifi.uio.no) Forelesninger Torsdag 10-12, Simula OJD Vær oppmerksom på at ikke alt som er pensum, foreleses ikke alt som foreleses står på lysarkene Gruppetimer 5 grupper; hver har: 2 timer/uke seminarrom 2 timer/uke terminalstue 3

Praktisk informasjon (forts) Obligatoriske oppgaver Oblig 1 torsdag 17/9 Oblig 2 torsdag 15/10 Oblig 3 torsdag 12/11 Eksamen Mandag 14/12 kl 14.30-18.30 Alle trykte og skrevne hjelpemidler tillatt Lærebok Mark Allen Weiss: Data Structures and Algorithm Analysis in Java (3nd edition) 4

INF2220 algoritmer og datastrukturer 5

INF2220 algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikk og et av de vanskeligste! 5

INF2220 algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikk og et av de vanskeligste! Kurset hever programmering fra et håndverk til en vitenskap. 5

INF2220 algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikk og et av de vanskeligste! Kurset hever programmering fra et håndverk til en vitenskap. Eksamen krever både teoretiske og praktiske ferdigheter. 5

INF2220 algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikk og et av de vanskeligste! Kurset hever programmering fra et håndverk til en vitenskap. Eksamen krever både teoretiske og praktiske ferdigheter. Forelesninger og gruppetimer utfyller hverandre. Forelesninger fokuserer på teori og ideer Gruppetimene gir trening både i teorioppgaver og praktisk programmering 5

INF2220 algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikk og et av de vanskeligste! Kurset hever programmering fra et håndverk til en vitenskap. Eksamen krever både teoretiske og praktiske ferdigheter. Forelesninger og gruppetimer utfyller hverandre. Forelesninger fokuserer på teori og ideer Gruppetimene gir trening både i teorioppgaver og praktisk programmering Et arbeidskrevende modningsfag. Jobb med oppgaver gjennom hele semesteret! 5

INF2220 algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikk og et av de vanskeligste! Kurset hever programmering fra et håndverk til en vitenskap. Eksamen krever både teoretiske og praktiske ferdigheter. Forelesninger og gruppetimer utfyller hverandre. Forelesninger fokuserer på teori og ideer Gruppetimene gir trening både i teorioppgaver og praktisk programmering Et arbeidskrevende modningsfag. Jobb med oppgaver gjennom hele semesteret! Sjekk hjemmesiden regelmessig for viktige beskjeder. Forelesningsplanen kan bli endret underveis. 5

INF2220 algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikk og et av de vanskeligste! Kurset hever programmering fra et håndverk til en vitenskap. Eksamen krever både teoretiske og praktiske ferdigheter. Forelesninger og gruppetimer utfyller hverandre. Forelesninger fokuserer på teori og ideer Gruppetimene gir trening både i teorioppgaver og praktisk programmering Et arbeidskrevende modningsfag. Jobb med oppgaver gjennom hele semesteret! Sjekk hjemmesiden regelmessig for viktige beskjeder. Forelesningsplanen kan bli endret underveis. Kurset forutsetter INF1010, spesielt lister og rekursjon. 5

ANALYSE AV ALGORITMER 6

Hva er en algoritme? Vanlig sammenligning: oppskrift Input Algoritme Output Besides merely being a finite set of rules that gives a sequence of operations for solving a particular type of problem, an algorithm has five important features: 1. Finiteness. 2. Definiteness. 3. Input. 4. Output. 5. Effectiveness. Donald E. Knuth: The Art of Computer Programming. Vol. 1: Fundamental Algorithms, p. 4

Analyse av tidsforbruk 8

Analyse av tidsforbruk Hvor mye øker kjøretiden når vi øker størrelsen på input? To typer analyse: Gjennomsnittlig tidsforbruk (average-case) Verste tilfelle (worst-case) Alternative metoder: Implementere algoritmen og ta tiden for ulike typer og størrelser på input. Finne en enkel funksjon som vokser på samme måte som kjøretiden til programmet. 9

O-notasjon Generelt er vi ikke interessert i nøyaktig hvor mye tid et program bruker, men vil 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. Oppgaven er å finne en f(n) som er minst mulig. 10

Vanlige funksjoner for O() Funksjon Navn 1 Konstant log n Logaritmisk n log n n Lineær n 2 Kvadratisk n 3 Kubisk 2 n Eksponensiell n! O-notasjon er en veldig forenklet (asymptotisk) måte å angi tidsforbruk på, og vi forkorter så mye som mulig. Merk at konstanter allerede ligger i definisjonen. Eksempler: n/2, n, 2n: O(n) n 2 + n + 1: O(n 2 ) log 2 n, log 10 n: O(log n) 11

Logaritmer Logaritmer har et grunntall X, for eksempel X = 2 eller X = 10. Vi bruker stort sett X = 2. Logaritmen til et tall B er det tallet A vi må opphøye grunntallet X i for å få B, dvs X A = B! A = log X B. 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 14

Enkel beregning av tid Enkel setning: x = y + z; Enkel for-løkke: for (int i = 0; i < n; i++) { brukt[i] = false; } Nøstede for-løkker: for (int i = 0; i < n; i++) { for (int k = 0; k < n; k++) { avstand[i][k] = 0; } } 15

Enkel beregning av tid (forts.) Sekvens av setninger: x = y + z; for (int i = 0; i < n; i++) { brukt[i] = false; } Betinget setning: if (n < 0) { sum = -1; } else { for (int i = 0; i < n; i++) { sum += i; } } 16

TRÆR 17

Trær Ulike typer trær: Generelle trær (kap. 4.1) Binærtrær (kap. 4.2 og 4.6) Binære søketrær (kap. 4.3) B-trær (kap. 4.7) Aktuelle temaer: Bruksområder Implementasjon Innsetting og fjerning av elementer Søking etter elementer Traversering

Generelle trær Trær brukes gjerne for å representere data som er organisert hierarkisk. Typiske eksempler er: Filorganisering Slektstrær Organisasjonskart Klassehierarki (for eksempel i Java): Object Character Number String Throwable Double Float Integer Error Exception 19

Terminologi Et tre er en samling noder. Et ikke-tomt tre består av en rot-node og null eller flere ikke-tomme subtrær. Fra roten går det en rettet kant til roten i hvert subtre. (Denne definisjonen er rekursiv!) Eksempler: A A er roten (rot-noden) B er forelder til D og E D og E er barna til B B C C er søsken til B D E F G H D, E, F, G og I er løvnoder (bladnoder) A, B, C og H er indre noder I 21

Implementasjon forslag 1 I tillegg til data kan hver node inneholde en peker til hvert av barna: class TreNode { Object element; TreNode barn1; TreNode barn2; TreNode barn3;... } Problemer: Antall barn kan variere fra node til node. Vet ikke nødvendigvis antall barn på forhånd. 22

Implementasjon forslag 2 Hver node peker til første barn og neste søsken: class TreNode { Object element; TreNode forstebarn; TreNode nestesosken; } A B C D E F G H I 23

Implementasjon forslag 3 Hver node inneholder en liste med pekere til barna: class TreNode { Object element; List<TreNode> barn; } 24

Traversering Å traversere et tre vil si å besøke alle (eller noen av) nodene i treet, for eksempel for å Lete etter en bestemt node (element). Sette inn en ny node (med et nytt element). Fjerne en node/element. Gjøre en beregning (eller utskrift) på nodene i treet. Problemet som skal løses avgjør traverseringsrekkefølgen. 25

Traversering (forts) To populære traverseringsmåter: Prefiks (preorder): behandle noden før vi går videre til barna. Postfiks (postorder): behandle noden etter at vi har besøkt alle barna til noden. A B C D E F G H I 26

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. A B C D E F G H I 27

Dybde Dybden til en node er definert av (den unike) veien fra roten til noden. Roten har altså dybde 0. Rekursiv metode for å beregne dybden til alle nodene i et tre: A // Kall:rot.beregnDybde(0); void beregndybde(int d) { this.dybde = d; for (<hvert barn b>) { b.beregndybde(d+1); } } B C D E F G H I 28

Høyde Høyden til en node er definert som lengden av den lengste veien fra noden til en løvnode. Alle løvnoder har dermed høyde 0. Høyden til et tre er lik høyden til roten. // Kall:rot.beregnHoyde(); } int beregnhoyde() { int tmp; this.hoyde = 0; for (<hvert barn b>) { tmp = b.beregnhoyde() + 1; if (tmp > this.hoyde) { this.hoyde = tmp; } } return this.hoyde; 29

BINÆRTRÆR 30

Binæ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. I verste fall blir dybden N-1!

Implementasjon av binærtrær Siden hver node maksimalt har to barn, kan vi ha pekere direkte til dem: class BinNode { Object element; BinNode venstre; BinNode hoyre; } 32

Eksempel: Uttrykkstrær I uttrykkstrær inneholder løvnodene operander (konstanter, variabler, ), mens de indre nodene inneholder operatorer. * Postfiks: + * Infiks: 5 3 2 + Prefiks: 1 4 33

Traversering av binærtrær - void traverser(binnode n) { if (n!= null) { < Gjør PREFIKS-operasjonene > traverser(n.venstre); < Gjør INFIKS-operasjonene > traverser (n.hoyre); < Gjør POSTFIKS-operasjonene > } 34

Oppgave 4.5 Vis at et binærtre med høyde h har maksimalt 2 h+1 1 noder. 35

BINÆRE SØKETRÆR 36

Binære søketrær Binære søketrær er en variant av binærtrær hvor følgende for hver node i treet: Alle verdiene i venstre subtre er mindre enn verdien i noden selv. Alle verdiene i høyre subtre er større enn verdien i noden selv. 8 1 4 12 2 2 7 9 15 3 6 11 13 16 Hvordan håndtere noder med like verdier? (Ukeoppgave.) 4

Søking: Rekursiv metode public BinNode finn(comparable x, BinNode n) { if (n == null) { return null; } else if (x.compareto(n.element) < 0) { return finn(x, n.venstre); } else if (x.compareto(n.element) > 0) { return finn(x, n.hoyre); } else { return n; } } Antagelse: Alle nodene i treet er forskjellige. Det må være mulig å sammenligne verdiene i treet her er det brukt Java-interfacet Comparable. Her returneres noden som inneholder elementet. Ofte returneres elementet selv. 38

Søking: Ikke-rekursiv metode public BinNode finn(comparable x, BinNode n) { BinNode t = n; while (t!= null && x.compareto(t.element)!= 0) { if (x.compareto(t.element) < 0) { t = t.venstre; } else { t = t.hoyre; } } return t; } 39

Innsetting Ideen er enkel: Gå nedover i treet på samme måte som ved søking. Hvis elementet finnes i treet allerede gjøres ingenting. Hvis du kommer til en null-peker uten å ha funnet elementet: sett inn en ny node (med elementet) på dette stedet. 2 1 4 3 6 8 40

Sletting Sletting er vanskeligere. Etter å ha funnet noden som skal fjernes er det flere mulige situasjoner: Noden er en løvnode: Kan fjernes direkte. Noden har bare ett barn: Foreldrenoden kan enkelt hoppe over den som skal fjernes. 2 1 4 3 6 8 41

Sletting (forts) Noden har to barn: Erstatt verdien i noden med den minste verdien i høyre subtre. Slett noden som denne minste verdien var i. 2 6 8 1 5 3 4 42

Rekursiv metode for å fjerne et tall: public BinNode fjern(comparable x, BinNode n) { if (n == null) { return null; } } if (x.compareto(n.element) < 0) { n.venstre = fjern(x, n.venstre); } else if (x.compareto(n.element) > 0) { n.hoyre = fjern(x, n.hoyre); } else { if (n.venstre == null) { n = n.hoyre; } else if (n.hoyre == null { n = n.venstre; } else { n.element = finnminste(n.hoyre); n.hoyre = fjern(n.element, n.hoyre); } } return n; 43

Gjennomsnitts-analyse Intuitivt forventer vi at alle operasjonene som utføres på et binært søketre vil ta O(log n) tid siden vi hele tiden grovt sett halverer størrelsen på treet vi jobber med. Det kan bevises at den gjennomsnittlige dybden til nodene i treet er O(log n) når alle innsettingsrekkefølger er like sannsynlige (se kap. 4.3.5). 44

Neste forelesning: 27. august BALANSERTE SØKETRÆR 45