Kapitel 17

Övningar till kapitel 17
Ingen av operationerna har Båge som värdetyp. Neighbours skulle lika väl kunna definieras så att den ger en
mängd av bågar som värde. För vissa grafvarianter, där en båge inte enbart representerar att noderna i de två
ändpunkterna är relaterade, är detta nödvändigt för att ge en algoritmfullständig gränsyta.
övn 1
Varför?
Vi har valt att specificera en navigeringsorienterad gränsyta till Graf:
abstract datatype
Empty
Insert-node
Insert-edge
Isempty
Has-no-edges
Choose-node
Neighbours
Delete-node
Delete-edge
Graph (node, edge)
( ) → Graph (node, edge)
(v : node, g : Graph (node, edge)) →
(e : edge, g : Graph (node, edge)) →
(g : Graph (node, edge)) → Bool
(g : Graph (node, edge)) → Bool
(g : Graph (node, edge)) → node
(v : node, g : Graph (node, edge)) →
(v : node, g : Graph (node, edge)) →
(e : edge, g : Graph (node, edge)) →
Graph (node, edge)
Graph (node, edge)
Set (node)
Graph (node, edge)
Graph (node, edge)
Informell funktionsspecifikation av Graf
Konstruktorer
Empty – konstruerar en tom graf utan noder och bågar.
Insert-node (v, g) – sätter in noden v i grafen g.
Insert-edge (e, g) – sätter in en båge e i grafen g. Det förutsätts att noderna som anges ingår i grafen.
Inspektorer
Isempty (g) – testar om grafen g är tom, dvs. saknar noder.
Has-no-edges (g) – testar om grafen g saknar bågar.
Choose-node (g) – väljer ut en nod ur g.
Neighbours (v, g) – mängden av noder som är andra-element i en båge i g där v är första-element.
Modifikatorer
Delete-node (v, g) – tar bort noden v ur grafen g, förutsatt att v inte ingår i någon båge.
Delete-edge (e, g) – tar bort bågen e ur grafen g.
övn 2
Föreslå en gränsyta för den mängdorienterade specifikationen.
övn 3
Utveckla diskussionen om datatypen Urgraf och skissera en informell specifikation av datatypen.
övn 4
Generalisera ovanstående sats till A k, k ≥ 1. Vad innebär detta specifikt om k = n - 1, där n är antalet noder i
grafen? Jämför numerisk matris med sanningsvärd matris – hur ska de numeriska elementvärdena tolkas?
Graf kan likaså konstrueras som Lista av (grannskaps)lista, som Mängd av (grannskaps)mängder, och på diverse
olika sätt som n-Länkad struktur.
övn 5
Vilken är komplexiteten, relativt de konstruerande typerna, för gränsytans olika operationer i de olika
konstruktionerna ovan?
En algoritm för att bestämma ett minimalt uppspännande träd med roten i en viss nod r, bygger på att konstruera
trädet nivå för nivå, under en bredden-först-traversering av grafen.
ex Ett exempel på en sådan konstruktion visas i Figur 17.5. Man traverserar först alla bågar från roten (graf β),
och får på så sätt noderna på nästa nivå i det träd som konstrueras (a och b). Sedan går man i någon turordning igenom noderna på den nya nivån och traverserar bågarna från var och en av dessa noder – i vårt
exempel först nod a i graf γ, och sedan b i graf δ.
Vid graftraverseringar måste man hålla reda på vilka noder som besökts (i figuren markerade med fetare ringar).
Här måste man dessutom notera vilka bågar som blir grenar i trädet (markerade med fetare linjer). För att kunna
implementera algoritmen behöver man därför antingen separat bokföring för detta (jfr exemplet i avsnitt 8.3),
eller en utökad grafspecifikation med operationer som hanterar de signaler (fetare ringar och linjer) som används
i algoritmen.
Figur 17.5: En algoritm för bestämning av ett minimalt uppspännande träd.
övn 6
Genomför den modifierade grafspecifikationen och diskutera konsekvenserna för konstruktion av Graf som
Fält av lista.
övn 7
Formulera algoritmen.
övn 8
Utveckla detaljerna i hur valet huruvida bågen ska ingå eller ej ska göras och formulera algoritmen.
övn 9
Formulera Prims algoritm.
övn 10 Hur skulle detta kunna göras? Ledning: noder i samma färg hör till mängden av noder i den färgen.
övn 11 Formulera Kruskals algoritm.
övn 12 Exekvera algoritmen med en annan nodnumrering.
övn 13 Verifiera att cellerna för logiskt OCH, ICKE och ELLER, fungerar som de ska. Kombinera dem för att skapa ett
litet nät som beräknar (x ∧ y) ∨ z. Konstruera en cell som beräknar x ∨ y ∨ z, och en cell som beräknar x ∧ y ∧ z.
Kan man konstruera en cell som beräknar (x ∧ y) ∨ z ? (Ledning: låt z förgrena sig till 2 ingångar.)
övn 14 Bygg ett McCulloch-Pitts-nät som adderar två binära tal som kommer i serie (med minst signifikanta biten
först) via två parallella (och synkroniserade) inmatningskanaler.
övn 15 Formulera en algoritm för bakåtpropagering i ett framåtlänkat neuralt nät med ett gömt lager.
övn 16 Ett system för bokning av teaterbiljetter beskrivs i övning 24 i kapitel 9. Hur skulle informationen i detta
system kunna organiseras som ett semantiskt nätverk?
övn 17 Låt oss betrakta SAS inrikes flygtidtabell som en graf där informationen om flighter ligger i noder och bågar.
a) Diskutera huruvida en navigerings- eller mängdorienterad gränsyta för grafer passar bäst för en
administratör av tidtabellen, respektive en resenär.
b) Vilken information behöver lagras i varje nod? Behöver man lagra information även i bågarna?
övn 18 I samband med flödesproblem är man intresserad av att numrera noderna i en acyklisk graf på sådant sätt att
om det finns en väg från nod a till b så ges nod a ett lägre nummer än nod b. En enkel algoritm är att numrera
de noder som har ingradtal 0 – därefter tar man bort dem ur grafen och upprepar manövern. Givet att det
finns en operation In-degree i datatypen - konstruera en algoritm som numrerar noderna på detta sätt.