Algdat - øvingsforelesning

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

Algdat Eksamensforelesning. Nils Barlaug

Algdat - øvingsforelesning

Øvingsforelesning Korteste vei: Alle til alle

Minimum Spenntrær - Kruskal & Prim

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

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

Løsningsforslag - Korteste vei

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

Grunnleggende Grafalgoritmer II

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

INF Algoritmer og datastrukturer

O, what a tangled. Fjerde forelesning. O, what a tangled web we weave / When first we practice to deceive! Sir Walter Scott, *Marmion*

Algdat - Øvingsforelesning. Maks flyt

En litt annen måte å forklare traversering på. Traversering

Grunnleggende Grafalgoritmer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

SIF8010 ALGORITMER OG DATASTRUKTURER

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

Eksamen i tdt4120 Algoritmer og datastrukturer

Øvingsforelesning 6. Sorteringsalgoritmer. Martin Kirkholt Melhus Basert på foiler av Kristian Veøy 30/09/14 1

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Grunnleggende Grafteori

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algdat-ninja på 60 minutter: Et galskapsprosjekt. Magnus Lie Hetland

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 10

Fra A til B. Syvende forelesning

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

Øvingsforelesning 12 Maks flyt

All good things. Fjortende forelesning

LO118D Forelesning 9 (DM)

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

Løsningsforslag for utvalgte oppgaver fra kapittel 9

Agenda. 1 Sortering, heap og select. 2 Binære trær. 3 Grafer, BFS og DFS. 4 Spenntrær og Korteste vei. 5 Maks flyt. 6 Dynamisk programmering

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland

INF Algoritmer og datastrukturer

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver - LF. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

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

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6

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

Dijkstras algoritme Spørsmål

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

INF Algoritmer og datastrukturer

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

Kjøretidsanalyse. Hogne Jørgensen

Øvingsforelesning 2 - TDT4120. Grafer og hashing. Benjamin Bjørnseth

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

Løsnings forslag i java In115, Våren 1998

INF Algoritmer og datastrukturer

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

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

INF Algoritmer og datastrukturer

MAT1030 Forelesning 22

Lineær sortering. Radix sort

LO118D Forelesning 10 (DM)

Forelesningsplan. Grådighet. LF Øving 9. Hva er grådighet? Aktivitetsvelger En grådig strategi Grådig eller dynamisk? Knapsack Huffmankoding

Øvingsforelesning 9: Minimale spenntrær. Daniel Solberg

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf

MAT1030 Diskret matematikk

LO118D Forelesning 12 (DM)

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

All good things. Fjortende forelesning

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

Øvingsforelesning 5 Python (TDT4110)

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Øvingsforelesning 5 Python (TDT4110)

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

UNIVERSITETET I OSLO

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Kondisjonstest. Algoritmer og datastrukturer. Repetisjonsoppgaver - LF. Onsdag 6. oktober 2004

UNIVERSITETET I OSLO

Øvingsforelesning 3 Python (TDT4110)

ALGORITMER OG DATASTRUKTURER

Løsningsforslag - Floyd-Warshall

Avsluttende eksamen i IT1105/TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Transkript:

Algdat - øvingsforelesning Topologisk sortering og minimale spenntrær Nils Barlaug

Dagens plan 1. 2. 3. 4. 5. Praktisk og dagens plan Topologisk sortering Minimale spenntrær a. Kruskal b. Prim Tips til øving 4 LF øving 3 Det blir Kahoot!, så følg med og ha klar en enhet du kan delta med! For presentasjoner med mer tekst og forklaringer se tidligere års utmerkede presentasjoner

Topologisk sortering

Annet eksempel på topologisk sortering

Enda et eksempel

Enda et eksempel

DAG - Directed Acyclic Graph ( rettet asyklisk graf) Ikke dag DAG DAG

Topologisk sortering Abstraksjon En topologisk sortering av en DAG G er en lineær ordning av nodene i G slik at hvis G inneholder en kant (u, v) kommer u før v i ordningen. (Cormen) Hvordan kan vi løse dette generelt?

Topologisk sortering - algoritmen (i boka) Kjør DFS på alle noder. Når en node er ferdigprosessert legges den først i den topologiske ordningen. La oss prøve algoritmen på denne snedige grafen

