bild
Skolan för
elektroteknik
och datavetenskap

Uppgift 10 våren 2014

Uppgiften ska lämnas till din övningsledare på övningen den 18/4 16/4.

För godkänt måste du ha gjort samtliga deluppgifter. Det är tillåtet att göra enstaka fel och misstag men det är viktigt att du försöker lösa samtliga uppgifter.

Hemuppgift

Läs den här texten om grafer.

Skriftlig uppgift

Lämna in svar på följande uppgifter.

  • Rita en oriktad graf med 6 hörn, 10 kanter och 2 sammanhängande komponenter. Går det att rita en graf med 5 hörn, 4 kanter och 3 komponenter?
  • Låt G vara en oriktad graf som består av 8 hörn numrerade från 0 till 7 och kantmängden {(0,1), (0,3), (1,4), (2,2), (3,4), (3,5), (6,7)}.
    • Rita G.
    • Ange ordningen som hörnen besöks vid en djupetförstsökning (DFS) med start i hörn 0.
    • Ange ordningen som hörnen besöks vid en breddenförstsökning (BFS) med start i hörn 0.
    Du kan anta att grannarna till ett hörn besöks i nummerordning.
  • Skulle du representera en graf med hjälp av en närhetsmatris eller med hjälp av närhetslistor i följande fall? Motivera dina svar.
    • Grafen har 1000 hörn och 2000 kanter och det är viktigt att vara sparsam med minnet.
    • Grafen har 1000 hörn och 50000 kanter och det är viktigt att vara sparsam med minnet.
    • Det är viktigt att snabbt (på konstant tid) kunna avgöra om två hörn är grannar. Om möjligt vill du också vara sparsam med minnet.
  • Förklara varför DFS tar Θ(n2) tid för en sammanhängande graf med n hörn om grafen representeras med en närhetsmatris.

HashGraph

Bekanta dig med koden i Eclipse-projektet Graph.zip och gör sedan ytterligare en implementation av gränssnittet Graph. Din implementation ska använda närhetslistor implementerade med hjälp av hashtabeller. Datastrukturer och metodsignaturer är redan deklarerade i klassen HashGraph och testkod finns i klassen HashGraphTest. Du får inte ändra koden i gränssnitten Graph, VertexIterator eller VertexAction.

  • Lämna in den nyskrivna klassen HashGraph.

Eclipse-tips: Jag har bara hittat ett väl fungerande sätt att importera ett existerande projekt från en zip-fil. Välj alternativet "Import..." från fil-menyn, välj sedan "Existing Projects into Workspace", tryck på "Next >", välj "Select archive file" och tryck till slut på "Finish".

Komponenter i slumpgraf

Prova din nya grafklass genom att skriva ett program som bygger en graf med n noder och n slumpmässigt utplacerade kanter. Programmet ska med hjälp av djupetförstsökning beräkna antalet komponenter i grafen och storleken på den största komponentet.

  • Lämna in koden för detta program. (Du behöver naturligtvis inte lämna in de klasser och gränssnitt som redan finns färdiga.)
Prova hur snabbt ditt program blir för olika värden på n, n <= 5000, när man använder närhetsmatris respektive närhetslistor.
  • Ange antalet komponenter och den största komponentents storlek när n = 1000.
  • Vilken datastruktur är bäst i det här fallet? Varför? Förklara genom att beräkna tidskomplexiteten för DFS med närhetsmatris samt för DFS med närhetslistor.

Alternativ uppgift

Om du vill så kan du istället göra hela uppgiften i Go. Använd då kodskelettet graph_skeleton.zip. How to Write Go Code innehåller de instruktioner du behöver för att komma igång med att bygga och testa egna paket i Go.

Copyright © Sidansvarig: Stefan Nilsson <snilsson@nada.kth.se>
Uppdaterad 2014-04-15