TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy

Slides:



Advertisements
Liknende presentasjoner
Demens - Test.
Advertisements

De dårige følelsene. Veiene ut..
Hva er PRIMTALL?.
eDialog24 Operator Nyheter og endringer i versjon Sentinel eDialog24 AS Ingvald Ystgaards vei 3A 7047 Trondheim Telefon: Faks:
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
En innføring i spillet: Dobbeltkrig – Grønn
Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad Redigert og forelest av Gleb Sizov.
AP - Arbeidsplan Vi jobber med arbeidsplanen nesten hver dag.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
Vi har lært å bestemme: - Nullpunkter (y=0)
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Teoriøving 4 (1) Strongly connected component: ”det maksimale settet med noder slik at for alle nodepar (u,v) i settet finnes kantene u -> v og v -> u.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og
Eksempel AOA (Activity On Arc)
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Øvingsforelesning 3 Grafer, BFS, DFS og hashing
Kompleksitetsanalyse
Korrekt dybde først-søk
Åsmund Eldhuset asmunde stud.ntnu.no folk.ntnu.no/asmunde/algdat/
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø
Øvingsforelesning Magnus Haug
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Klargjøring fra forrige gang
Algoritmer og Datastrukturer
Kap 07 Stakk I dette kapitlet skal vi se på datastrukturen stakk.
NEWS Et uvurdelig hjelpemiddel i hverdagen. Hva skal vi gjennom i dag Hva er news? Hva brukes news til? Programmer og grupper Noen ord og uttrykk Noen.
Skåring av SSIS-skjemaene Frode Svartdal UiT / Diakonhjemmet høgskole.
Dynamisk programmering
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
Lage og sende SMS 1a Lage SMS
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 8 Trær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 11 Når RAM ikke strekker til - B-trær og Utvidbar hashing Hans Fr. Nordhaug (Ola Bø)
Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Andre prioritetskøer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 18 - kap 9 Aktivitetsgrafer
INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Onsdag 13. mars Sam Eyde vgs
Hvordan kan foreldre bruke de vangligste funksjonene i Itslearning.com
NÅ SKAL VI LÆRE OM LIKNINGER.
INF 4130 Eksamen 2008 Gjennomgang.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Magnus Haug Algoritmer og Datastrukturer
1 INF5110 – 23. april, 2013 Svar på noen oppgaver til kap. 8 Beklager noe trykkfeil og rot på forelesningene Håper dette er bedre (lagt ut 24/4) Nå fredag.
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet
Sorterings- Algoritmer Algoritmer og Datastrukturer.
Sterke og 2-sammenhengende komponeneter, DFS
1 INF oktober 2010 Stein Krogdahl Foreløpige foiler Dagens program: –Første time: Kap 23.5: Trær og strategier for spill med to spillere –Andre.
Semantic Overlay Networks for P2P Systems Øyvind Reinsberg.
Finne feil - Debugging Introduksjon til sortering.
Matematikk 1 årskurs 26. oktober 2009
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Registrering av testresultater fra mobiltelefon
1 Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen
De fire regneartene.
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy

Øvingsgrupper  For dem som føler at de trenger hjelp med faget  Grupper på studenter møter en undass to timer i uken  Vil antageligvis bli satt i gang om halvannen uke  Påmelding åpner over helgen (Magnus annonserer fremgangsmåten)

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.  Et tre med maks m barn kalles et m-tre.  Et spesialtilfelle av dette er 2-treet som kalles et binært tre.

Oppbygging Variant 1: Noden har kjennskap til:  Foreldrenoden  Alle barnenodene. Greit når man vet hvor mange barn en node kan ha. Variant 2: Noden har kjennskap til:  Foreldrenoden  Venstre barnenode.  Nærmeste søsken. Greit når man ikke vet hvor mange barn en node kan ha.

Bredde først søk (bfs)  Søk i tre der man alltid besøker noder med avstand i fra roten, før man besøker noder med avstand i + 1  Implementeres med kø:  Putt rotnoden i kø.  Så lenge køen ikke er tom:  Pop node fra køen.  Putt alle barna på køen.

Dybde først søk (dfs)  Søk i tre der man alltid besøker neste barnenode.  Om noden ikke har noen barn, returner til forelder.

