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

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

Forén og find. Forén og find. Forén og find. Anvendelser

Forén og find. Forén og find. Forén og find. Forén og find

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

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

Mindste udspændende træ

Mindste udspændende træ

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

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

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

Prioritetskøer og hobe. Philip Bille

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

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 Trægennemløb. Philip Bille

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Sammenhængskomponenter i grafer

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Minimum udspændende Træer (MST)

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Introduktion til datastrukturer. Philip Bille

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

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

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

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

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

Datastrukturer (recap)

Algoritmisk geometri

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

Danmarks Tekniske Universitet

UNION-FIND. UNION-FIND-problemet. Forbundethed kan være svær at afgøre (især for en computer) Eksempel på udførelse

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

Introduktion til datastrukturer

Datastrukturer (recap)

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

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

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Datastrukturer (recap) Datastruktur = data + operationer herpå

DM02 Kogt ned. Kokken. Januar 2006

Et udtrykstrç med de ære regnearter, heltalskonstanter og variabler beskrives. Type Expr = Sumèplus, minus, times, div: Args, const: Int, name: Textè

DATALOGISK INSTITUT, AARHUS UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET

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

Danmarks Tekniske Universitet

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.

Vægtede grafer. I en vægtet graf har enhver kant tilknyttet en numerisk værdi, kaldet kantens vægt

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

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.

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

Korteste veje. Korteste veje. Introduktion. Introduktion. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs

Korteste veje. Korteste veje. Introduktion. Introduktion. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs

.. if L(u) + w(u, v) < L(v) then.. begin... L(v) := L(u) + w(u, v)... F (v) := u.. end. med længde L(z)}

DM507 Algoritmer og datastrukturer

Korteste veje. Korteste veje. Introduktion. Introduktion. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs

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

Minimum udspændende Træer (MST)

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

Evolutionstræer (Phylogenetic trees)

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Minimum udspændende Træer (MST)

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

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

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET

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

Netværksalgoritmer 1

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

Transkript:

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

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

Forén og find Forén og find (union-find). Vedligehold en dynamisk familie af mængder under operationer: INIT(n): opret mængder {1}, {2},, {n} UNION(i,j): forener de to mængder der indeholder i og j. Hvis i og j er i samme mængde skal der ingenting ske. FIND(i): returnerer en repræsentant for mængden der indeholder i. INIT(9) {1} {2} {3} {4} {5} {6} {7} {8} {9} UNION(6,1) {2, 1, 7} {9, 4, 3, 8} {5, 6} {2, 1, 7, 5, 6} {9, 4, 3, 8} Repræsentant kan være et hvilket som helst element i mængden. FIND(i) == FIND(j) hvis og kun hvis i og j er i samme mængde.

Anvendelser Dynamiske sammenhængskomponenter. Mindste udspændende træ. Unificering i logik og oversættere (afgør om udtryk er ens). Nærmeste fælles forfader i træer. Hoshen-Kopelman Algoritme i fysik Spil (Hex og Go) Illustration af snedige teknikker til design af datastrukturer.

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

Hurtig find Hurtig find. Vedligehold en tabel id[1..n] så id[i] er repræsentant for i. INIT(n): sæt alle elementer til at være deres egen repræsentant UNION(i,j): opdater repræsentant for alle elementer i den ene mængde. FIND(i): returner repræsentant. INIT(9) {1} {2} {3} {4} {5} {6} {7} {8} {9} id[] 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 id[] UNION(6,1) {2, 1, 7} {9, 4, 3, 8} {5, 6} {2, 1, 7, 5, 6} {9, 4, 3, 8} 1 2 3 4 5 6 7 8 9 2 2 4 4 6 6 2 4 4 1 2 3 4 5 6 7 8 9 2 2 4 4 2 2 2 4 4

Hurtig find INIT(n): for k = 1 to n id[k] = k FIND(i): return r[i] UNION(i,j): iid = FIND(i) jid = FIND(j) if (iid jid) for k = 1 to n if (id[k] == iid) id[k] = jid id[] UNION(6,1) {2, 1, 7} {9, 4, 3, 8} {5, 6} {2, 1, 7, 5, 6} {9, 4, 3, 8} 1 2 3 4 5 6 7 8 9 2 2 4 4 6 6 2 4 4 1 2 3 4 5 6 7 8 9 2 2 4 4 2 2 2 4 4

Hurtig find Theorem. Vi kan løse forén og find med n elementer i O(n) tid for INIT O(1) tid for FIND O(n) tid for UNION

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

Hurtig forening Hurtig forening. Vedligehold hver mængde som et rodfæstet træ repræsenteret ved tabel p[1..n] af forældrepegere. Roden af træ er repræsentant for mængde og p[rod] = rod. INIT(n): lav n træer med et element hver. UNION(i,j): hvis FIND(i) FIND(j), gør rod af det ene træ til barn af roden af det andet træ. FIND(i): følg sti til rod og returner den. 1 5 8 UNION(6,1) 1 8 2 7 6 3 9 5 2 7 3 9 4 6 4 p[] 1 2 3 4 5 6 7 8 9 1 1 8 3 5 5 1 8 8 1 2 3 4 5 6 7 8 9 1 1 8 3 1 5 1 8 8

