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

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

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.

Binære trær: Noen algoritmer og anvendelser

Øvingsforelesning 2 - TDT4120. Grafer og hashing. Benjamin Bjørnseth

Definisjon av binært søketre

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

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

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

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing

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

Object [] element. array. int [] tall

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

INF2220: Forelesning 2

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

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

INF2220: Forelesning 2

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Grunnleggende Datastrukturer

Definisjon: Et sortert tre

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

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

Et eksempel: Åtterspillet

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

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

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

Lars Vidar Magnusson

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

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

Kap 9 Tre Sist oppdatert 15.03

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

INF2220: Forelesning 1

Grunnleggende Grafteori

Algdat - øvingsforelesning

Algoritmer og Datastrukturer

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

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

Vi skal se på grafalgoritmer for:

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

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

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

Et eksempel: Åtterspillet

INF2220: Forelesning 1

IN Algoritmer og datastrukturer

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

PG4200 Algoritmer og datastrukturer Forelesning 7

INF Algoritmer og datastrukturer

LO118D Forelesning 12 (DM)

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

En litt annen måte å forklare traversering på. Traversering

IN2010: Algoritmer og Datastrukturer Series 2

Oppgave 1. Sekvenser (20%)

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

Pensum: fra boken (H-03)+ forelesninger

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

Pensum: fra boken (H-03)+ forelesninger

Algoritmer og Datastrukturer IAI 21899

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Litt om grafer og traversering, og om hashing. Jeg gikk en tur i. Tredje forelesning

KORTESTE STI. Vektede Grafer. Korteste Sti. Dijkstra s Algoritme. Vektet Urettet Graf

Binær heap. En heap er et komplett binært tre:

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

EKSAMEN med løsningsforslag

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

GRAF-TRAVERSERING. Hvordan utforske en labyrint uten å gå seg vill. Rekkefølge på kanter: Dybde-Først Søk A B C D E F G H I J K L M N O P

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

Anvendelser av grafer

INF Algoritmer og datastrukturer

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver - LF. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

O, what a tangled. Fjerde forelesning. Robot-eksemplet som ikke ble gjennomgått sist blir frivillig selvstudium (ut fra foilene :-)

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Vi skal se på grafalgoritmer for:

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

INF Algoritmer og datastrukturer

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

Dagens tema INF1010 INF1010 INF1010 INF1010

INF2820 Datalingvistikk V2016. Jan Tore Lønning

Transkript:

1 Enkle datastrukturer, trær, traversering og rekursjon Magnus Moan (Undertegnede) algdat@idi.ntnu.no Enkle datastrukturer, trær, traversering og rekursjon

2 Dagens plan Praktisk Enkle datastrukturer Stack Kø (queue) Trær og binære søketrær Traversering Dybde-først-søk Bredde-først-søk Tips til øving 2: Ratatosk LF til øving 1: Sprengstoff

3 Stack Implementerer Last-In-First-Out (LIFO) To hovedoperasjoner: push(x), legger elementet x på toppen av stacken pop(), tar ut øverste element Kan også lese øverste element ute å fjerne det

4 Stack i Python Kan bruke list til å implementere stack list.append(x) implementerer push(x) list.pop() implementerer pop list[-1] leser toppen

5 Kø (queue) Implementerer First-In-First-Out (FIFO) Tenk på som en vanlig kø To hovedoperasjoner: enqueue(x) - legge et element bakerst i køen dequeue() - ta ut det første elementet i køen

6 Kø i Python Kan bruke list til å implementere stack list.append(x) implementerer enqueue(x) list.pop(0) implementerer dequeue() Denne implementasjonen er treg da den må flytte samtlige element i listen

7 Kø i Python Bruk heller collections.deque Gir støtte for rask innsetting og fjerning i begge ender Deque.append(x) implementerer enqueue(x) Deque.popleft() implementerer dequeue()

8 Traversering av binære trær Postorder traversering Traverser først over alle barna Så gjør noe med noden Preorder traversering Gjør noe med noden Traverser over alle barna Inorder traversering (kun for binære trær) Gjør noe med venstre barn Gjør noe med denne noden Gjør noe med høyre barn

9 Trær I Algdat: «Connected, asyclic graph» Består av noder Noder består av: Data, kan være hva som helst Pekere til barn Eventuelt pekere til søsken Noder uten barn: Løvnoder Node uten foreldre: Rot Binære trær: Maks to barn per node

