UMEÅ UNIVERSITET 26 april 2002 Instutionen för datavetenskap Grafproblem Laboration 4, Datastrukturer och Algoritmer VT02
Laboration 4 - grafproblem Förpackningsdatum: Denna lab-spec är senast ändrad: 2002-04-26. Bäst-före-datum: Labrapporten lämnas i röda postlådan märkt A-kursernas laborationer senast 08:00 den 29 maj. Grupparbete: Denna lab skall utföras i grupper om 4 personer, listor för gruppanmälan sitter på dörren till rum NADV103 (där David, Fredrik och Johan sitter). Bredband für alle! Inledning Det är valår och flera kommuner planerar att fiska röster genom att lova bredband fram till alla orter i kommunen. Även kommunalrådet i Umeå går i sådana tankar. Men oppositionen väntas passa på att bita ifrån ordentligt i den här frågan, varför det är extra viktigt att det trots allt blir så kostnadseffektivt som möjligt. Vi vill helst visa att Umeås bredbandsprojekt kostar mindre per skattebetalare än vad Ö-viks och Skellefteås utbyggnad kostar. Prognosmakarna har förutspått att det kommer att bli överhettning i både kabelgrävningsbranschen och bland fiberkabel-producenterna, så det är av yttersta vikt att man planerar kabeldragningarna på ett optimalt sätt. Konsultfirman FullKoll AB, där ni arbetar, har fått i uppdrag 1 att planera för hur orterna bör förbindas med varandra. Några av dina medarbetare har redan undersökt markförhållanden, arbets- och materialkostnader förknippade med att dra kabel mellan alla de olika byarna. Mellan två orter har man alltså redan räknat fram ett värde som representerar den totalkostnad som är förknippad med att dra fram en fiber mellan dem. Ditt uppdrag blir nu att bedöma vilka orter som skall ha direktförbindelse med vilka, så att alla orter får kontakt med varandra. I vanlig ordning så bekymrar det ingen att vissa byar kan få låg prestanda pga. strukturella brister. Det enda som räknas är att alla orter skall ha indirekt kontakt med varandra och att kostnaderna skall bli så låga som möjligt. Prestanda och redundans är irrelevant. Dina kollegor har försett dig med två textfiler. Den ena filen innehåller en lista på alla orter som ingår, och den andra filen är en kostnadsbeskrivning med alla tänkbara kabeldragningar mellan två orter och den kostnad som det skulle medföra. Indata Ortfilen är en textfil med lista av strängar: 1 Upphandlingen skedde i hård konkurrens med NollKoll AB, HalvKoll AB samt Lejsy & Gridy AB. Laboration 4 1 26 april 2002
Ersmark Flurkmark Innertavle Kostnadsfilen är en textfil med en tabseparerad lista av (sträng sträng heltal): Ersmark Flurkmark 120 Ersmark Innertavle 320 Utdata Ni ska skapa en applikation som heter Bredband som m.h.a. datastrukturer som ni själva skall skapa, löser problemet i enlighet med en lämplig algoritm. >java Bredband <ortfil> <kostnadsfil> Utdata från programmet skall vara ett heltal som motsvarar totalkostnaden att förbinda samtliga orter i kommunen: >java Bredband orter.txt kostnader.txt >23746 Lokala nätverk Alla är dock inte lika imponerade av politikernas löften om bredband. Missnöjet är särskilt stort i de byar som ligger lång ifrån Umeå, och därmed kommer att få en långsammare uppkoppling. Datorföreningen Karzanovs vänner i Flurkmark har bestämt sig för att ta saken i egna händer. Man har storstilade planer på att bygga sitt eget bredbandsnät, dit man tänker ladda ner en lokal kopia av internet. Tack vare en generös donation från firman HalvKoll AB äger föreningen numer en stor mängd datorer samt all nödvändig nätverksutrustning. Dessvärre har firma HalvKoll AB inte full koll på läget, vilket medför att utrustningen är av varierande prestanda och inte följde någon som helst standard. Den största begränsningen är att all nätverksutrustning är av typen kvarts-duplex, vilket innebär att det enbart går att överföra data i en riktning. Trots detta kopplar Karzanovs vänner ihop sitt nätverk, men man stöter på oväntade problem. Den ursprungliga tanken var att placera hela internet på samma dator men det visade sig att allt inte rymdes. För att råda bot på detta har man i stället spridit ut datat på olika datorer. Av rättviseskäl vill man att den totala bandbredd som förbinder alla par av datorer skall vara ungefär densamma. Laboration 4 2 26 april 2002
För tillfället håller föreningen på att experimentera lite med olika konfigurationer, och man undersöker hur snabbt data kan överföras från en dator till en annan. Din uppgift är att bestämma den maximala bandbredden mellan ett givet par av datorer. Observera att allt data inte behöver överföras via samma länk, datastömmen kan delas upp på olika fysiska förbindelser. Figur 1: Exempel på nätverk, alla hastigheter i Mbps Indata Indatat kommer att bestå av två filer, samt namn på de två datorer man vill veta överföringshastigheten mellan. Den första filen (datorfilen) innehåller alla datornamn: A B C Laboration 4 3 26 april 2002
Nästa fil är nätverksfilen som innehåller information om nätverkets konfiguration. Filen innehåller tre kolumner, dator1 dator2 hastighet, vilket betyder att data kan överföras mellan dator1 och dator2 med hastighet Mbps. Observera att detta inte innebär att dator2 kan sända data till dator1. Ett litet exempel: A B 10 B C 100 C A 10 I exemplet ovan kan A sända till B, men om B vill sända till A måste detta ske via C. Utdata Er applikation, som skall heta LAN, skall anropas enligt följande: >java LAN <datorfil> <nätverksfil> <dator1> <dator2> Exempel: >java LAN dator.txt natverk.txt A B > 140 I exemplet ovan är A och B två av datorerna i dator.txt. Det nätverk som kan konstrueras utifrån dator.txt och natverk.txt är samma som på bilden på föregående sida. Den totala överföringshastigheten mellan A och B är 130 Mbps. Ytterligare tips och info Lös problemen först, och implementera sedan. Fundera först över ifall det går att härleda problemen till något känt typproblem. Välj sedan en lämplig algoritm som löser problemet. För Bredband für alle får den valda algoritmen (i teorin) ej ha en komplexitet överstigande O(n log n), där n är antal rader i kostnadsfilen. Inga tidskomplexitetskrav ställs på algoritmen för uppgiften Lokala nätverk. Förklara i er rapport algoritmerna m.h.a. en algoritmbeskrivning, och försök göra en uppskattning av algoritmernas komplexitet med en kort resonerande text, där ni relaterar till olika delar av algoritmerna. Skapa lämpliga datatyper. De datatyper ni väljer att implementera måste i princip ha den standardiserade gränsyta som anges i kursboken. Om ni t.ex. implementerar en stack så skall ni implementera de funktioner som Laboration 4 4 26 april 2002
anges på sida 134 i kursboken 2. Om gränssnittet för en datatyp skulle vara väldigt omfattande, så tillåter vi att ni utelämnar en liten del av gränssnittet om den är helt irrelevant för den uppgift som skall utföras. Beskriv då i er rapport vilka funktioner ni utelämnat och motivera varför. Då många datatyper med fördel både kan användas i deluppgift 1 och deluppgift 2 är det bra att tänka efter lite extra innan man börjar skriva kod. Kom ihåg att konstruera klasser och interface i enlighet med de riktlinjer som ni har lärt er. Använd exceptions för felhantering. Lägg källkodsfilerna i anvnamn/edu/doa/lab4/ (i vanlig ordning), och sätt filrättigheterna korrekt ( t.ex. chmod 705). Observera att de körbara filerna skall heta Bredband respektive LAN. På denna laboration kommer särskilda krav att ställas på rapporten när det gäller såväl tekniskt innehåll som språkliga detaljer. För den som är ovan att skriva laborationsrapporten rekommenderas http://www.cs.umu.se/information/rapportguide.html där tips och råd finns. 2 Janlert, Wiberg. Datatyper och algoritmer. 2:a upplagan. Studentlitteratur, Lund, 2000. Laboration 4 5 26 april 2002