Grunnleggende Grafalgoritmer III

Like dokumenter
Minimum Spenntrær - Kruskal & Prim

Lars Vidar Magnusson

Grunnleggende Grafalgoritmer

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

Grunnleggende Grafalgoritmer II

IN Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

Korteste Vei I. Lars Vidar Magnusson Kapittel 24 Hvordan finne korteste vei Egenskaper ved korteste vei

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Disjunkte mengder ADT

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Øvingsforelesning 4. Topologisk sortering, Strongly Connected Components og Minimale spenntrær. Magnus Botnan

Grunnleggende Datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Uke 5 Disjunkte mengder

Korteste Vei II. Lars Vidar Magnusson Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

UNIVERSITETET I OSLO

Kap 9 Tre Sist oppdatert 15.03

INF Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Minimum spenntrær. Lars Vidar Magnusson Kapittel 23. Kruskal Prim

INF Algoritmer og datastrukturer

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

O, what a tangled. Fjerde forelesning. Robot-eksemplet som ikke ble gjennomgått sist blir frivillig selvstudium (ut fra foilene :-)

UNIVERSITETET I OSLO

PG4200 Algoritmer og datastrukturer Forelesning 10

Oppgave 1. Sekvenser (20%)

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Lars Vidar Magnusson

KORTESTE STI. Vektede Grafer. Korteste Sti. Dijkstra s Algoritme. Vektet Urettet Graf

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

Divide-and-Conquer II

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Hashtabeller. Lars Vidar Magnusson Kapittel 11 Direkte adressering Hashtabeller Chaining Åpen-adressering

UNIVERSITETET I OSLO

Uretta grafar (1) Mengde nodar Mengde kantar som er eit uordna par av nodar

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Datastrukturer. Algoritmer og datastrukturer. Øvingsforelesning 2

Notater til INF2220 Eksamen

MAT1030 Forelesning 25

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Definisjon av binært søketre

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Roger Antonsen

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Sist gang (1) IT1101 Informatikk basisfag. Sist gang (2) Oppgave: Lenket liste (fysisk) Hva menes med konseptuelt og fysisk i forb med datastrukturer?

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

Løsningsforslag for Obligatorisk Oppgave 2. Algoritmer og Datastrukturer ITF20006

INF2220: Time 4 - Heap, Huffmann

Forelesning 24. Grafer og trær. Dag Normann april Vektede grafer. En kommunegraf

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing

Vektede grafer. MAT1030 Diskret matematikk. En kommunegraf. En kommunegraf. Oppgave

Grafalgoritmer: Korteste vei

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

MAT1030 Forelesning 25

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann

AlgDat 12. Forelesning 2. Gunnar Misund

Et eksempel: Åtterspillet

MAT1030 Diskret Matematikk

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

INF2810: Funksjonell Programmering. Trær og mengder

Vi skal se på grafalgoritmer for:

LP. Leksjon 8: Kapittel 13: Nettverk strøm problemer, forts.1

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

ALGORITMER OG DATASTRUKTURER

Propabilistisk Analyse og Randomiserte Algoritmer

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF Algoritmer og datastrukturer

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Vi skal se på grafalgoritmer for:

Disjoint Sets. Chapter 21. CPTR 430 Algorithms Disjoint Sets 1

SIF8010 ALGORITMER OG DATASTRUKTURER

INF2810: Funksjonell Programmering. Trær og mengder

Algoritmer og Datastrukturer

INF-MAT5370. Grafer og datastrukturer

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

GRAF-TRAVERSERING. Hvordan utforske en labyrint uten å gå seg vill. Rekkefølge på kanter: Dybde-Først Søk A B C D E F G H I J K L M N O P

Transkript:

Grunnleggende Grafalgoritmer III Lars Vidar Magnusson 26.3.2014 Kapittel 21 og 22 Usammenhengende-sett Strongly-connected components

Usammenhengende Sett Usammenhengende sett er ikke en grafalgoritme i seg selv, men de benyttes i flere. Usammenhengende sett (disjoint-set) er en datastruktur for å ivareta et sett med komponenter uten felles medlemmer. Er også kjent som union find algoritmen. Ivaretar en samling T = {S 1,..., S k } med k usammenhengende dynamiske sett. Hver sett er identifiseres av et represantativt element som kan være hvilket som helst av elementene i settet.

Usammenhengende Sett Operasjoner Vi har tre hovedoperasjoner på usammenhengende sett. Make-Set(x): Lager et nytt usammenhengende sett S i = {x} og legger S i til T. Union(x, y): Hvis x S x og y S y så er T = T S x S y {S x S y }. Find-Set(x): Returnerer det representative elementet i settet som inneholder x.