Magisk? Hvorfor fungerer det? Vi er i et DFS-søk og akkurat ankommet node u. 1. Hvis node v ikke har blitt oppdaget ennå vil vi besøke og fullføre den før vi fullfører u. Da havner den bak u. 2. Hvis node v allerede er fullført er den lagt til i den topologiske ordningen. Da vil u havne foran. 3. Hvis node v allerede er oppdaget men ikke fullført? Da har vi oppdaget en sykel, og har følgelig ikke med en DAG å gjøre! u v

Kjøretid DFS, men vi gjør en O(1)-operasjon for hver node Altså samme kompleksitet som for DFS Θ(V + E)

Kahoot!

Minimale spenntrær

Annet eksempel

Minimale spenntrær Abstraksjon Spenntre Et utvalg kanter i en (urettet og sammenhengende) graf som danner et tre på en slik måte at alle noder er med i treet. Minimale spenntrær Spenntrær som minimerer summen av kantvekter i treet Hvordan kan vi finne et slikt minimalt spenntre?

Vi gjør det grådig Lokalt optimaliserte valg gir oss en globalt optimal løsning Legge til en og en trygg kant

Teorem 23.1 Snitt

Teorem 23.1 (lett kant trygg kant) Trygg / lett kant (u, v) ---- Kanter vi vet tilhører et minimalt spenntre (A) Et snitt som respekterer A Vanlig kant Lett kant: minimal kant som krysser snittet ----

Teorem 23.1 - bevis-skisse Minimalt spenntre T i en graf Et subset av kantene i T, kalt A Et snitt som respekterer A ---- Lett kant utenfor T ---- A {(u, v)} er subset av et minimalt spenntre Lett kant: minimal kant som krysser snittet

Kruskal Sorter alle kanter etter stigende kantvekt Legg til kanter så lenge de ikke lager en sykel Hvorfor vil dette fungere (i henhold til teorem 23.1)? Kjøretid Implementasjonsavhengig O(E lg V) hvis man bruker disjoint-set forest La oss prøve algoritmen på denne snertne grafen

Prim Start med en tilfeldig node som startnode til treet T Legg hele tiden til billigste kant som utvider treet T med en ny node Hvorfor vil dette fungere (i henhold til teorem 23.1)? Kjøretid Kommer an på hvordan vi lager prioritetskøen Binary heap: O(E lg V) Fibonacci heap: O(E + V lg V) (ikke pensum) La oss prøve algoritmen på denne snodige grafen

Kahoot!

Øving 4 - Prinsessejakt Delgrafen som ikke kan nås fra 1 Delgrafen som ikke kan nås fra 2

Rammeverket from sys import * import traceback def subgraftetthet(nabomatrise, startnode): n = len(nabomatrise) # SKRIV DIN KODE HER if noder == 0: return 0.0 else: return float(kanter) / float(noder**2) try: n = int(stdin.readline()) nabomatrise = [None] * n # rader for i in range(0, n): nabomatrise[i] = [False] * n # kolonner linje = stdin.readline() for j in range(0, n): nabomatrise[i][j] = (linje[j] == '1') for linje in stdin: start = int(linje) print "%.3f" % (subgraftetthet (nabomatrise, start) + 1E-12) except: traceback.print_exc(file=stderr)

Rammeverket - input def subgraftetthet(nabomatrise, startnode): n = len(nabomatrise) # SKRIV DIN KODE HER if noder == 0: return 0.0 else: return float(kanter) / float(noder**2) Spørsmål? Input: 6 011000 000100 000110 000001 010101 000100 1 2 Output: 0.222 0.000

Teoriøving 3 - LF

Praksisøving 3 - Kobra lærer å stave def bygg(ordliste): # START IKKE-UTDELT KODE toppnode = Node() for (ord, posisjon) in ordliste: node = toppnode for bokstav in ord: if not bokstav in node.barn: node.barn[bokstav] = Node() node = node.barn[bokstav] node.posi.append(posisjon) return toppnode # SLUTT IKKE-UTDELT KODE def posisjoner(ord, indeks, node): # START IKKE-UTDELT KODE if indeks >= len(ord): posi = node.posi elif ord[indeks] == "?": posi = [] for barn in node.barn.values(): posi += posisjoner(ord, indeks + 1, barn) elif ord[indeks] in node.barn: posi = posisjoner(ord, indeks + 1, node.barn [ord[indeks]]) else: posi = [] return posi # SLUTT IKKE-UTDELT KODE

Spørsmål?