Föreläsningsanteckningar S6 – Grafteori

Introduktion till datavetenskap
HT 2009
F¨orel¨asningsanteckningar S6 – Grafteori
Tobias Wrigstad
1
Introduktion till grafteori
P˚
a den h¨
ar f¨
orel¨
asningen tar vi upp element¨ar grafteori och f¨ors¨oker introducera termer och
begrepp som blir viktigare i senare kurser. Subjektivt tycker jag grafer a¨r l¨atta att ha att
g¨
ora med f¨
or att de a
ojliga att rita upp och f¨orst˚
a, vilket inte alla datastrukturer a¨r p˚
a
¨r m¨
samma tacksamma s¨
att.
Efter den h¨
ar f¨
arel¨
asningen b¨
or du vara bekant med f¨oljande begrepp och aktiviteter. Jag
passar p˚
a att introducera ett antal begrepp och koncept som ¨ar viktiga av andra anledningar,
men som ocks˚
a g¨
or det enkelt att precist definiera vad en graf ¨ar.
1. Modell, icke-matematisk och matematisk
2. M¨
angd och element
3. Relation, reflexiv, irreflexiv, symmetrisk, transitiv
4. Graf, b˚
agar och noder, angr¨
ansande noder, isomorfism
5. Storlek och ordning (om graf)
6. Hur man ritar en graf
7. Digraf (riktad graf), dag (riktad acyklisk graf)
8. N¨
atverk (viktade grafer)
9. Dijkstras algoritm
2
Modell
Intuitivt kan vi s¨
aga att en icke-matematisk modell ¨ar en (p˚
a ett eller flera s¨att f¨orenklad)
representation av n˚
agonting. En modellbil har f¨ormodligen inte en tillfredsst¨allande instrumentbr¨
ada f¨
or den som ¨
ar intresserad av bilinteri¨orer. En karta ¨ar en modell av en geografisk
verklighet.
En matematisk modell ¨
ar en matematisk representation av n˚
agonting. Bra exempel h¨ar ¨ar
t.ex. trivial trigonometri (l¨
aran om f¨orh˚
allandet mellan vinklar och sidor i en triangel) och
geometri (l¨
aran om rumsliga samband). Med hj¨alp av geometri kan man t.ex. r¨akna ut areor
p˚
a rektangul¨
ara ytor, etc. En modell f¨or kostnaden att bygga en villa i Saltsj¨obaden kan
hypotetiskt vara 1.000.000 + 400.000 × antalet rum. Enligt denna modell kostar s˚
aledes en
Saltsj¨
obadsvilla med fem rum 3.000.000 kronor.
Den matematiska modellen f¨
or kostnaden f¨or en Saltsj¨obadsvilla ¨ar en uppenbar f¨orenkling,
som t.ex. inte tar h¨
ansyn till mer lokalt l¨age som t.ex. sj¨outsikt.
1 av 6
Introduktion till datavetenskap
HT 2009
M
F¨
orel¨
asningsanteckningar S6 – Grafteori
N
unionen
M
snittet
N
¨
Figur 1: [Overkurs]
Union och snitt av m¨angderna M och N .
3
M¨
angder och element
En m¨
angd ¨
ar en oordnad samling diskreta (d.v.s. olika) element, t.ex. alla studenter p˚
a
DVK. En m¨
angd skrivs normalt med kommaseparerade element mellan ”krullparenteser,”
d.v.s.:
{ 2, 3, 5, 7, 11 }
ar m¨
angden av alla primtal1 mindre ¨an eller lika med 11. Den tomma m¨angden skrivs
¨
normalt ∅, men kan ¨
aven skrivas { }.
Att ett element ¨
ar med i en m¨
angd betecknas normalt ∈, t.ex.
3 ∈ { 1, 2, 3, 4, 5 }
samt, f¨
or icke-tillh¨
orighet, 6∈, d.v.s.,
6 6∈ { 1, 2, 3, 4, 5 }.
¨
[OVERKURS]
Operationer p˚
a m¨
angder L˚
at variabeln M beteckna m¨angden { 1, 2, 3 },
N beteckna m¨
angden { 2, 4, 6 } och P beteckna m¨angden { 2 }.
Vi observerar att unionen av M och N , d.v.s. sammanslagningen av b˚
adas samtliga element,
ar m¨
angden { 1, 2, 3, 4, 6 }. Detta skrivs normalt M ∪ N = { 1, 2, 3, 4, 5 }. (Observera att 2
¨
f¨
orekom i b˚
ada m¨
angderna, men bara en g˚
ang i unionen.)
Vi observerar ocks˚
a att snittet av M och N , d.v.s. m¨angden av de element som finns i b˚
ada
m¨
angderna, ¨
ar m¨
angden { 2 }. Detta skrivs normalt M ∩ N = { 2 }. (Vi kunde ocks˚
a ha
skrivit M ∩ N = P .)
Union och snitt illustreras av Figur 1.
Om alla element i en m¨
angd ing˚
ar i en annan m¨angd s˚
a s¨ager man att den ¨ar en delm¨
angd,
vilket skrivs ⊆. Med andra ord g¨
aller att P ⊆ M (eftersom 4 finns i M ) och P ⊆ N (2 finns
i N ), men ¨
aven P ⊆ P (d.v.s. en m¨angd ¨ar en delm¨angd av sig sj¨alv). Ibland talar man om
strikt delm¨
angd, som inneb¨
ar att m¨angderna inte f˚
ar vara samma. Detta skrivs normalt ⊂
och med andra ord g¨
aller att P ⊂ M och P ⊂ N men inte P ⊂ P , d.v.s, P 6⊂ P .
1 Ett primtal ar ett heltal som inte g˚
ar att j¨
amnt dela med ett annat heltal. 4 ¨
ar inte ett primtal eftersom
¨
4 = 2 × 2, d.v.s. 4 ¨
ar j¨
amnt delbart med 2. Primtal ¨
ar inte intressanta f¨
or oss under denna kurs.
2 of 6
Introduktion till datavetenskap
HT 2009
4
F¨
orel¨
asningsanteckningar S6 – Grafteori
Relationer
En relation ¨
ar ett f¨
orh˚
allande mellan saker. H¨ar kommer vi bara att prata om bin¨ara relationer (kallas ¨
aven tv˚
a-st¨
alliga relationer), d.v.s., relationer mellan tv˚
a saker.
En relation R blir d¨
arf¨
or inom matematiken en m¨angd av ordnade par, t.ex.,
R = { (1, 2), (1, 3), (2, 3) }.
Ovanst˚
aende m¨
angd ¨
ar relationen < (mindre ¨an) f¨or alla tal mellan 1 och 3. Ur m¨angden
ovan kan vi l¨
asa ut att:
• 1¨
ar mindre ¨
an 2 eftersom (1,2) finns i R (d.v.s., eftersom (1, 2) ∈ R s˚
a g¨aller 1 < 2)
• 1¨
ar mindre ¨
an 3 eftersom (1,3) finns i R
• 2¨
ar mindre ¨
an 3 eftersom (2,3) finns i R
D¨
aremot kan vi inte utl¨
asa att 1 < 1 eftersom det (helt korrekt) inte finns i R. Om vi ville
l˚
ata R vara relationen ≤ (mindre ¨an eller lika med) f¨or alla tal mellan 1 och 3 f˚
ar vi
R = { (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3) }.
F¨
orhoppningsvis ser du sambandet mellan m¨angder, relationer och
programmering. Om du t.ex. vill skriva ett program som hanterar
hierarkier i en organisation, kan du representera det med relationen
”chef f¨
or” som ¨
ar v¨
aldigt lik <. D˚
a kan du t.ex. g¨ora det med f¨oljande
datastruktur:
{ (Mats, Tobias), (Love, Tobias), (Love, Mats) }.
Om du ist¨
allet vill representera relationen ”n¨armaste chef” r¨acker det
med att du tar bort (Love,Tobias). H¨ar ser vi igen att datavetenskapen behandlar ”how to do stuff,” i detta fall hur man kan representera
vissa f¨
orh˚
allanden p˚
a ett systematiskt s¨att.
4.1
Olika typer av relationer
Det ¨
ar ibland nyttigt att kategorisera olika typer av relationer. H¨ar tar vi upp ett par enkla
kategorier.
Reflexivitet En relation ¨
ar reflexiv om f¨or alla v¨arden v som ing˚
ar i relationen, relationen
ocks˚
a inneh˚
aller (v, v). Ett uppenbart exempel ¨ar att < inte ¨ar reflexiv eftersom t.ex.
1 6< 1, men ≤ ¨
ar eftersom 1 ≤ 1.
Irreflexiv En relation ¨
ar irreflexiv om inga par (v, v) ing˚
ar i den. Ett uppenbart exempel
ar att < ¨
ar irreflexiv eftersom varken 1 < 1, 2 < 2 eller 3 < 3 g¨aller.
¨
Symmetrisk En relation ¨
ar symmetrisk om det f¨or varje par (v1 , v2 ) i relationen finns ett
par (v2 , v1 ). Ett exempel p˚
a en s˚
adan relation ¨ar t.ex. relationen ”¨ar kollega med.” Om
Tobias ¨
ar kollega med Henrik g¨aller autmatisk det omv¨anda, t.ex. Henrik ¨ar kollega
med Tobias. Relationen Ӭ
ar kollega med” ¨ar s˚
aledes symmetrisk.
3 of 6
Introduktion till datavetenskap
HT 2009
F¨
orel¨
asningsanteckningar S6 – Grafteori
Transitivitet En relation ¨
ar transitiv om (v1 , v2 ) ∈ R och (v2 , v3 ) ∈ R automatiskt medf¨or
att (v1 , v3 ) ∈ R. Exempel p˚
a en transitiv relation ¨ar b˚
ade < och ”chef f¨or”: om 1 < 2
och 2 < 3 s˚
a medf¨
or det att 1 < 3; om Mats ¨ar Tobias chef och Love ¨ar Mats chef s˚
a
f¨
oljer det naturligt att Love ¨aven ¨ar chef f¨or Tobias.
5
Grafer (till slut)
En graf best˚
ar av en eller flera noder (¨aven kallade punkter) sammanbundna av 0 eller flera
b˚
agar (¨
aven kallade kanter). I vissa grafer ¨ar b˚
agarna riktade (d.v.s. g˚
ar bara p˚
a ena h˚
allet)
och i andra grafer leder de ˚
at b¨
agge h˚
all. N¨ar man ritar en riktad graf s¨atter man ut pilar
p˚
a b˚
agarna i det h˚
all de leder. Graferna nedanf¨or h¨ar ¨ar inte riktade2 .
n1
n2
n1
n4
n2
n3
n3
n4
Med ovanst˚
aende kunskaper ¨
ar det nu mycket l¨att att matematiskt beskriva vad en graf
ar. L˚
at relationen R vara ”har en b˚
age till” och l˚
at v¨ardena i paren vara noder. D˚
a kan vi
¨
beteckna grafen ovan enligt f¨
oljande:
{ (n1 , n2 ), (n2 , n1 ), (n2 , n3 ), (n3 , n2 ), (n2 , n4 ), (n4 , n2 ), (n3 , n4 ), (n4 , n3 ) }.
Om tv˚
a noder n1 och n2 ing˚
ar i ett par, vilket ju ¨ar fallet ovan, s˚
a s¨ager man att noderna
ar sammanbundna med en b˚
age. Varje element (d.v.s. varje par) i relationen utg¨or en riktad
¨
b˚
age. F¨
oljaktligen ¨
ar (n1 , n2 ) en riktad b˚
age fr˚
an noden n1 till noden n2 . Tillsammans bildar
paren (n1 , n2 ) och (n2 , n1 ) en (vanlig, dubbelriktad) b˚
age mellan noderna n1 och n2 .
Tv˚
a noder ¨
ar angr¨
ansande om de ¨ar sammankopplade med en b˚
age.
Grafens ordning ¨
ar antalet h¨
orn och grafens storlek ¨ar antalet kanter.
Riktade grafer kan anv¨
andas f¨
or att modellera system d¨ar v¨agar inte n¨odv¨andigtvis ¨ar
dubbelriktade, t.ex. ett gatun¨
at i en stad. Nedanst˚
aende riktade grafer kan beskrivas enligt
f¨
oljande
n1
n2
n1
n4
n2
n3
2 Graferna
n4
n3
ar dessutom isomorfa, d.v.s., de ¨
ar samma graf, bara avbildade olika.
¨
4 of 6
Introduktion till datavetenskap
HT 2009
la
al
Ak
y
sb
Hu
2
K
2
4
F¨
orel¨
asningsanteckningar S6 – Grafteori
n
ge
er
b
n
n
llo
se
m
ro
Ha
k
ru
c
nt
Nä
n
ce
2
ge
a
ln
ko
s
o
2
S
n
a
ge
st
ha
n
n
2
Vä
s
la
la
ad
n
sp
sp
k
St
la
i
m
2
r
np
he
E
e
d
t
i
d
S:
O
Fr
1
a
ist
1
1
1
1
2
Rådhuset
1
1
1
1
1
Rådmansgatan
Hötorget
T-centralen
G:a Stan
Slussen
Medborgarplatsen
Figur 2: Viktad graf som modellerar delar av SL:s tunnelbanen¨at, med ungef¨arlig minuttid
f¨
or streckorna mellan stationerna. (Tiderna h¨ar ¨ar f¨or o¨vrigt bara ljug.)
kan beskrivas enligt f¨
oljande:
{ (n1 , n2 ), (n2 , n3 ), (n2 , n4 ), (n3 , n4 ), (n4 , n2 ) }.
respektive
{ (n1 , n2 ), (n2 , n3 ), (n2 , n4 ), (n3 , n4 ) }.
Den h¨
ogra grafen ¨
ar en s˚
a kallad riktad acyklisk graf. Det betyder att grafen inte innh˚
aller
cykler, d.v.s., om man g˚
ar igenom grafen kan man aldrig f¨olja en b˚
age och komma tillbaka
en nod som man redan har bes¨
okt3 . Det betyder t.ex. att man inte beh¨over oroa sig f¨or att
hamna i en o¨
andlig loop n¨
ar man f¨ors¨oker g˚
a igenom grafen.
6
Viktade grafer
Viktade grafer, ¨
aven kallade n¨
atverk, ¨ar grafer d¨ar varje b˚
age f¨orsetts med en vikt, normalt
ett decimaltal. Ponera att man vill representera Stockholms tunnelbanen¨at som en graf och
sedan vill anv¨
anda den f¨
or att r¨
akna ut tiden det tar att ˚
aka mellan tv˚
a h˚
allplatser. I en
vanlig graf kan man bara m¨
ata avst˚
andet i antalet noder (h˚
allplatser) som man passerar. Om
alla str¨
ackor i tunnelbanen¨
atet tar lika l˚
ang tid att ˚
aka, s¨ag 2 minuter, ¨ar detta en fullt duglig
3 Omv¨
ant kan man s¨
aga att en graf ¨
ar cyklisk om det finns en v¨
ag av minst 2 olika b˚
agar fr˚
an n˚
agon nod
tillbaka till sig sj¨
alv.
5 of 6
Introduktion till datavetenskap
HT 2009
F¨
orel¨
asningsanteckningar S6 – Grafteori
l¨
osning; r¨
akna fram antalet stationer p˚
a v¨agen mellan de tv˚
a punkterna och multiplicera
det med 2. Verkligheten som vi vill modellera ¨ar tyv¨arr i regel mer komplicerad.
Med en viktad graf kan vi f¨
orse varje b˚
age med den tid det tar i minuter att ˚
aka mellan tv˚
a
stationer. Figur 2 visar ett exempel f¨or en del av SL-kartan.
Om man nu vill r¨
akna ut tiden det tar att ˚
aka mellan, s¨ag Kista och Medborgarplatsen, kan
man bara traversera de tv˚
a m¨
ojliga v¨agarna (bl˚
a linje utan byte samt, bl˚
a linje med byte
till gr¨
on linje i Fridhemsplan, jag utesluter att man vill ˚
aka runt ett eller fler varv i den
bl˚
a-gr¨
ona cykeln) och f˚
a fram 19 respektive 21 minuter.
Ett annat exempel p˚
a en viktad graf a¨r t.ex. en graf som visar studenters v¨ag genom en
utbildning (varje nod a
a utg˚
aende b˚
agar betecknar ett kursval) d¨ar
¨r en kurs, fler a¨n tv˚
vikterna avser procentandelen av studenterna som g¨or just det valet.
Ytterligare ett exempel kan vara ett n¨atverk av personer d¨ar tv˚
a personer har en b˚
age
mellan sig om de k¨
anner varandra. En vikt kan i detta sammanhang vara ett v¨arde p˚
a hur
bra ¨overens man kommer, s¨
ag i intervallet −10 till 10. Utifr˚
an detta n¨atverk kan man sedan
r¨
akna ut om det ¨
ar b¨
ast att g˚
a p˚
a Stinas eller Kalles fest. (Hur?)
7
Dijkstras algoritm
Edsger Dijkstra var en mycket k¨
and och inflytelserik holl¨andsk datavetare. Dijkstras algoritm
formulerade han 1959 och a
r
en
algoritm f¨or att hitta den ”billigaste” v¨agen fr˚
an en nod till
¨
alla andra noder i en viktad riktad graf.4
Dijkstras algoritm kan enkelt beskrivas:
1. S¨
att kostnaden f¨
or startnoden till 0 och kostnaden f¨or o¨vriga noder till ∞5 . Startnoden
ar ”aktuell nod.”
¨
2. Fr˚
an aktuell nod, r¨
akna ut avst˚
aendet till alla angr¨ansande noder som ¨annu inte ”avklarats” genom att ta kostnaden f¨or den aktuella noden plus kostanden p˚
a b˚
agen till
den angr¨
ansande noden. Om den framr¨aknade kostnaden ¨ar mindre ¨an den nuvarande,
uppdatera dess v¨
arde till den nya framr¨aknade.
3. N¨
ar du har gjort f¨
oreg˚
aende ber¨akning f¨or alla angr¨ansande noder skall du markera
aktuell nod som avklarad. En s˚
adan nod kommer vi aldrig att titta p˚
a igen. Vi vet
redan dess minimala kostnad, d.v.s., det minimala avst˚
andet fr˚
an startnoden till den.
4. Ny aktuell nod ¨
ar den obes¨okta nod som ligger n¨armast startnoden. Forts¨att fr˚
an
punkt 2. Om alla noder ¨
ar markerade som avklarade ¨ar algoritmen klar.
8
Tentan
Dijkstras algoritm tas upp p˚
a senare kurser. Du beh¨over inte kunna den p˚
a tentan. D¨aremot
beh¨
over du f¨
orst˚
a vad en graf ¨
ar, vad en modell ¨ar, etc. och varf¨or de ¨ar viktiga i ett datavetenskapligt sammanhang. Du beh¨over dock inte kunna f¨orklara dem p˚
a samma formella
s¨
att som presenterats h¨
ar.
4 Den intresserade studenten kan notera att f¨
or att Dijkstras algoritm skall fungera m˚
aste man ha positiva
b˚
agkostnader – varf¨
or?
5 Minns att ∞ betyder o¨
andligheten. M˚
anga programmeringsspr˚
ak kan inte uttrycka detta v¨
arde. D˚
a¨
ar
det bra att anv¨
anda ett annat v¨
arde f¨
or att representera o¨
andligheten, t.ex. −1 eftersom det inte ¨
ar en
m¨
ojlig strecka och f¨
oljaktligen inte kan r˚
aka komma upp naturligt i utr¨
akningen.
6 of 6