INF2220 - Algoritmer og datastrukturer

INF2220 - Algoritmer og datastrukturer
HØSTEN 2015
Ingrid Chieh Yu
Institutt for informatikk, Universitetet i Oslo
Forelesning 5:
Grafer I
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
1 / 55
Dagens plan:
Definisjon av en graf
Grafvarianter
Intern representasjon av grafer
Topologisk sortering
Korteste vei en-til-alle uvektet graf
Korteste vei en-til-alle vektet graf
M.A.W. Data Structures and Algorithm Analysis kap. 9
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
2 / 55
Det første grafteoretiske problem: Broene i Königsberg
Er det mulig å ta en spasertur som krysser hver av broene nøyaktig en
gang?
Dette problemet ble løst av Euler allerede i 1736!
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
3 / 55
Grafer vi har sett allerede
Labyrint
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
4 / 55
Grafer vi har sett allerede
Trær
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
5 / 55
Hva er en graf?
En graf G =(V,E) har en mengde noder, V, og en mengde kanter, E
|V| og |E| er henholdsvis antall noder og antall kanter i grafen
Hver kant er et par av noder, dvs. (u, v ) slik at u, v ∈ V
En kant (u, v ) modellerer at u er relatert til v
Dersom nodeparet i kanten (u, v ) er ordnet (dvs. at rekkefølgen har
betydning), sier vi at grafen er rettet, i motsatt fall er den urettet
Grafer er den mest fleksible datastrukturen vi kjenner
(“alt” kan modelleres med grafer)
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
6 / 55
Hvorfor grafer?
De dukker opp i veldig mange problemer i hverdagslivet:
Flyplassystemer
Datanettverk
Trafikkflyt
Ruteplanlegging
VLSI (chip design)
og mange flere . . .
Grafalgoritmer viser veldig godt hvor viktig valg av datastruktur er
mhp. tidsforbruk
Det finnes grunnleggende algoritmeteknikker som løser mange
ikke-trivielle problemer raskt
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
7 / 55
Grafer: Definisjoner og varianter
Node y er nabo-node (eller etterfølger) til node x dersom (x, y ) ∈ E
En graf er vektet dersom hver kant har en tredje komponent, kalt kost
eller vekt
y
x
5
2
z
9
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
8 / 55
En vei (eller sti) i en graf er en sekvens av noder v1 , v2 , v3 , . . . , vn slik
at (vi , vi+1 ) ∈ E for 1 ≤ i ≤ n − 1
Lengden til veien er lik antall kanter på veien, dvs. n − 1
y
z
x
<z, w, x> er en vei
med lengde 2
w
Kosten til en vei er summene av vektene langs veien
y
1
x
5
2
z
<z, w, x> er en vei
med kost 7
w
En vei er enkel dersom alle nodene (untatt muligens første og siste)
på veien er forskjellige
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
9 / 55
Våre grafer har vanligvis ikke “loops”, (v , v ), eller “multikanter”
(to like kanter):
En løkke (sykel) i en rettet graf er en vei med lengde ≥ 1 slik at
v1 = vn . Løkken er enkel dersom stien er enkel
I en urettet graf må også alle kanter i løkken være forskjellige
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
10 / 55
En rettet graf er asyklisk dersom den ikke har noen løkker
En rettet, asyklisk graf blir ofte kalt en DAG (Directed, Acyclic Graf)
En urettet graf er sammenhengende dersom det er en vei fra hver
node til alle andre noder
sammenhengende
Ingrid Chieh Yu (Ifi, UiO)
ikke sammenhengende
INF2220
H2015, forelesning 5
11 / 55
En rettet graf er sterkt sammenhengende dersom det er en vei fra hver
node til alle andre noder
En rettet graf er svakt sammenhengende dersom den underliggende
urettede grafen er sammenhengende
sterkt sammen−
hengende
Ingrid Chieh Yu (Ifi, UiO)
INF2220
svakt sammen−
hengende
H2015, forelesning 5
12 / 55
Graden til en node i en urettet graf er antall kanter mot noden
Inngraden til en node i en rettet graf er antall kanter inn til noden
Utgraden til en node i en rettet graf er antall kanter ut fra noden.
v
Grad(v)=3
Ingrid Chieh Yu (Ifi, UiO)
v
Inngrad(v)=1
Utgrad(v)=4
INF2220
H2015, forelesning 5
13 / 55
Hvordan representere grafer?
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
14 / 55
Nabo-matrise (adjacency matrix)
Bra hvis “tett” graf, dvs. |E| = Θ(|V|2 )
Det tar O(|V|) tid å finne alle naboer
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
15 / 55
Nabo-liste (adhacency list)
Bra hvis “tynn” (“sparse”) graf
Tar O(Utgrad(v )) tid å finne alle naboer til v
De fleste grafer i det virkelige liv er tynne!
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
16 / 55
Objekter & array
I Java kan grafer også representeres ved en kombinasjon av
node-objekter og etterfølgerarrayer
Arraylengden kan være en parameter til node-klassens constructor
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
17 / 55
c l a s s Node {
int antallNaboer ;
Node [ ] e t t e r f ;
double [ ] v e k t ;
Node ( i n t k a p a s i t e t ) {
e t t e r f = new Node [ k a p a s i t e t ] ;
vekt
= new d o u b l e [ k a p a s i t e t ] ;
antallNaboer = 0;}
}
Da må vi vite antall etterfølgere når vi genererer noden
Eventuelt kan vi estimere en øvre grense og la siste del av arrayen
være tom
Vi trenger da en variabel som sier hvor mange etterfølgere en node
faktisk har
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
18 / 55
Topologisk sortering
En topologisk sortering er en ordning (rekkefølge) av noder i en DAG
slik at dersom det finnes en vei fra vi til vj , så kommer vj etter vi i
ordningen
Topologisk sortering er umulig hvis grafen har en løkke
IN102
MA100/
MA001
IN115
En liten del av Ifis
kursplan i 1999
IN212
IN105
IN394
IN114
IN211
MA108
IN147
MA−IN
118
Ingrid Chieh Yu (Ifi, UiO)
IN310
IN210
INF2220
H2015, forelesning 5
19 / 55
Følgende enkle algoritme finner en topologisk sortering (hvis det er noen):
1
Finn en node med inngrad = 0
2
Skriv ut noden, og fjern noden og utkantene fra grafen (marker noden
som ferdig og reduser inngraden til nabonodene)
3
Gå tilbake til punkt 1
Eksempel:
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
20 / 55
Algoritme for topologisk sortering
void t o p s o r t () {
Node v ;
f o r ( i n t t e l l e r = 0 ; t e l l e r < ANTALL_NODER ;
v = finnNyNodeMedInngradNull ( ) ;
t e l l e r ++) {
i f ( v == n u l l ) {
e r r o r ( "Lø k k e f u n n e t ! " ) ;
} else {
< S k r i v u t v som node ’ t e l l e r ’ >
f o r < h v e r nabo w t i l v > {
w . i n n g r a d −−;
}}}}
Denne algoritmen er O(|V|2 ) siden finnNyNodeMedInngradNull ser
gjennom hele node/inngrad-tabellen hver gang
Unødvendig: bare noen få av verdiene kommer ned til 0 hver gang
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
21 / 55
En forbedring er å holde alle noder med inngrad=0 i en boks.
Boksen kan implementeres som en stakk eller en kø:
1
Plasser alle nodene med inngrad=0 i boksen.
2
Ta ut en node v fra boksen.
3
Skriv ut v .
4
Fjern v fra grafen og reduserer inngraden til alle etterfølgerne.
5
Dersom noen av etterfølgerne får inngrad=0, settes de inn i boksen.
6
Gå tilbake til punkt 2.
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
22 / 55
Forbedret algoritme
void t o p s o r t () {
Kø k = new Kø ( ) ;
Node v ;
int t e l l e r = 0;
f o r < h v e r node v >
i f ( v . i n n g r a d == 0 ) k . s e t t I n n ( v ) ;
while ( ! k . isEmpty ( ) ) {
v = k . taUt ( ) ;
< S k r i v u t v >;
t e l l e r ++;
f o r < h v e r nabo w t i l v > {
w . i n n g r a d −−;
i f (w . i n n g r a d == 0 ) k . s e t t I n n (w ) ;
}
}
i f ( t e l l e r < ANTALL_NODER) e r r o r ( "Lø k k e f u n n e t ! " ) ;
}
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
23 / 55
Forutsatt at vi bruker nabolister, er denne algoritmen O(|V| + |E|).
Kø/stakk-operasjoner tar konstant tid, og hver node og hver kant blir
bare behandlet en gang.
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
24 / 55
Oppgave
Anta at du har en avhengighetsgraf med noder: {Q, B, J, P, A, Z}. Grafen
har 4 lovlige topologiske sorteringer, det finnes ingen annen sortering av
nodene som tilfredstiller avhengighetene:
1
Q, A, B, J, Z, P
2
Q, B, A, J, Z, P
3
Q, A, B, Z, J, P
4
Q, B, A, Z, J, P
Tegn en graf som oppfyller kriteriene.
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
25 / 55
Korteste vei, en-til-alle
I korteste vei problemet (en-til-alle) har vi gitt en (muligens vektet) graf
G=(V,E) og en node s.
Vi ønsker å finne den korteste veien (evt. med vekter) fra s til alle andre
noder i G.
y
x
5
2
z
9
Korteste vei fra z til x uten vekt er 1.
Korteste vei fra z til x med vekt er 7 (via y).
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
26 / 55
Negative vekter (kost) i løkker kan skape problemer:
y
x
5
−12
z
5
Hvor mye koster korteste
vei fra x til z?
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
27 / 55
Korteste vei i en uvektet graf
Korteste vei fra s til t i en uvektet graf er lik veien som bruker færrest
antall kanter.
V1
V3
V2
V4
V6
V5
V7
(Det tilsvarer at alle kanter har vekt=1)
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
28 / 55
Følgende bredde-først algoritme løser problemet for en node s i en
uvektet graf G:
1
2
3
4
5
Marker at lengden fra s til s er lik 0.
(Merk at s foreløpig er den eneste noden som er markert.)
Finn alle etterfølgere til s.
Marker disse med avstand 1.
Finn alle umarkerte etterfølgere til nodene som er på avstand 1.
Marker disse med avstand 2.
Finn alle umarkerte etterfølgere til nodene som er på avstand 2.
Marker disse med avstand 3.
Fortsett til alle noder er markert, eller vi ikke har noen umarkerte
etterfølgere.
Finnes det fortsatt umarkerte noder, kan ikke hele G nåes fra s.
Hvis G er urettet, skjer dette hvis og bare hvis G er usammenhengende.
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
29 / 55
Vi kan finne den korteste veien ved å sette bakoverpekere (“vei”) til den
noden som “oppdaget” oss
v o i d u v e k t e t ( Node s ) {
f o r < h v e r node v > {
v . a v s t a n d = UENDELIG ;
v . kjent = false ;
}
s . avstand = 0;
f o r ( i n t d i s t = 0 ; d i s t < ANTALL_NODER ; d i s t ++) {
f o r < h v e r node v > {
i f ( ! v . k j e n t && v . a v s t a n d == d i s t ) {
v . kjent = true ;
f o r < h v e r nabo w t i l v > {
i f (w . a v s t a n d == UENDELIG ) {
w. avstand = d i s t + 1;
w. v e i = v ;
}}}}}}
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
30 / 55
Hovedløkken vil som oftest fortsette etter at alle noder er merket, men den
vil terminere selv om ikke alle noder kan nåes fra s. Tidsforbruket er
O(|V|2 ).
Vi sparer tid ved å benytte en kø av noder.
Vi begynner med å legge s inn i køen.
Så lenge køen ikke er tom, tar vi ut første node i køen, behandler
denne og legger dens etterfølgere inn bakerst i køen.
Da blir s behandlet først. Så blir alle noder i avstand 1 behandlet før
alle i avstand 2, før alle i avstand 3 . . .
Denne strategien ligner på bredde først traversering av trær
(først rotnoden, så alle noder på nivå 1, så alle noder på nivå 2, osv).
Tidsforbruket blir O(|E| + |V|) fordi køoperasjoner tar konstant tid og
hver kant og hver node bare blir behandlet en gang.
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
31 / 55
Korteste uvektet vei fra node s
v o i d u v e k t e t ( Node s ) {
Kø k = new Kø ( ) ;
Node v ;
f o r < h v e r node n > n . a v s t a n d = UENDELIG ;
s . avstand = 0;
k. settInn (s );
while ( ! k . isEmpty ( ) ) {
v = k . taUt ( ) ;
f o r < h v e r nabo w t i l v > {
i f (w . a v s t a n d == UENDELIG ) {
w. avstand = v . avstand + 1;
w. v e i = v ;
k . s e t t I n n (w ) ;
}}}}
Bruken av kø gjør attributtet kjent overflødig.
Forutsatt at vi bruker nabolister, er denne algoritmen O(|V| + |E|).
Kø-operasjoner tar konstant tid, og hver node og hver kant blir
behandlet bare en gang.
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
32 / 55
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
33 / 55
Korteste vei i en vektet graf uten negative kanter
Graf uten vekter:
Velger først alle nodene med avstand 1 fra startnoden, så alle med
avstand 2 osv
Mer generelt: Velger hele tiden en ukjent node blant dem med minst
avstand fra startnoden
Den samme hovedideen kan brukes hvis vi har en graf med vekter
algoritmen: publisert av Dijkstra i 1959 og har fått navn etter ham
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
34 / 55
[source: http://biofilmforskning.wordpress.com/mikroorganismer/mugg/]
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
35 / 55
V−X
X
s
v*
Ingrid Chieh Yu (Ifi, UiO)
w*
INF2220
H2015, forelesning 5
36 / 55
Nodene er enten KJENT eller UKJENT
KJENT = korteste vei fra s funnet!
UKJENT = korteste vei er under beregning
i starten:
KJENT
s
d s= 0
..
..
UKJENT
V−s
For hvert steg øker algo. mengden av kjente noder med 1. Hvilken node
velger den??
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
37 / 55
UKJENT
KJENT
v1
s
d v1
Cv1,w1
Cv
w1
1,w
3
w2
d s= 0
v2
2
Cv2,w
w3
d v2
Velg den noden som har minst avstand til s: Dijkstra grådig kriterier
MIN(dv 1 + Cv 1,w 1 , dv 2 + Cv 2,w 2 , dv 1 + Cv 1,w 3 )
|
{z
} |
{z
} |
{z
}
dw 1
Ingrid Chieh Yu (Ifi, UiO)
dw 2
INF2220
dw 3
H2015, forelesning 5
38 / 55
UKJENT
KJENT
d w1 w1
Cw1,w
4
w4
v1
s
d v1
Cv
1,w
3
w2
d s= 0
v2
2
Cv2,w
w3
d v2
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
39 / 55
Dijkstras algoritme
1
2
3
4
For alle noder:
Sett avstanden fra startnoden s lik ∞. Merk noden som ukjent
Sett avstanden fra s til seg selv lik 0
Velg en ukjent node v med minimal (aktuell) avstand fra s og marker
v som kjent
For hver ukjent nabonode w til v:
Dersom avstanden vi får ved å følge veien gjennom v, er kortere enn
den gamle avstanden til s
reduserer avstanden til s for w
sett bakoverpekeren i w til v
5
Akkurat som for uvektede grafer, ser vi bare etter potensielle
forbedringer for naboer (w) som ennå ikke er valgt (kjent)
uvektet: dw
vektet:
dw
= dv + 1
= dv + cv ,w
hvis dw = ∞
hvis dv + cv ,w < dw
Så lenge det finnes ukjente noder,
gå til punkt 3
INF2220
6Ingrid Chieh Yu (Ifi, UiO)
H2015, forelesning 5
40 / 55
Eksempel
Input:
s = V1
2
V1
6
4
2
V3
V6
10
3
7
V4
8
5
Ingrid Chieh Yu (Ifi, UiO)
V2
4
1
INF2220
V5
2
V7
H2015, forelesning 5
41 / 55
Den første noden som velges, er startnoden V1
0
2
V1
6
4
4
V2 2
2
V3
οο
V6
7
V4
8
5
10
3
4
6
1
V5
οο
2
V7
οο
Naboene til V1 har fått endret sin avstand og fått tilbakepekere til V1
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
42 / 55
Nå er V2 nærmeste ukjente node
0
2
V1
6
4
4
V2 2
2
V3
οο
V6
7
V4
8
5
10
3
4
5
1
V5
12
2
V7
οο
V4 og V5 har fått ny avstand og tilbakepeker
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
43 / 55
V3 er nærmeste ukjente node
0
2
V1
6
4
4
V2 2
2
V3
9
V6
7
V4
8
5
10
3
4
5
1
V5
12
2
V7
οο
V6 har fått endret sin avstand og fått tilbakepeker til V3
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
44 / 55
Nå er V4 nærmeste ukjente node.
Merk at den aldri senere kan få endret sin avstand
0
2
V1
6
4
4
V2 2
2
V3
9
V6
7
V4
8
5
10
3
4
5
1
V5
12
2
V7
9
V7 har fått ny avstand og tilbakepeker,
og V6 og V7 er nærmeste ukjente noder
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
45 / 55
Vi velger V6 som blir kjent
0
2
V1
6
4
4
V2 2
2
V3
9
7
V4
8
5
10
3
V6
4
5
1
V5
12
2
V7
9
Nå er V7 nærmest og blir kjent
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
46 / 55
V5 får ny avstand og tilbakepeker
0
2
V1
6
4
4
V2 2
2
V3
9
V6
7
V4
8
5
10
3
4
5
1
V5
11
2
V7
9
Vi kan nå avslutte med å gjøre V5 kjent
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
47 / 55
Oppgave
Bruk Dijkstras algoritme, og fyll ut tabellen nedenfor!
2
V1
4
V2
1
2
V3
2
V4
8
5
10
3
4
1
V6
V5
6
V7
Initielt:
Ingrid Chieh Yu (Ifi, UiO)
kjent avstand
F
F
F
F
F
F
F
vei
0
0
8 8 8 8 8 8
v
v1
v2
v3
v4
v5
v6
v7
0
0
0
0
0
0
v kjent avstand
v1
v2
v3
v4
v5
v6
v7
INF2220
vei
H2015, forelesning 5
48 / 55
Hvorfor virker algoritmen?
Invariant
Ingen kjent node har større avstand til s enn en ukjent node
Alle kjente noder har riktig korteste vei satt
Vi plukker ut en ukjent node v med minst avstand (dv ), markerer den
som kjent og påstår at avstanden til v er riktig
Denne påstanden holder fordi:
dv er den korteste veien ved å bruke bare kjente noder
de kjente nodene har riktig korteste vei satt
en vei til v som er kortere enn dv , må nødvendigvis forlate mengden av
kjente noder et sted,
men dv er allerede den korteste veien fra kjente noder til v
Dette argumentet holder fordi vi ikke har negative kanter!
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
49 / 55
V−X
X
z
y
s
v*
Ingrid Chieh Yu (Ifi, UiO)
w*
INF2220
H2015, forelesning 5
50 / 55
Tidsforbruk
Hvis vi leter sekvensielt etter den ukjente noden med minst avstand
tar dette O(|V|) tid, noe som gjøres |V| ganger, så total tid for å
finne minste avstand blir O(|V|2 )
I tillegg oppdateres avstandene, maksimalt en oppdatering per kant,
dvs. til sammen O(|E|)
Totalt tidsforbruk
O(|E| + |V|2 ) = O(|V|2 )
Raskere implementasjon (for tynne grafer):
Bruker en prioritetskø til å ta vare på ukjente noder med avstand
mindre enn ∞
Prioriteten til ukjent node forandres hvis vi finner kortere vei til noden
deleteMin og decreaseKey bruker O(log |V|) tid (kap. 6)
Totalt tidsforbruk
O(|V| log |V| + |E| INF2220
log |V|) = O(|E| logH2015,
|V|) forelesning 5
Ingrid Chieh Yu (Ifi, UiO)
51 / 55
Hva med negative kanter?
En mulig løsning:
Nodene er ikke lenger kjente eller ukjente
Vi har i stedet en kø som inneholder noder som har fått forbedret
avstandsverdien sin
Løkken i algoritmen gjør følgende:
1
2
3
Ta ut en node v fra køen
For hver etterfølger w, sjekk om vi får en forbedring (dw > dv + cv,w )
Oppdater i så fall avstanden, og plasser w (tilbake)! i køen
(hvis den ikke er der allerede)
Tidsforbruket blir O(|E| · |V|)
Det finnes ingen korteste vei med negative løkker i G. Det er det hvis
og bare hvis samme node blir tatt ut av køen mer enn |V| ganger.
Da må vi terminere algoritmen!
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
52 / 55
Hva med asykliske grafer?
Lineær tid ved å behandle nodene i en topologisk rekkefølge
O(|E| + |V|)
når en node v er valgt, kan dv ikke lenger senkes siden det er ingen
innkommende kanter som kommer fra ukjente noder
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
53 / 55
Oppsummering
Graf: Noder + Kanter
Begrep: Rettet, urettet, inngrad, utgrad, sti. . .
DAG: Rettet asyklisk graf (topologisk sortering)
Avstand: Korteste vei en-til-alle
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
54 / 55
Neste forelesning: 24. september
Grafer II:Prim, Kruskal, Dybde-først søk
Ingrid Chieh Yu (Ifi, UiO)
INF2220
H2015, forelesning 5
55 / 55