10 Rekursjon En metode som kaller seg selv OBS: Ikke ha for mange rekursive kall

11 Binære søketrær Data sammenliknbart, f.eks. integers All data i venstre subtre mindre enn roten All data i høyre subtre større enn roten Søk, sletting og innsetting svært effektivt når høyden er logaritmisk

12 Søk i binære søketrær Vil finne element x i søketreet For hver node: Sammenlign node.data med x Hvis x = node.data Ferdig, finnes! Hvis x < node.data Hvis node.left = None Ferdig, finnes ikke! Ellers Let i node.left Tilsvarende hvis x > node.data

13 Innsetting og sletting i søketrær Innsetting: Søk etter elementet i treet Hvis det ikke finnes Sett det inn der det burde finnes Hvis det finnes Ferdig, med mindre du ønsker duplikater Sletting: Mer omfattende Sletting av løvnoder er enkelt Sletting av interne noder er mer komplisert Implementasjon av dette taes senere

14 Traversering av generelle trær I algdat: Bredde-først-søk og dypde-først-søk Dybde i et tre: Antall kanter fra rot til aktuell node

15 BFS Benytter datastrukturen queue Sjekker alle «søsken» før den går videre Brukes til å finne korteste vei når alle kanter har lik vekt Brukes blant annet for å løse maks flyt problemer

16 BFS 1 procedure BFS(G, v): 2 create a queue Q 3 enqueue v onto Q 4 mark v 5 while Q is not empty: 6 t Q.dequeue() 7 if t is what we are looking for: 8 return t 9 for all edges e in G.adjacentEdges(t) do 10 u G.adjacentVertex(t,e) 11 if u is not marked: 12 mark u 13 enqueue u onto Q 14 return none

17 DFS Benytter datastrukturen stack Sjekker alle barn rekursivt før den går videre Relativt kjappere enn BFS om du vet noden ligger dypt i treet

18 DFS 1 procedure DFS(G,v): 2 mark v as discovered 3 if v is what we are looking for: 4 return v 5 for all edges e in G.adjacentEdges(v) do 6 w G.adjacentVertex(v,e) 7 if vertex w is not discovered then 8 recursively call DFS(G,w) 9 label v as explored

19 Kanttyper Tree edge Peker på et barn Forward edge Peker på en ferdigprosessert etterkommer som ikke er et barn Back edge Peker på en ikke ferdigprosessert forfader Cross edge Peker på et annet subtre Om det ikke er noen av de andre er det sannsynligvis en cross

20 MERK: DFS og BFS er generelle algoritmer og skal kunne brukes på alle grafer. For denne øvingen er det derimot tilstrekkelig å implementere en forenklet utgave

21 Ukas praksis: Redd Ratatosk! Skal implementere BFS og DFS for søk i tre Returner dybden Ratatosk befinner seg på

22 Ukas rammeverk class Node: barn = None ratatosk = None nestebarn = None # bare til bruk i DFS def init (self): self.barn = [] self.ratatosk = False self.nestebarn = 0

23 Ukas rammeverk def dfs(rot): # SKRIV DIN KODE HER def bfs(rot): # SKRIV DIN KODE HER

24 Ukas rammeverk funksjon = stdin.readline().strip() antall_noder = int(stdin.readline()) noder = [] for i in range(antall_noder): noder.append(node()) start_node = noder[int(stdin.readline())] ratatosk_node = noder[int(stdin.readline())] ratatosk_node.ratatosk = True for linje in stdin: tall = linje.split() temp_node = noder[int(tall.pop(0))] for barn_nr in tall: temp_node.barn.append(noder[int(barn_nr)])

25 Ukas rammeverk if funksjon == 'dfs': print dfs(start_node) elif funksjon == 'bfs': print bfs(start_node) elif funksjon == 'velg': print 'Velg'

26 Ukas input Linje 1: Angir hvilken metode som blir kalt, 'BFS', 'DFS' eller 'Velg' Linje 2: Angir antall noder i treet Linje 3: Angir hvilken node som er roten Linje 4: Angir hvilken node Ratatosk befinner seg i Resten: Nodene og deres barn/etterkommere

27 Spørsmål?

28 Forrige ukes øving: Sprengstoff def spor(kubbe): # START IKKE-UTDELT KODE maks = -1 while kubbe!= None: if kubbe.vekt > maks: maks = kubbe.vekt kubbe = kubbe.neste return maks # SLUTT IKKE-UTDELT KODE