Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo



Relaterede dokumenter
Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Algoritmer på træer og trægennemløb.

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Prioritetskøer og hobe. Philip Bille

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Hashing. Hashing. Ordbøger. Ordbøger. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Ordbøger Hægtet hashing Hashfunktioner Lineær probering

Datastrukturer (recap)

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Datastrukturer (recap)

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Algoritmisk geometri

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Datastrukturer (recap) Datastruktur = data + operationer herpå

Danmarks Tekniske Universitet

Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er

Danmarks Tekniske Universitet

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n n (log n) 2. n 2 + log n 3 n. n n (log n)

Skriftlig eksamen i Datalogi

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Mindste udspændende træ

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 3/2. n logn (3/2) n. 2 3logn (3/2) n

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 5n 4. logn. n 4n 5 n/logn. n n/logn 5n

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Hashing. Hashing. Ordbøger. Ordbøger. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Ordbøger Hægtet hashing Hashfunktioner Lineær probering

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Introduktion til datastrukturer

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

DM507 Algoritmer og datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 7 n 1/2 2 n /n 3 2logn n 2 /logn

Dynamisk programmering

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

DM507 Algoritmer og datastrukturer

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

DM02 Kogt ned. Kokken. Januar 2006

DM507 Algoritmer og datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

Om binære søgetræer i Java

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Introduktion til datastrukturer. Philip Bille

Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Søgning og Sortering. Philip Bille

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer.

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

Dynamisk programmering

Vejledende løsninger

Divide-and-Conquer algoritmer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 7 n 1/ log n. (log n) 4

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Transkript:

Philip Bille er. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle x.key og satellitdata x.data. operationer. PREDECESSOR(k): returner element x med største nøgle k. SUCCESSOR(k): returner element x med mindste nøgle k. INSERT(x): tilføj x til S (vi antager x ikke findes i forvejen) DELETE(x): fjern x fra S. Anvendelser. Søgning efter relateret data (typisk mange dimensioner). Rutning på internettet. 5 6 0 2 24 PREDECESSOR() k = SUCCESSOR()

Udfordring. Hvordan kan vi løse problemet med nuværende teknikker? Løsning med hægtet liste. Gem S i en dobbelt-hægtet liste. head 66 54 96 6 4 PREDECESSOR(k): lineær søgning i listen efter element med største nøgle k. SUCCESSOR(k): lineær søgning i listen efter element med mindste nøgle k. INSERT(x): indsæt x i starten af liste. DELETE(x): fjern x fra liste. Tid. PREDECESSOR og SUCCESSOR i O(n) tid. INSERT og DELETE i O() tid. Plads. O(n). Løsning med sorteret tabel. Gem S i tabel sorteret efter nøgle. 2 4 5 6 7 6 4 54 66 96 PREDECESSOR(k): binær søgning i listen efter element med største nøgle k. SUCCESSOR(k): binær søgning i listen efter element med mindste nøgle k. INSERT(x): lav ny tabel af størrelse + med x tilføjet. DELETE(x): lav ny tabel af størrelse - med x fjernet. Datastruktur PREDECESSOR SUCCESSOR INSERT DELETE Plads hægtet liste O(n) O(n) O() O() O(n) sorteret tabel O(log n) O(log n) O(n) O(n) O(n) Udfordring. Kan vi gøre det betydeligt bedre? Tid. PREDECESSOR og SUCCESSOR i O(log n) tid. INSERT og DELETE i O(n) tid. Plads. O(n).

Binært træ. Rodfæstet træ, hvor hver intern knude har et venstre barn og/eller et højre barn. Binært træ (rekursiv def). Et binært træ er enten Tomt. En knude med to binære træer som børn (venstre deltræ og højre deltræ). Binært søgetræ (binary-search-tree). Binært træ der overholder søgetræsinvarianten. Søgetræsinvariant (binary-search-tree property). Alle knuder indeholder et element. For alle knuder v: alle nøgler i venstre deltræ er v.key. alle nøgler i højre deltræ er v.key. v v.key v.key Repræsentation. Hver knude x består af root x.key x.left null x.right x.parent (x.data) Plads. O(n) null null null null null null null null null

Indsættelse INSERT(x): start i rod. Ved knude v: hvis x.key v.key gå til venstre. hvis x.key > v.key gå til højre. hvis null, indsæt x Indsættelse INSERT(x): start i rod. Ved knude v: hvis x.key v.key gå til venstre. hvis x.key > v.key gå til højre. hvis null, indsæt x Opgave. Indsæt følgende nøglesekvens i binært søgetræ: 6,,,, 2, 9, 4,, 7 INSERT(9) 9 Indsættelse INSERT(x,v) if (v == null) return x if (x.key v.key) v.left = INSERT(x, v.left) if (x.key > v.key) v.right = INSERT(x, v.right) Tid. O(h) 9