Hurtig forening INIT(n): lav n træer med et element hver. UNION(i,j): hvis FIND(i) FIND(j), gør rod af det ene træ til barn af roden af det andet træ. FIND(i): følg sti til rod og returner den. Opgave. Vis datastruktur efter hver operation i følgende sekvens. INIT(7), UNION(1,2), UNION(3,4), UNION(6,2), UNION(6,1), UNION(1,4), UNION(6,3), UNION(5,4), UNION(5,7).

Hurtig forening INIT(n): for k = 1 to n p[k] = k FIND(i): while (i = p[i]) i = p[i] return i UNION(i,j): r i = FIND(i) r j = FIND(j) if (r i r j ) p[r i ] = r j 1 5 8 UNION(6,1) 1 8 2 7 6 3 9 5 2 7 3 9 4 6 4

Hurtig forening Theorem. Vi kan løse forén og find med n elementer i O(n) tid for INIT O(d) tid for FIND O(d) tid for UNION Dybden d af T er den maksimale længde af en sti fra rod til blad. Dårlig nyhed. Dybden kan være n-1. Udfordring. Kan vi sætte sammen træerne snedigt sammen så vi begrænser dybden? d = 4 d = n-1

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

Vægtet forening Vægtet forening. Udvidelse af hurtig forening. Vedligehold tabel sz[1..n] med størrelse af hver knude = antallet af knuder i deltræ. INIT: (næsten) som før. FIND: som før. UNION(i,j): hvis FIND(i) FIND(j), gør rod af det mindste træ til barn af roden af det største træ. Intuition. Vægtet forening balancerer træerne. ri rj UNION(i,j) rj ri i j i j sz[ri] = sz[ri] + sz[rj]

Vægtet forening UNION(i,j): r i = FIND(i) r j = FIND(j) if (r i r j ) if (sz[r i ] < sz[r j ]) p[r i ] = r j sz[r j ] = sz[r i ] + sz[r j ] else p[r j ] = r i sz[r i ] = sz[r i ] + sz[r j ] ri rj UNION(i,j) rj ri i j i j

Vægtet forening Lemma. Med vægtet forening er dybden af en knude højst log2 n. Bevis. Kig på en knude i med dybde di. Initielt er di = 0. di øges med 1 når træet med i forenes med et større træ. Det forenede træ er mindst dobbelt så stort. Vi kan fordoble størrelse af træer højst log2 n gange. di log2 n. i i

Vægtet forening Theorem. Vi kan løse forén og find med n elementer i O(n) tid for INIT O(log n) tid for FIND O(log n) tid for UNION

Forén og find Datastruktur hurtig find hurtig forening vægtet forening UNION O(n) O(n) O(log n) FIND O(1) O(n) O(log n) Udfordring. Kan vi gøre det endnu bedre? Hvad er den bedste man kan håbe på?

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

Stikompression Stikompression. Komprimer stien ved FIND = alle knuder på sti bliver barn af rod. Ændrer ikke på tid for en FIND operation. Efterfølgende FIND operationer bliver hurtigere. Virker både med hurtig forening og vægtet forening. 13 FIND(9) 13 1 2 9 6 3 1 2 3 4 5 11 12 8 7 4 5 6 7 10 8 9 10 11 12

Stikompression Theorem [Tarjan 1975]. Med stikompression tager enhver sekvens af m FIND og UNION operationer over n elementer O(n + m α(m,n)) tid. α(m,n) er den inverse til Ackermanns funktion. α(m,n) 5 for ethvert praktisk input. Theorem [Fredman-Saks 1985]. Det er ikke muligt at understøtte m FIND og UNION operationer O(n + m) tid. 13 FIND(9) 13 1 2 9 6 3 1 2 3 4 5 11 12 8 7 4 5 6 7 10 8 9 10 11 12

Forén og find Datastruktur hurtig find hurtig forening m UNION og FIND O(mn) O(mn) vægtet forening O(n + mlog n) vægtet forening + stikompression O(n + m α(m,n)) umuligt O(n + m)

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

Dynamiske sammenhængskomponenter Dynamiske sammenhængskomponenter. Vedligehold en dynamisk graf under operationer. INIT(n): opret en graf G med n knuder og ingen kanter. CONNECTED(u,v): afgør om u og v er sammenhængende. INSERT(u, v): tilføj kant (u,v). Vi antager (u,v) ikke allerede findes. 1 3 4 5 1 3 4 5 INSERT(3,4) 6 7 8 9 6 7 8 9

Dynamiske sammenhængskomponenter Implementation med forén og find. INIT(n): initialiser en forén og find datastruktur med n elementer. CONNECTED(u,v): FIND(u) == FIND(v). INSERT(u, v): UNION(u,v) 1 3 4 5 1 3 4 5 INSERT(3,4) 6 7 8 9 6 7 8 9

Dynamiske sammenhængskomponenter Theorem. Vi kan løse dynamiske sammenhængskomponenter i en graf med n knuder i O(n) tid for INIT O(log n) tid for CONNECTED O(log n) tid for INSERT

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