Ö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.
© Copyright 2024