DM507 Algoritmer og datastrukturer



Relaterede dokumenter
DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Datastrukturer (recap)

Datastrukturer (recap)

Datastrukturer (recap) Datastruktur = data + operationer herpå

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Danmarks Tekniske Universitet

Sortering. Eksempel: De n tal i sorteret orden

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Sortering af information er en fundamental og central opgave.

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Prioritetskøer og hobe. Philip Bille

Om binære søgetræer i Java

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

Skriftlig eksamen i Datalogi

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

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

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

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

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

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

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

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

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

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

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

Algoritmisk geometri

Vejledende løsninger

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

Skriftlig eksamen i Datalogi

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

Skriftlig eksamen i Datalogi

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

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

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Danmarks Tekniske Universitet

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

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Sammenhængskomponenter i grafer

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

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

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

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

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Skriftlig Eksamen Diskret Matematik (DM528)

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Eksamensopgaver i LaTeX-delen af IT-1B

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

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

Grafer og graf-gennemløb

Grafer og graf-gennemløb

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

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Brugermanual til Assignment hand in

Sortering i lineær tid

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

Transkript:

DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således at afleveringerne, og dermed arbejdet, strækkes over hele semesteret. Deadline for del II er onsdag den 25. april. Projektet skal som udgangspunkt besvares i grupper af størr to. Individuelle besvarr er tilladt, men tilskyndes ikke. Mål Målet for del II af projektet er at implementere rød-sorte træer, samt bevise en øvre grænse for mængden af rebalancering. Med hensyn til updates skal der kun ses på indsættr, ikke sletninger. Rød-sorte træer Rød-sorte træer er grundigt beskrevet i Cormen et al., kapitel 13. Bemærk at pseudo-koden i dette kapitel er baseret på en implementation med en sentinel-knude T.nil til at repræsentere træets NIL-pointere (bladene samt rodens forælder), som illustreret i Figur 13.1 (b) på side 310. Denne knude er altid sort. Vi antager også denne implementation her. Opgaver Opgave 1 Der skal laves en Java-implementation, baseret på bogens pseudo-kode, af rød-sorte træer, som indeholder metoderne Search (pseudo-kode side 290 eller 291, skal justeres til at bruge T.nil i stedet for NIL), Insert (pseudokode side 315 (og siderne 316 og 313)), samt InorderTraversal (pseudo- 1

kode side 288, skal justeres til at bruge T.nil i stedet for NIL)). Der skal ikke implementeres Delete eller yderligere metoder. Det antages at nøgler er af typen int (så man ikke behøver bruge f.eks. generics i Java), og at elementer blot består af nøgler (der er ikke yderligere data tilknyttet en nøgle). Dette vil være tilstrækkeligt for den senere anvend i del III. Implementationen skal være i form af en Java-klasse, som kan bruges af andre programmer. Klassen skal hedde RBT, og skal implementere flg. interface: public interface RBTree { public boolean search(int k); public void insert(int k); public int[] inordertraversal(); public boolean isredblack(); } Metoden search(k) returnerer blot en boolean som angiver om nøglen k er i træet. Metoden insert(k) indsætter nøglen k i træet. Metoden inordertraversal() returnerer en kopi af træets elementer i et array (i sorteret orden) fremfor at printe dem på skærmen som i bogens pseudokode. Metoden isredblack() checker om et givet RBTree overholder (de vigtigste af) kravene 1 5 på side 308. Denne metode er bla. anvendelig til fejlfinding under implementationsprocessen. Metoden skal baseres på algoritmen beskrevet i pseudo-kode i appendikset nedenfor. Man skal ikke bevise noget om korrekthed eller køretid for denne algoritme. Opgave 2 En indsætt består af en søgning og indsætt af ny knude (linie 1 16 i pseudo-kode side 315), samt en efterfølgende rebalancering af træet (pseudokoden side 316). Vi ønsker i denne opgave at bevise, at hvis man starter med et tomt rød-sort træ og laver n indsættr, da er den samlede mængde rebalanceringsarbejde (dvs. arbejde lavet af pseudo-koden side 316 (og 313)) i alt O(n). Denne viden vil vise sig brugbar i del III af projektet. Bemærk at ovenstående øvre grænse er stærkere end den simple vurdering at n indsættr hver højst kan lave rebalanceringsarbejde svarende til stien mod roden, hvilket blot giver en øvre grænse på O(n log n). For et rød-sort træ T lader vi ψ(t ) være antallet af knuder i træet som er sorte og har to røde børn. For eksempel er ψ(t ) = 1 for træet i Figur 13.1 i Cormen et al. (side 310). Vi skal se på hvordan ψ(t ) udvikler sig, når T ændrer form under indsættr og efterfølgende rebalanceringer. 2