Preorder, inorder og postorder traversering  Tre marginalt forskjellige utgaver av DFS  Ofte er man interessert i å gjøre en bestemt operasjon på nodene man støter på i løpet av DFS  Pre-, in- og postorder sier noe om hvilken rekkefølge nodene skal behandles i  Preoder: Behandle en node første gang du treffer den  Inorder (kun binære trær): Når du treffer en node, sender du først søket videre i venstre barnenode, så behandler du selve noden, så sender du søket videre i høyre barnenode  Postorder: Send søket videre i barnenodene først, og behandle selve noden til slutt, rett før du forlater noden

Preorder, inorder og postorder traversering  Hvordan implementerer vi dette?  Søk som startes i en bestemt node utføres ved å starte nye søk på barnenodene – dette er en såkalt rekursiv struktur, så da kan vi benytte rekursjon (du utfører en oppgave ved å utføre den samme oppgaven på en mindre mengde data)  Merk: alle traverseringsmetodene implementeres med DFS (og man vil uunngåelig oppdage nodene i prefix-rekkefølge – men man kan velge å behandle nodene i en annen rekkefølge)

Operatortrær  En måte å representere aritmetiske uttrykk på  Inorder-traversering vil skrive ut uttrykket slik vi er vant til å lese matematiske uttrykk  Postorder-traversering vil skrive ut uttrykket i reverse Polish notation (RPN)  RPN ble brukt i kalkulatorer i gamle dager  RPN trenger verken parenteser eller presedens  Evaluering av et RPN-uttrykk bruker en stack  Tall skal pushes på stacken  Operatorer popper de to øverste tallene fra stacken og pusher resultatet

Dybde først-søk med stack  Her er det lett å gå i fellen ved å prøve å ta koden for bredde først-søk og bare bytte ut køen med en stack  Det fungerer i og for seg i trær, men gir gale resultater i en graf  Vi må etterligne virkemåten til rekursjonen

Binære søketrær  Hver node kan ikke ha flere enn 2 barn.  Verdien i en node er større enn alle verdiene i venstre subtre, og mindre enn alle verdiene i høyre subtre.  Veldig lett å søke, finne minimum/maksimum, eller foregående/etterfølgende verdi.

AVL-trær  Søketær kan fort bli ubalanserte (f.eks. ved innsetting av sorterte data). Da tar søking lang tid.  En måte å ordne dette på er å bruke et AVL-tre:  I et AVL-tre vil forskjellen i høyden av venstre sub-tre og høyre sub-tre være -1, 0 eller 1  Etter innsetting/sletting kalles en metode på treet som gjør det balansert igjen.

Rotasjon  Sentralt i balansering av trær.  Venstre-rotering:  La node A bli B sitt venstre barn.  La node C bli A sitt høyre barn.  Høyre-rotering:  Symmetrisk av venstre-rotering.  Reglene for når rotasjoner skal gjøres er ikke pensum A B C A B C (Røde kanter er endret)

B-trær  Et søketre, men hver node har flere verdier og barn.  Holder seg balansert ved innsetting og sletting.  Når man legger til en verdi i en node som ikke har plass, splittes den, og forandringen dyttes oppover i treet

Noen tips til debugging  Hva gjør man hvis programmet krasjer, henger eller skriver ut feil svar?  Programmer som henger kan avbrytes med Ctrl-C, så får man en stacktrace  Kilden til feilen er som regel ikke der det krasjer/henger  Hvis krasjen skyldes at en bestemt variabel har gal verdi: prøv å spore bakover og se hvor den verdien kommer fra

Noen tips til debugging  Test hver metode for seg  Sjekk at metoden får riktige parametre (kan ikke forvente at en metode gir riktig svar hvis den jobber på gale data)  Lag egne datasett og test med dem  Gå gjennom programmet på papir  Sjekk at du faktisk har implementert algoritmen riktig  Kan bruke fancy IDE'er med tilhørende debuggere, men en velplassert print er ofte like bra (dessuten går det raskere)

Highscorelista  Minner om at det ikke er nødvendig å gjøre det som praksisøvingen foreslår at skal gjøres  Skal du høyt opp på lista, må du ofte droppe rammeverket og bruke en annen algoritme  Hvis du har sittet og knalloptimalisert python- koden din og fremdeles ikke klarer å klatre på listene, er det et tegn på at du trenger en bedre algoritme

Øvinger  På sporet av sprengstoff  Redd Ratatosk