5.1 Grafrepresentasjon og grunnbegreper
Grafer som `G=(V,E)`, nabolister vs. nabomatrise, rettet/urettet, vektet/uvektet, inngrad/utgrad — og hvorfor representasjonsvalg påvirker kjøretid.
karakteren.
Grafrepresentasjon og traversering har vært på alle sju settene i arkivet
(7 av 7, altså 100 %). Ingen andre temaer i faget har en sikrere plass. Og
grafene dukker ikke bare opp som et tema blant flere: de er materialet
Del 2 er laget av — den delen av eksamen der du skal skrive pseudokode
og resonnere selv, og der karakteren i praksis avgjøres. Alt i
kap. 5.2 til kap. 5.5 hviler på
apparatet du bygger her.
Selve dette kapitlet testes to steder:
- På Del 1 — de mange små, automatisk rettede oppgavene — som
sjanger F: matrise- og tabellavkryssing, altså at du får noen grafer
og krysser av hvilke egenskaper hver av dem har. Er den sammenhengende?
Inneholder den en sykel? Er den et tre? Er den en enkel graf?
- Som kjøretidsfakta: hva koster det å spørre «finnes kanten mellom
og ?» i en nabomatrise, mot i en naboliste? Og hvor mye plass tar de to?
Én regel etableres her og gjelder resten av boka: i en Del 2-besvarelse
oppgir du hvilken representasjon du antar. Sensor binder seg ikke til
nabolister eller nabomatrise, men en besvarelse uten antagelsen mister
poeng — for da kan kjøretiden du oppgir, ikke kontrolleres mot algoritmen du
faktisk skrev.
Prioritet: høyeste. Dette er det kapitlet resten av Del 5 og hele Del 6
står på.
Slik er kapitlet lagt opp (45 min): fire løkker med hvert sitt
tidsanslag, og pausepunkter underveis.
Forkunnskaper
- kap. 1.2 — løkketelling. Alle kjøretidene i dette
kapitlet leses ut av hvor mange celler eller listeoppføringer en løkke må
innom.
- kap. 1.1 — -notasjon. Det nye her er at kjøretiden
avhenger av to størrelser samtidig, antall noder og antall kanter, og
ikke av én enkelt . Uttrykk som er derfor helt vanlige
fra nå av.
Er det lenge siden du har sett objekter eller mengder, hjelper disse to:
- Klasser og objekter: class, __init__ og self —
en node som et objekt med felter. Boka skriver v.naboer og senere
v.visited, og det er nøyaktig den tenkemåten.
- Mengdelære — mengdenotasjonen bak . Helt
valgfritt: du trenger bare å vite at og er to samlinger av ting.
Løkke 1 — grafen som modell (ca. 10 min)
Fibernettet i en liten kommune består av fem koblingsskap, og mellom noen av
dem er det gravd ned en kabel. Spørsmålet driftsvakta stiller klokka tre om
natta, er enkelt: finnes det i det hele tatt en vei fra skap A til skap E?
For å svare på det trenger hun ikke å vite hvor skapene står, hvor lang
kabelen er, eller hvem som gravde den ned. Hun trenger bare to ting: hvilke
skap finnes, og hvilke par av skap er koblet sammen.
Det som blir igjen når du stryker alt annet, er en graf. Grafen er ikke
et bilde — den er en liste over hva som henger sammen med hva. Tegningen er
bare en måte å se den på, og den samme grafen kan tegnes på uendelig mange
måter uten å bli en annen graf.
Et par , der er en mengde noder og er en mengde
kanter. Hver kant forbinder to noder.
Grafens to størrelser er (antall noder) og (antall kanter), og
alle kjøretider for grafalgoritmer oppgis i begge — for eksempel
. Å oppgi en grafkjøretid som «» uten å si hva er,
er en fast trekkgrunn.
En graf der kantene ikke har retning: kanten er den samme som
, og du kan gå begge veier.
Fibernett, veinett uten enveiskjøring og vennelister er urettede. I en
naboliste betyr det at hver kant står to ganger — én gang under hver av
de to endene.
En graf der hver kant har en retning: går fra til , og sier
ingenting om veien tilbake.
Lenker mellom nettsider, avhengigheter mellom programvarepakker og
enveiskjørte gater er rettede. Her deles graden i inngrad og utgrad,
og en naboliste inneholder hver kant nøyaktig én gang.
En graf der hver kant i tillegg har et tall — en vekt — som kan bety
avstand, reisetid, kostnad eller kapasitet.
En uvektet graf er en der alle kanter teller likt. Skillet er avgjørende for
hvilken algoritme som er riktig: i en uvektet graf finner en enkel
traversering korteste vei målt i antall kanter, mens vektede grafer krever
andre verktøy (de kommer i Del 6). Alle grafene i Del 5 er uvektede.
En graf uten løkker (en kant fra en node til seg selv) og uten
parallelle kanter (to eller flere kanter mellom det samme nodeparet).
Nesten alt du møter på eksamen er enkelt, og det er derfor grensen
gjelder. Merk at «enkel» ikke sier
noe som helst om grafen er sammenhengende, eller om den har sykler — det er
tre uavhengige spørsmål, og en avkryssingsoppgave spør gjerne om alle tre på
samme graf.
Seks værstasjoner i en fjellkommune er koblet sammen med radiolinjer.
Stasjon A når B og C. Stasjon B når i tillegg D og E. Stasjon C når i
tillegg F. Ingen andre par kan snakke direkte sammen, og alle linjene
virker begge veier.
Skriv opp , , og , sett opp nabolistene, og regn ut graden
til hver stasjon.
Kantene — hver linje nevnes én gang, uten retning:
, altså .
Nabolistene. Fordi grafen er urettet, står hver linje under begge
endene sine:
A: B, C
B: A, D, E
C: A, F
D: B
E: B
F: CVi kaller denne grafen U5 og kommer tilbake til den flere ganger i
kapitlet.
Gradene:
| Node | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 2 | 3 | 2 | 1 | 1 | 1 |
Kontrollregningen som alltid lønner seg: gradsummen er
, og . Stemmer.
Legg merke til at nabolistene har 10 oppføringer for 5 kanter. Det
er ikke sløsing — det er hele poenget med en urettet naboliste, og det er
grunnen til at plassforbruket skrives og ikke : du
trenger én listeoverskrift per node i tillegg, også for noder uten naboer.
Fellenote. Fella her er å telle hver kant to ganger og få .
Antall kanter er antall linjer, ikke antall listeoppføringer.
(Innstegsoppgave, sjanger F — matrise- og tabellavkryssing, altså at du fyller
ut en tabell med grafens egenskaper.) Et vannverk har åtte pumpestasjoner
koblet med rør. Nabolistene er:
A: B, C
B: A, D
C: A, D, E
D: B, C, F
E: C, F
F: D, E, G
G: F, H
H: Ga) Hvor mange noder og hvor mange kanter har grafen?
b) Sett opp graden til hver node.
c) Kontrollér svaret ditt med gradsummen.
Løkke 2 — grad, sti, sykel, sammenheng (ca. 12 min)
— naturlig pausepunkt —
Nå kommer de fire begrepene som avkryssingsoppgavene er bygget av. De er
lette å forstå og lette å blande sammen under tidspress, og det er nettopp
derfor de spørres om.
Tenk igjen på fibernettet. Driftsvakta har egentlig tre ulike spørsmål:
1. Kommer jeg fram? Det handler om sti og om grafen er
sammenhengende.
2. Finnes det en omvei jeg kan bruke hvis en kabel ryker? Det handler om
sykel.
3. Hvor mange kabler har jeg egentlig råd til? Det handler om grad og
om nettet er et tre.
Legg merke til at et nett uten sykler er det billigste som fortsatt henger
sammen — og samtidig det mest sårbare, siden hver eneste kabel er kritisk.
Det er hele forskjellen på et tre og en graf med sykler, sagt på
driftsvaktas språk.
Antall kanter som møter en node, skrevet . I en naboliste er
det ganske enkelt lengden på nodens egen linje.
Gradsummen over alle noder er alltid i en urettet graf, fordi hver
kant har to ender. Bruk det som kontrollregning: får du en gradsum som er et
oddetall, har du telt feil.
I en rettet graf splittes graden i to: er antall
kanter som peker inn til , og er antall kanter som
peker ut fra .
Her er summen —
altså , ikke , fordi hver rettet kant bidrar med én inngrad og én
utgrad. Å bruke -regelen på en rettet graf er en klassisk bom. Inngrad
0 og utgrad 0 blir dessuten helt sentrale begreper i
kap. 5.4.
En rekke noder der hvert par etter hverandre er forbundet med en kant, og
ingen node gjentas. Lengden på stien er antall kanter i den, ikke antall
noder.
En sti fra til er svaret på «kommer jeg fram?». At det finnes en sti
sier ingenting om at den er kortest — å finne den korteste er en egen
oppgave, og verktøyet kommer i kap. 5.2.
En sti som starter og ender i samme node, og som ellers ikke gjentar noen
node. I en urettet graf krever en sykel minst tre kanter, siden det å gå fram
og tilbake over den samme kanten ikke teller.
En sykel betyr at det finnes minst to ulike veier mellom to av nodene — altså
en omvei. En graf uten sykler kalles asyklisk.
En urettet graf der det finnes en sti mellom hvert par av noder.
Er den ikke sammenhengende, deler den seg i flere biter. Merk at én eneste
node uten kanter er nok til å ødelegge sammenhengen: en graf med 500 noder
som alle henger sammen, pluss én ensom node, er ikke sammenhengende.
En maksimal bit av grafen der alle nodene kan nå hverandre. En
sammenhengende graf har nøyaktig én komponent; en graf med tre atskilte øyer
har tre.
En node helt uten kanter er en komponent for seg selv. Å telle
komponenter er en egen algoritmeoppgave, og den kommer i
kap. 5.3 — her skal du bare kunne se dem.
En urettet graf som er sammenhengende og uten sykler.
Kjennetegnet du kan regne på: et tre har nøyaktig kanter.
Begge kravene må være oppfylt — en graf med kanter som ikke henger
sammen, er ikke et tre. Legger du én kant til et tre, får du nøyaktig én
sykel; fjerner du én kant, faller treet i to komponenter.
til regnestykker i stedet for gjetting.
1. Gradsummen (urettet graf):
Grunnen i én setning: hver kant har to ender, og hver ende bidrar med 1 til
graden i sin node.
2. Trekjennetegnet: en urettet graf er et tre hvis og bare hvis den er
sammenhengende og .
Av det følger to snarveier du kan bruke direkte:
- Er grafen sammenhengende og , må den ha minst én sykel.
- Er , kan grafen umulig være sammenhengende.
Med en sammenhengende graf der har du nøyaktig én sykel: du har
lagt én kant til et tre.
Advarsel om retningen. Kantregelen alene beviser ingenting. En graf med
og kan være et tre, men den kan like gjerne bestå av en
trekant og en løsrevet kjede — da har den både sykel og flere komponenter.
Du må sjekke sammenhengen også.
Værstasjonsnettet fra eksempel 1 (kalt U5) får én ny radiolinje: mellom
E og F. Den nye grafen kaller vi U6.
Fyll ut avkryssingstabellen for begge: enkel graf? sammenhengende? har
sykel? er et tre? Begrunn hvert svar med tall der du kan.
A: B, C
B: A, D, E
C: A, F
D: B
E: B
F: CU6 — nabolistene, med kanten E-F lagt til under begge ender:
A: B, C
B: A, D, E
C: A, F
D: B
E: B, F
F: C, ERegnestykkene først. U5 har og ; U6 har og
. Gradsummene er 10 og 12, altså i begge tilfeller.
| Egenskap | U5 | U6 |
|---|---|---|
| Enkel graf? | ja | ja |
| Sammenhengende? | ja | ja |
| Har sykel? | nei | ja |
| Er et tre? | ja | nei |
| mot |
Hvorfor U5 er et tre. Den er sammenhengende — fra A når du B og C, fra
B når du D og E, fra C når du F — og . Begge kravene er
oppfylt.
Hvorfor U6 ikke er det. Den er fortsatt sammenhengende og fortsatt
enkel, men nå er . Etter trekjennetegnet må den da ha
minst én sykel, og du kan peke på den: A -> B -> E -> F -> C -> A, en
sykel med fem kanter.
Legg merke til hva som IKKE endret seg. Grafen ble ikke mindre enkel og
ikke mindre sammenhengende. De fire spørsmålene i tabellen er uavhengige,
og en avkryssingsoppgave utnytter nettopp det: den gir deg grafer der bare
én av kolonnene skifter verdi.
Fellenote. Fella her er å kalle U6 et tre fordi «den ser ut som et tre
med en ekstra strek». Et tre har ingen sykler — én ekstra kant er nok
til å ødelegge det.
Sju maskiner i et verksted er koblet i et internt nettverk:
A: B, C
B: A, C
C: A, B
D: E
E: D, F
F: E
G: (ingen)a) Hvor mange kanter har grafen?
b) Er den sammenhengende? Begrunn.
c) Har den en sykel? Hvis ja, skriv den opp.
d) Er den et tre?
Seks rundkjøringer i en bydel er forbundet med veier, alle
toveiskjørte:
A: B, D, E
B: A, C, F
C: B, D
D: A, C
E: A, F
F: B, Ea) Oppgi , og gradsummen, og kontrollér at de henger sammen.
b) Hvor mange kanter måtte grafen hatt for å være et tre, og hvor mange
har den?
c) Finn to ulike sykler i grafen.
d) Er grafen enkel?
Løkke 3 — naboliste eller nabomatrise (ca. 13 min)
Så langt har vi tegnet og fortalt. Nå skal grafen inn i en maskin, og da må
den lagres på en bestemt måte. Det finnes to måter du må kunne, og valget
mellom dem er et av de sikreste Del 1-punktene i hele faget.
Naboliste: for hver node lagrer du en liste over naboene dens. Det er
nøyaktig formen vi har brukt hele veien.
Nabomatrise: du lagrer en tabell med én rad og én kolonne per node, og
setter 1 i celle hvis kanten finnes, ellers 0.
De to inneholder den samme grafen. Forskjellen er hva som er billig.
Grafen lagret som én liste per node, med nodens naboer i.
Plass: — én listeoverskrift per node, pluss én oppføring
per kantende (i en urettet graf står hver kant to ganger, men er
fortsatt ).
Ramse opp naboene til v: — du leser bare nodens
egen linje.
Spørre om kanten (u, v) finnes: — du må lete
gjennom linja.
Dette er standardvalget i IN2010, og grunnen til at grafkjøretider skrives
.
Grafen lagret som en tabell med rader og kolonner, der
hvis kanten finnes og 0 ellers. I en urettet graf er tabellen
speilsymmetrisk om diagonalen.
Plass: — uansett hvor få kanter grafen har.
Spørre om kanten (u, v) finnes: — ett direkte oppslag.
Ramse opp naboene til v: — du må lese hele raden, også de
nullene som ikke er naboer.
Lønner seg når grafen er tett (nesten alle mulige kanter finnes) og
algoritmen stiller mange kantspørsmål.
Denne tabellen er ren puggeflate. Den er blitt spurt om i tabellform på
eksamen, og den skal kunne skrives ned uten oppslag.
| Operasjon | Naboliste | Nabomatrise |
|---|---|---|
| Plass | ||
| Finnes kanten ? | ||
| Ramse opp naboene til | ||
| Legg til en kant | ||
| Gå gjennom hele grafen |
Den siste linja er den viktigste, og den er lett å bomme på. Å gå gjennom
hele grafen fra nabolister koster — ikke . Leddet
er der fordi du må innom hver node, også de som ikke har en eneste
nabo. Grafen U2 i oppgave 2 har en node uten kanter; den ville vært usynlig
i et rent kantregnskap. Dette leddet er kjernen i felle #6, som du møter
igjen for fullt i kap. 5.2.
Tommelfingerregelen: velg naboliste med mindre grafen er tett eller
algoritmen din i hovedsak stiller kantspørsmål. Med noder er
en nabomatrise 100 millioner celler, mens nabolistene tar plass i takt med
antall kanter som faktisk finnes.
Ni fuktsensorer i et veksthus står i et rutenett, og hver sensor har en
kabel til naboen rett ved siden av og rett over eller under. Grafen kaller
vi U8.
Skriv opp både naboliste og nabomatrise, regn ut hva hver representasjon
koster i plass, og avgjør hvilken du ville valgt.
A: B, D
B: A, C, E
C: B, F
D: A, E, G
E: B, D, F, H
F: C, E, I
G: D, H
H: E, G, I
I: F, HNabomatrisen:
A B C D E F G H I
A 0 1 0 1 0 0 0 0 0
B 1 0 1 0 1 0 0 0 0
C 0 1 0 0 0 1 0 0 0
D 1 0 0 0 1 0 1 0 0
E 0 1 0 1 0 1 0 1 0
F 0 0 1 0 1 0 0 0 1
G 0 0 0 1 0 0 0 1 0
H 0 0 0 0 1 0 1 0 1
I 0 0 0 0 0 1 0 1 0Tallene. og . Gradsummen er
. Stemmer.
| Mål | Naboliste | Nabomatrise |
|---|---|---|
| Lagrede tall | 24 naboangivelser + 9 listehoder | celler |
| Andel som er «ingen kant» | ingen | nuller, altså 70 % |
| Finnes kanten ? | les A-linja: 2 navn, ikke der | slå opp celle : 0 |
| Naboene til E | les E-linja: 4 navn | les hele E-raden: 9 celler, finn 4 ettall |
Valget: naboliste. Grafen er tynn — hver sensor har høyst fire
naboer uansett hvor stort veksthuset blir, mens matrisen vokser med
kvadratet av antall sensorer. Med 900 sensorer i stedet for 9 ville
matrisen hatt 810 000 celler, hvorav under 0,5 % ville vært ettall.
Når ville svaret vært motsatt? Hvis algoritmen din i hovedsak spør
«finnes akkurat denne kanten?» mange millioner ganger, og grafen er liten
eller tett. Da er -oppslaget verdt kvadratet.
Fellenote. Fella her er å blande de to kolonnene i kostnadstabellen —
å svare for kantoppslag i en naboliste, eller
for plassen til en nabomatrise. Lær tabellen som to par: matrisen er
«dyr plass, billig kantoppslag», lista er «billig plass, dyrt
kantoppslag».
Verkstednettet U2 fra oppgave 2 har nabolistene
A: B, C
B: A, C
C: A, B
D: E
E: D, F
F: E
G: (ingen)a) Skriv opp nabomatrisen.
b) Hvor mange celler har matrisen, og hvor mange av dem er ettall?
c) Hvor mange oppføringer har nabolistene til sammen?
d) Hvilken representasjon ville du valgt, og hvorfor?
En sosial tjeneste lagrer vennskap mellom brukere som en urettet
graf. Det er 200 000 brukere, og hver bruker har i snitt 30 venner.
a) Omtrent hvor mange kanter har grafen?
b) Hvor mange celler ville en nabomatrise hatt?
c) Hvilken representasjon må velges, og hva mister du på valget?
d) Tjenesten skal svare på «er A og B venner?» og på «hvem er vennene til
A?». Hvilken av de to spørsmålene blir dyrere med valget ditt?
Løkke 4 — regelen som gjelder resten av boka (ca. 10 min)
— naturlig pausepunkt —
Nå kommer den ene setningen fra dette kapitlet som du skal skrive ned på
eksamen, i hver eneste Del 2-oppgave om grafer resten av livet ditt som
IN2010-student.
Når du blir bedt om å skrive en grafalgoritme, får du sjelden vite hvordan
grafen er lagret. Det er ikke en forglemmelse fra oppgavestillerens side — du
får velge selv. Men da må du si hva du valgte, for kjøretiden din henger
helt og holdent på det valget.
Skriver du «» uten å ha sagt at du antar nabolister, har du
oppgitt et tall sensor ikke kan kontrollere: med nabomatrise ville den samme
algoritmen vært .
I en Del 2-besvarelse skriver du hvilken representasjon du antar, og
hvilke felter en node har. En typisk formulering er: «Grafen er gitt som
nabolister; hver node v har feltet v.naboer.»
Sensor binder seg ikke til én representasjon — nabolister, nabomatrise og
objektstil godtas alle. Men uten antagelsen kan ikke kjøretiden din
kontrolleres mot algoritmen, og det trekkes. Regelen koster deg én linje og
er blant de billigste poengene i hele Del 2.
Fire grafer er gitt ved nabolistene sine. Kryss av for hver: er den enkel?
er den sammenhengende? har den en sykel? er den et tre?
U1: A: B, C | B: A, D | C: A, D, E | D: B, C, F | E: C, F | F: D, E, G | G: F, H | H: G
U5: A: B, C | B: A, D, E | C: A, F | D: B | E: B | F: C
U6: A: B, C | B: A, D, E | C: A, F | D: B | E: B, F | F: C, E
U9: A: B, D, E | B: A, C, F | C: B, D | D: A, C | E: A, F | F: B, Etegninger:
1. Tell (antall linjer) og (gradsummen delt på 2).
2. Sammenlign med .
3. Sjekk sammenhengen ved å følge naboene fra første node.
4. «Enkel?» leses direkte: står noen node som sin egen nabo, eller står et
navn to ganger på samme linje?
| Graf | Enkel? | Sammenhengende? | Har sykel? | Er et tre? | |||
|---|---|---|---|---|---|---|---|
| U1 | 8 | 9 | 7 | ja | ja | ja | nei |
| U5 | 6 | 5 | 5 | ja | ja | nei | ja |
| U6 | 6 | 6 | 5 | ja | ja | ja | nei |
| U9 | 6 | 7 | 5 | ja | ja | ja | nei |
Begrunnelsene, én linje hver:
- U1: , og grafen er sammenhengende, så den må
ha sykel. En av dem er A -> B -> D -> C -> A.
- U5: og sammenhengende. Begge trekravene er
oppfylt — dette er det eneste treet i settet.
- U6: akkurat U5 med kanten E-F i tillegg. Én kant over
tregrensen betyr nøyaktig én sykel: A -> B -> E -> F -> C -> A.
- U9: , altså to over tregrensen, og grafen henger sammen —
minst to sykler, blant andre A -> B -> C -> D -> A.
Legg merke til hvordan tabellen er bygget. Alle fire grafene er enkle
og sammenhengende; det er bare de to siste kolonnene som skiller dem. En
avkryssingsoppgave er laget nettopp slik, og den belønner den som regner
på mot framfor den som ser på tegningen og gjetter.
Fellenote. Fella her er felle #10 i bokas feilregister — å svare
uten å ha definert hva størrelsene er. Skriv opp og for hver
graf før du krysser av, så blir tre av de fire kolonnene mekaniske.
Fyll ut den samme avkryssingstabellen for disse to
grafene:
U2: A: B, C | B: A, C | C: A, B | D: E | E: D, F | F: E | G: (ingen)
U8: A: B, D | B: A, C, E | C: B, F | D: A, E, G | E: B, D, F, H | F: C, E, I | G: D, H | H: E, G, I | I: F, HFor hver graf: , , enkel?, sammenhengende?, har sykel?, er et tre?
Begrunn kolonnene «har sykel» og «er et tre» med tall.
Et logistikkselskap modellerer
veinettet mellom 50 000 terminaler. Hver terminal har direkte vei til høyst
seks andre. To ulike programmer skal skrives:
Program 1 spør, milliarder av ganger, «finnes det direkte vei mellom terminal
og terminal ?». Program 2 går gjennom hele nettet én gang og gjør noe
med hver vei.
a) Anslå .
b) Hva koster de to programmene med naboliste, og hva koster de med
nabomatrise?
c) Hva ville du valgt, og hvordan ville du formulert antagelsen i en
besvarelse?
d) Finnes det en løsning som gir begge programmene det de vil ha?
- Å blande de to kolonnene i kostnadstabellen. Nabomatrisen er «dyr
plass, billig kantoppslag»; nabolista er «billig plass, dyrt kantoppslag».
Feilen er å svare for kantoppslag i en naboliste, eller
for plassen til en matrise. Kontrollen: en matrise har
alltid celler, uansett hvor få kanter grafen har.
- Å glemme -leddet. Å gå gjennom hele grafen koster
, ikke — du må innom hver node, også de uten
naboer. Dette er kimen til felle #6 i bokas feilregister, som handler om
å forveksle en traversering fra én node med en traversering av hele grafen.
Den kommer for fullt i kap. 5.2, men rota er her.
- Å bruke gradsummen på en rettet graf. Der er summen av alle
inngrader , og summen av alle utgrader . Bare i urettede grafer
er gradsummen .
- Å kalle en graf med sykel et tre. Et tre må oppfylle begge kravene:
sammenhengende og uten sykel, som til sammen er det samme som
sammenhengende og . Kantregnestykket alene holder ikke —
en trekant pluss en løsrevet kjede kan ha akkurat kanter og
likevel ha både sykel og flere komponenter.
- Å overse den ensomme noden. Én node uten kanter gjør grafen
usammenhengende, og den er usynlig hvis du bare teller kanter.
- Å ikke oppgi antatt representasjon i en Del 2-besvarelse. Kjøretiden
din kan da ikke kontrolleres, og det trekkes. Én linje koster det.
Og den gjennomgående: å skrive «» om en grafalgoritme uten å si hva
er. Grafer har to størrelser. Bruk og , og definér dem. Å
bruke udefinert er felle #10 i feilregisteret, og trekket er
eksplisitt.
Avgjør om hver påstand er sann eller usann, og
begrunn med ett regnestykke eller ett moteksempel. Svarene skal ikke være
like — les hver påstand for seg.
a) En sammenhengende urettet graf med og er et tre.
b) En urettet graf med og er et tre.
c) En enkel urettet graf med kan ha 16 kanter.
d) I en urettet graf kan gradsummen være 15.
e) Å gå gjennom hele en graf lagret som nabolister koster .
Begrepsbank
Begrepsbanken er flashcard-/repetisjonsstoff — den gjentar det du nettopp har
lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder
kjernestoffet.
I en urettet graf er .
Navnet kommer av at antall håndtrykk i et rom alltid telles dobbelt hvis du
spør hver person hvor mange hender de tok. Konsekvensene du bruker på
eksamen: gradsummen er alltid et partall, og finnes ved å dele den på
2. I en rettet graf gjelder i stedet
.
nodepar kan ha høyst én kant.
For gir det 15 kanter; for gir det 45. En graf som
nærmer seg denne grensen kalles tett, og da — og først da — kan
nabomatrisen forsvares på plass. I en rettet enkel graf er grensen det
dobbelte, .
En graf er tett når er i nærheten av , og tynn når
er nærmere .
Nesten alle grafer i praksis er tynne: veinett, vennelister, lenkegrafer og
avhengighetsgrafer har alle en grad som er begrenset uansett hvor store de
blir. Det er hovedgrunnen til at naboliste er standardvalget, og til at
er den kjøretiden du sikter mot.
Spørsmålet «går det en kant mellom disse to nodene?».
Nabomatrise: — ett direkte oppslag i celle .
Naboliste: — du må lete gjennom u-linja.
Dette er den ene operasjonen matrisen vinner klart på, og derfor det ene
argumentet for å velge den.
Å ramse opp alle nodene som deler en kant med v. Dette er den operasjonen
alle grafalgoritmer i faget bruker mest.
Naboliste: — du leser bare nodens egen linje.
Nabomatrise: — du må lese hele raden, også alle nullene.
Summert over alle noder blir det for nabolisten og
for matrisen. Det er nøyaktig derfor kjøretidene i resten av Del 5 skrives
, og hvorfor de blir hvis du antar nabomatrise.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Universitetet i Oslo. Dette er ikke offisielt studiemateriell. Les mer.