Predecessor Predecessor PREDECESSOR(k): start i rod. Ved knude v: hvis k == v.key: returner v. hvis k < v.key: fortsæt søgning i venstre deltræ. hvis k > v.key: fortsæt søgning i højre deltræ. Hvis der ikke findes knude i højre deltræ med nøgle k, returner v. v PREDECESSOR(v, k) if (v == null) return null if (v.key == k) return v if (k < v.key) return PREDECESSOR(v.left, k) t = PREDECESSOR(v.right, k) if (t null) return t else return v v.key v v.key Tid. O(h) SUCCESSOR med tilsvarende algoritme i O(h) tid. v.key v.key Sletning DELETE(x): x har 0 børn: slet x. x 0 børn

Sletning DELETE(x): x har 0 børn: slet x. x har barn: split x ud. Sletning DELETE(x): x har 0 børn: slet x. x har barn: split x ud. x har 2 børn: find y = knude med mindste nøgle > x.key. Split y ud og udskift y med x. barn 2 børn x x y x y y Sletning DELETE(x): x har 0 børn: slet x. x har barn: split x ud. x har 2 børn: find y = knude med mindste nøgle > x.key. Split y ud og udskift y med x. Tid. O(h). PREDECESSOR(k): returner element x med største nøgle k. SUCCESSOR(k): returner element x med mindste nøgle k. INSERT(x): tilføj x til S (vi antager x ikke findes i forvejen) DELETE(x): fjern x fra S. Andre operationer på binære søgetræer. SEARCH(k): afgør om element med nøgle k findes i træ, og returner elementet. TREE-SEARCH(x, k): afgør om element med nøgle k findes i deltræ rodfæstet i v, og returner elementet. TREE-MIN(x): returner det mindste element i deltræ rodfæstet i x. TREE-MAX(x): returner det største element i deltræ rodfæstet i x. MAX(x): returner det største element i deltræ rodfæstet i x. TREE-SUCCESSOR(x): returner mindste element > end x.key. TREE-PREDECESSOR(x): returner mindste element > end x.key.

Kompleksitet. Linæer plads. PREDECESSOR, SUCCESSOR, INSERT og DELETE i O(h) tid. Højden h er afhængig sekvens af operationer. I værstefald er h = Ω(n). I gennemsnit er h = Θ(log n). Med balancerede søgetræer (2- træer, AVL-træer, rød-sorte træer,..) tager alle operationer O(log n) tid i værstefald. Med mere avancerede strukturer kan man klare sig endnu bedre. Datastruktur PREDECESSOR SUCCESSOR INSERT DELETE Plads hægtet liste O(n) O(n) O() O() O(n) sorteret tabel O(log n) O(log n) O(n) O(n) O(n) binært søgetræ O(h) O(h) O(h) O(h) O(n) balanceret søgetræ O(log n) O(log n) O(log n) O(log n) O(n) Algoritmer på træer Kendte algoritmer på træer. Hobe (MAX, EXTRACT-MAX, INCREASE-KEY, INSERT, ) Forén og find (INIT, UNION, FIND, ) (PREDECESSOR, SUCCESSOR, INSERT, DELETE, ) Udfordring. Hvordan kan vi designe algoritmer på (binære) træer?

Algoritmer på træer Rekursion på binære træer. Løs problem på deltræ med rod v: Løs problem rekursivt på venstre og højre deltræ. Kombiner løsninger på deltræer til løsning for træ med rod v. v Algoritmer på træer Eksempel. Beregn størrelse ( = antal af knuder) af deltræ med rod v. hvis v er tomt: størrelse er 0 hvis v er ikke-tomt: størrelse er størrelse af venstre deltræ + størrelse af højre deltræ + SIZE(v) if (v == null) return 0 else return SIZE(v.left) + SIZE(v.right) + Tid. O(størrelse af deltræ med rod v) Trægennemløb Inorder-gennemløb (inorder traversal). Besøg venstre deltræ rekursivt. Besøg knude. Besøg højre deltræ rekursivt. Udskriver knuderne i et binært søgetræ i sorteret rækkefølge. INORDER(v) if (v == null) return INORDER(v.left) print v.key INORDER(v.right) Tid. O(n) Inorder:,,,,,,, Trægennemløb Preorder-gennemløb (preorder traversal). Besøg knude. Besøg venstre deltræ rekursivt. Besøg højre deltræ rekursivt. PREORDER(v) if (v == null) return print v.key PREORDER(v.left) PREORDER(v.right) Tid. O(n) Preorder:,,,,,,,

Trægennemløb Postorder-gennemløb (postorder traversal). Besøg venstre deltræ rekursivt. Besøg højre deltræ rekursivt. Besøg knude. POSTORDER(v) if (v == null) return POSTORDER(v.left) POSTORDER(v.right) print v.key Tid. O(n) Postorder:,,,,,,,