Som det fremgår af diskussionen i afsnit 13.3 af Cormen et al. vil whileløkken i pseudo-koden side 316 løbe nul eller flere gange gennem Case 1, og derefter højst een gang gennem Case 2 og højst een gang gennem Case 3, hvorefter den stopper. Bemærk følgende observationer: Selve indsættn (at erstatte et tomt undertræ med en ny knude, uden rebalancering) kan højst øge ψ(t ) med een. Under rebalancering vil Case 2 ikke ændre ψ(t ) (følger af Figur 13.6 og den tilhørende figurtekst). Under rebalancering kan Case 3 højst øge ψ(t ) med een (følger af Figur 13.6 og den tilhørende figurtekst). Opgaven består af nedenstående delopgaver i) til v). i) Argumentér for at hvis en rebalancering starter med k gange Case 1, da vil disse sænke ψ(t ) med mindst k 1 (brug Figur 13.5 og den tilhørende figurtekst). Vi ser nu på situationen hvor man starter med et rød-sort træ T start og laver n indsættr, resulterende i et træ T slut, og ønsker at vurderere den samlede mængde rebalanceringsarbejde. Lad k i betegne det antal gange Case 1 udføres ved rebalancering efter den i te indsætt. ii) Argumentér for at der højst n gange i alt udføres Case 3. iii) Argumentér for at ψ(t slut ) ψ(t start ) + 2n n (k i 1) i=1 ved at bruge ovenstående observationer og udsagn. Vi ser nu på situationen hvor de n indsættr starter med et tomt træ. Så gælder naturligvis ψ(t start ) = 0. For alle træer T er 0 ψ(t ), så vi har 0 ψ(t slut ). Heraf følger fra sidste ulighed ovenfor at n 0 2n (k i 1). i=1 iv) Argumentér for at det heraf følger at n i=1 k i 3n. v) Argumentér for at den samlede mængde rebalanceringsarbejde under de n indsættr er O(n), hvis man starter med et tomt træ. 3

Formalia Lav en rapport, som indeholder dine svar på opgave 1 og 2 ovenfor. Koden for opgave 1 skal være passende kommenteret, skal inkluderes i rapporten som bilag, og eventuelle ikke-trivielle aspekter af implementeringen skal diskuteres i rapportens hoveddel. Der skal afleveres rapporten i pdfformat, samt Java-implementationen som separate filer (dvs. udover deres inklusion på tryk i rapporten). Husk at skrive navnene på personerne i gruppen på forsiden af rapporten. Materialet afleveres i Blackboard med værktøjet SDU Assignment (ikke at forveksle med Assignment hand in, som er et andet afleveringsværktøj i Blackboard). Det kan findes under Tools i menuen i kursussiden i Blackboard. Menuen findes ved at klikke på det lille dobbelt-firkant -ikon i øverste halvdel af venstre kant af kursussiden i Blackboard (om nødvendigt maksimer det fremkomne vindue). Aflever materialet senest: Onsdag den 25. april, 2012, kl. 23:59. 4

Appendiks Algoritmen IsRedBlack(T ) nedenfor returnerer true hvis og kun hvis T opfylder kravene 2, 4, og 5 på side 308 i Cormen et al. (det antages at krav 1 er opfyldt, dvs. at der kun bruges farverne sort og rød, og krav 3 bliver automatisk opfyldt via brugen af en sentinel-knude med farven sort). Man skal ikke bevise noget om korrekthed eller køretid for denne algoritme. IsRedBlack(T ) return {T.root.color == black and BlackHeight(T, T.root) 0 and (not TwoRedsInRow(T, T.root))} BlackHeight(T, v) if v == T.nil return 0 h 1 = BlackHeight(T, v.left) h 2 = BlackHeight(T, v.right) if h 1 h 2 or h 1 == 1 return 1 if v.color == black return h 1 + 1 return h 1 TwoRedsInRow(T, v) if v == T.nil return false if {v.color == red and (v.left.color == red or v.right.color == red)} return true return TwoRedsInRow(T, v.left) or TwoRedsInRow(T, v.right) 5