Analyse av Usammenhengende Sett Når vi analyserer usammenhengende sett så må vi ta hensyn til to ulike størrelser. n er det totale antallet elementer i.e. antall Make-Set operasjoner. m er det totale antallet operasjoner på strukturen i.e. n pluss alle andre operasjoner. Siden m inneholder n vil m n. Vi kan ikke ha flere enn n 1 Union operasjoner, siden etter n 1 kall til Union så er alle elementer medlem av samme sett.

Applikasjonseksempel - Connected-Components Algoritmen For å vise hvordan usammenhengende sett kan bli brukt skal vi ta en titt på en enkel grafalgoritme Connected-Components. For en graf G = (V, E) så er node u og v i samme komponent hvis det eksiterer en sti mellom dem. Connected-Components algoritmen finne alle sammenhende komponenter i en graf G.

Connected-Components Pseudokode Connected-Components algoritmen er listet under. Vi kan sjekke om to noder er sammenhengende ved å bruke Same-Component.

Representere Usammenhengende Sett Det finnes flere måter å representere usammenhengende sett i minnet. Den mest effektive er å bruke en skog med usammenhengende sett (disjoint-set forest). Vi har et tre per sett. Roten i treet er det representative elementet Hver node peker bare til sin forelder i.e. ingen referanser til eventuelle barn. Operasjonene på usammenhengende sett kan da sammenfattes med følgende. Make-Set: lager et tre med bare rotnode Union: setter den ene roten til å være barn av den andre Find-Set: følg forelderreferansene til vi når rotnoden

Eksempel på Skog av Usammenhengende Sett Figuren under viser et eksempel på en skog av usammenhengende sett.

Optimalisering ved Hjelp av Heuristikk Kjøretiden for Find-Set kan i verstefall bli lineær, som villet ført til lang kjøretid. Man har kommet frem til to fantastiske heuristikk for å fjerne problemet. Den første er den såkalte union by rank heuristikken Vi lar roten til det minste treet bli barn til det største I stedet for størrelse bruker vi rank som er en øvre grense på høyden til en node. Den andre er såkalt path compression Vi lar alle nodene på veien til roten under kjøring av Find-Path få rotnoden som forelder. Hver node x vil ha to atributter x.p og x.rank.

Eksempel på Path Compression Figuren under viser et eksempel på hvordan path compression fungerer.

Make-Set Algoritmen Pseudokoden for Make-Set algoritmen er listet under.

Union Algoritmen Pseudokoden for Union algoritmen og hjelpealgoritmen Link er listet under.

Find-Set Algoritmen Pseudokoden for Find-Set algoritmen er listet under.

Kjøretiden til Usammenhengende Sett Som vi har nevnt tidligere så beskriver vi kjøretiden til en usammenhengende sett implementasjon ved hjelp av to størrelser. n er antall elementer m er antall operasjoner, inkludert Make-Set Hvis man bruker både union by rank og path compression så får vi en kjøretid på O(mα(n)). α er den inverse Ackermann funksjonen (se tabellen under for å se hvordan α(n) vokser i forhold til n. n α(n) 0 2 0 3 1 4 7 2 8 2047 3 2048 A 4(1) 4 A 4(1) refererer til et tall større enn 10 80.

Strongly Connected Components (SCC) Algoritmen Vi har sett på hvordan vi finner sammenhengende komponenter i en graf med Connected-Components. Vi skal nå se på hvorda vi finner strongly connected components med SCC algoritmen. Vi er gitt en rettet graf G = (V, E). Et sammenhengende komponent C er strengt sammenhengende hvis u, v C det eksisterer en sti fra u til v og en sti fra v til u.

Ideen bak SCC Algoritmen bruker den transponerte grafen G T. G T = (V, E T ), E T = {(u, v) : (v, u) E} G T er G med alle kantene snudd Vi observerer at G og G T har de samme strengt sammenhengende komponentene (SCC). Vi generer en graf G SCC = (V SCC, E SCC ). V SCC inneholder en node for hvert strengt sammenhengende komponent i G. E SCC inneholder en kant mellom komponentene hvis det eksisterer en kant mellom komponentene i G. G SCC er en DAG, siden hvert komponent er separert fra hverandre med kanter som går én vei.

Pseudokode for SCC Pseudokoden for SCC algoritmen er listet under.

Hvordan SCC Fungerer Figuren under viser hvordan SCC algoritmen tar en rettet graf G og finner en DAG G SCC med de strengt sammenhengende komponentene.