Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

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

Liknende presentasjoner


Presentasjon om: "TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy"— Utskrift av presentasjonen:

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

2 Ø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)

3 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.

4 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.

5 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.

6 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.

7 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

8 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)

9 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

10 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

11 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.

12 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.

13 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)

14 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

15 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

16 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)

17 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

18 Øvinger  På sporet av sprengstoff  Redd Ratatosk


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

Liknende presentasjoner


Annonser fra Google