Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy

Liknende presentasjoner


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

1 Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy veoy@stud.ntnu.no

2 Øvingsgrupper Grupper på 10-15 studenter møter en undass to timer i uken Vil antageligvis bli satt i gang om halvannen uke Påmelding åpner over helgen

3 Kø og stack Kø: Førstemann inn er førstemann ut Kassakø Stack: Sistemann inn er førstemann ut Stabel med ark Begge to har operasjonene pop og push Pop henter neste element Push legger på et nytt element

4 Rekursjon En funksjon som kaller seg selv Må ha et grunntilfelle for ikke å kjøre evig

5 Trær R A BC D FG H Rot Søskennoder A’s venstre barn B og C’s Foreldre-node Kanter Noder Løvnoder A’s høyre barn

6 Trær Hver node har 0 eller flere barne-noder 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

7 Oppbygging Variant 1: Noden har kjennskap til: Foreldrenoden Alle barnenodene Greit når man vet hvor mange barn en node kan ha

8 Oppbygging 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.

9 Bredde først søk (bfs) Søk i tre der man besøker noder med økende avstand fra roten Implementeres med kø: Putt rotnoden i kø Så lenge køen ikke er tom: Pop node fra køen Push alle barna på køen

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

11 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

12 Preorder, inorder og postorder traversering 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

13 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

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

15 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

16 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. 13 1841 307 50 13 18 41 30 7 50 A B C A B C (Røde kanter er endret)

17 B-trær Et balansert 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 10 15 7 912 20 25

18 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

19 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 testsett 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)

20 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

21 Øvinger Teoriøving På sporet av sprengstoff Redd Ratatosk


Laste ned ppt "Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy"

Liknende presentasjoner


Annonser fra Google