Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)

Liknende presentasjoner


Presentasjon om: "INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)"— Utskrift av presentasjonen:

1 INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)

2 Hva har vi gjennomgått Rekursjonsalgoritmer Kombinatorisk søking - permutasjoner Algoritmeanalyse Abstrakte datatyper Liste Stack Kø Tre Binært søketre B-tre AVL-tre Splaying Hash Hash med kollisjonshåndteringsstrategier  Åpen adressering og separat liste Utvidbar hash

3 Rekursjonsalgoritmer Metode som kaller seg selv Kan ende i evig loop Eller i stack-overflow Kan løses iterativt blir da ofte raskere men dessverre komplisert i de fleste tilfellene - unntak: tail-recursion

4 Regler for rekursjonsalgoritmer Regler 1. Basistilfelle som kan løses uten rekursjon må finnes 2. Gjør framgang mot basistilfellet 3. Anta at alle rekursive kall virker 4. Rentesrente regelen - Dupliser aldri arbeid ved å gjenta samme løsning i separate rekursive kall. Lagre i så fall de ferdige resultatene i en tabell og sjekk om løsning allerede finnes der! (Dynamisk programmering) 5. All rekursjon kan erstattes med iterasjon, men det er ikke nødvendigvis enkelt. 6. Bruk heller iterasjon hvis det er enkelt

5 Kombinatorisk søking - permutasjoner Teste alle mulige rekkefølger av N elementer O(N!) eksponentiell vekst!! N må være liten eller Vi må lage gode avskjæringer

6 Algoritmeanalyse Si noe om hvor fort en algoritme går Kjøretidskalkulasjoner O-notasjon Typiske vekstrater

7

8 FunksjonNavn cKonstant log NLogaritmisk log 2 NLog-kvadratisk NLineær N log N N2N2 Kvadratisk N3N3 Kubisk 2 N, N!Eksponensiell

9 Abstrakte datatyper Definerer ett sett standard operasjoner I Java defineres ved hjelp av interface Kan lagre hva som helst: Object Comparable hvis rekkefølgen har betydning Den abstrakte datatypen må implementeres for å brukes i praksis Forskjellige implementeringer gir forskjellige egenskaper Kjøretid for operasjonene

10 ADT - Liste

11 Listeimplementeringer Array-liste Rask på hent(int posisjon) Rask på finn(Comparable O) hvis sortert Lenket liste med noder og pekere Enkeltlenket Enkeltlenket med hodenode Dobbeltlenket Sirkulært lenket

12 Stack Operasjoner void push(Object o), Object pop() Eventuelt Object top() Kalles også LIFO Spesialtilfelle av liste Implementeringer Array Lenket liste

13 Kø Operasjoner void enqueue(Object o) Object dequeue() Kalles også FIFO Spesialtilfelle av liste Implementeringer Array (sirkulær array med to pekere) Lenket liste

14 Trær Et tre er en samling noder, som kan være tom eller bestå av en rotnode r og null eller flere subtrær. Hvert subtre har en rotnode som er knyttet rotnoden r med en rettet kant fra r r er forelder til hver av undertrærne og rotnoden i hvert undertre er et barn av r Hvis treet har N noder har det N-1 kanter Noder som ikke har barn kalles bladnoder (leaf nodes) Noder med samme forelder er søsken (siblings) Nodene tegnes normalt som sirkler

15

16 Implementering av trær class TreeNode{ Object element; TreeNode firstChild; TreeNode nextSibling; }

17 I et binærtre har ingen node mer enn to barn Høyden er vanligvis mye mindre enn N I gjennomsnitt er dybden For binært søketre er gjennomsnittsdybden for nodene I verste tilfelle kan dybden bli N-1 Implementeres med en venstre og høyre peker i hver node Binærtrær

18 Traversering av binærtrær Fire muligheter Preorder - foreldrenoden behandles før barna Inorder - foreldrenoden behandles etter venstre, men før høyre barn Postorder - foreldrenoden behandles etter barna Nivå for nivå Legg rota i kø Hente og behandle neste fra kø og legg barna i køen til køen er tom

19 Søketre - ADT Binære søketrær Binærtrær kan brukes til å implementere effektiv søking I binære søketrær gjelder denne egenskapen for enhver node med verdi x i treet: Alle noder i venstre undertre av noden har lavere verdi og alle noder i høyre undertre har høyere verdi Forutsetter at elementene som lagres i treet kan ordnes på en eller annen måte

20 Operasjoner på binære søketrær Lages gjerne rekursivt Ettersom dybden på treet er O(log N) trenger vi ikke å bekymre oss for at stakken flyter over ??? For å sikre at treet kan ordnes implementerer vi Comparable og følgelig int compareTo() find findMin, findMax insert remove printTree

21 Tilfeldig generert binært søketre

22 Balanserte binære søketrær AVL-trær – balansebetingelse på høyde for venstre og høyre undertre. Enkel og dobbelrotasjon. Splaying – selvbalanserende. Zig-zig og zig- zag bestemmer rotasjoner for splayingen. Siste aksesserte node splayes til toppen.

23 B-tre Brukes når vi ikke har plass i RAM M-veis tre Data lagres bare i bladnoder Diskblokka er alle noders mål Antall greiner i indre noder og antall poster i bladnodene tilpasses diskblokkas størrelse De øverste to nivåene i treet caches gjerne i RAM

24 5. ordens B-tre

25 Hash Rask datastruktur for innsetting og gjenfinning Data plasseres i tabell på grunnlag av en nøkkel Nøkkelen gjøres om til index i tabellen ved hjelp av en hash-funksjon Hash-funksjonen må Gi god spredning Gi god dekning Når to elementer hashes til samme index har vi en kollisjon som må håndteres Åpen adressering - clustering Separat lenket liste - liste traversering - kompleksitet

26 Hash Hash-funksjonen bygger ofte på rest ved divisjon av nøkkel med TableSize. Erfaringsmessig best spredning hvis TableSize er primtall Lastfaktorens betydning Åpen adressering mer følsom enn separat lenket liste Rehashing ved for høy lastfaktor

27 Utvidbar Hash Directory i RAM – en array av pekere til diskblokker Directory indekseres med de D første bitene av nøkkelverdien Nøklene til alle poster i en diskblokk må være like på de d første bitene, d <=D

28 Sett inn Directory i RAM Bøtter på disk Antall felles biter i bøtta 6-bits data 01- bøtta 00- bøtta 10- bøtta


Laste ned ppt "INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)"

Liknende presentasjoner


Annonser fra Google