1 / 21

Øvingsforelesning 2

Øvingsforelesning 2. Trær og søking i dem, samt litt diverse emner Kristian Veøy veoy@stud.ntnu.no. Ø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. Kø og stack. Kø:

fleta
Télécharger la présentation

Øvingsforelesning 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 Rot R B og C’s Foreldre-node Kanter Noder H A D Løvnoder B C F G A’s venstre barn A’s høyre barn Søskennoder

  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 A 13 • 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. 7 30 B C 18 41 50 B 30 A 13 41 7 18 50 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 20 25 7 9 12

  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

More Related