Examensarbete i datavetenskap, naturvetenskapliga fakulteten, Lunds universitet Algoritmer för grafritning Jesper Tunér Grafer är allmänt förekommande inom datavetenskap för att representera information som kan modelleras som objekt (hos grafer kallat noder) och samband mellan dessa objekt (bågar). Grafer används inom en rad skilda områden, såsom World Wide Web, mjukvaruproduktion, databassystem, realtidssystem, Artificiell Intelligens och management. Allt oftare vill man visualisera dessa grafer på något sätt. Hur man gör detta behandlas i ämnet grafritning. Grafritning kan i korthet beskrivas som konsten att placera en grafs noder och bågar i planet på ett för ögat tilltalande sätt, så att grafens struktur är lätt att uppfatta. Hur man rent praktiskt går tillväga för att skapa en grafritning beskrivs med olika algoritmer, olika metoder, som beskriver hur en grafs noder och bågar ska placeras. Målet med detta arbete är att ge en introduktion till grafer och grafritning samt att implementera några olika typer av grafritningsalgoritmer. Jag tar i detta arbete upp tre olika typer; cirkulära, hierarkiska och kraftstyrda grafritningsalgoritmer, med fokus på den sistnämnda. Cirkulära grafritningsalgoritmer placerar noderna i en cirkel, hierarkiska grafritningsalgoritmer placerar noderna på olika lager eller nivåer och kraftstyrda grafritningsalgoritmer använder sig av analogier till fysiken för att rita ut graferna. Ofta tänker man sig ett system av krafter där noderna repellerar varandra och bågarna består av fjädrar som drar noderna till varandra. Dessa krafter får verka och når slutligen ett jämviktstillstånd, som sedan kan översättas till en grafritning. Några delproblem inom grafritning tillhör en speciell typ av problem som inom datalogin kallas NP-kompletta. Enkelt beskrivet betyder detta att en dator, om inte problemen är väldigt små, ofta inte kan lösa dessa problem optimalt, utan man får nöja sig med en lösning man finner tillräckligt bra. Hur denna lösning går till beskrivs i olika approximeringsalgoritmer. Vidare har jag förbättrat ett befintligt grafritarprogram där jag bland annat implementerat ett antal algoritmer, varav ett flertal är snabbare än den algoritm som ursprungligen användes. Slutligen görs även en analys av några av dessa algoritmer. Jag har funnit signifikanta skillnader mellan algoritmerna och därför föreslås några olika algoritmer att använda, beroende på grafens egenskaper. Swedish official title: Algoritmer för grafritning Swedish credits: 10p E-mail address of first author: [email protected] Supervisor: Thore Husfeldt, Dept of Computer Science Submission date/time: 2002-09-03 Examensarbete i datavetenskap, naturvetenskapliga fakulteten, Lunds universitet Graph Drawing Algorithms Jesper Tunér Computer Science, Combinatorial Optimisation, Graph Drawing Spring 2002 Abstract in English Graph drawing can be described as the art of placing the nodes, and edges, of a graph in a way that makes it´s drawing easy to follow. The purpose of this thesis is to give an introduction to the areas of graphs and graph drawings and implementing a few different types of graph drawing algorithms. The ones implemented are; circular, hierarchical and force-directed drawing algorithms, with a focus on the last ones. An improvement of an existing graph drawing program has been done by implementing several algorithms, of which a few are faster than the original algorithm being used. Finally a comparison between a few different algorithms is conducted. Significant differences between the algorithms has been noted and suggestions for which algorithm to use, depending on the character of the graph, are given. Abstract in Swedish Algoritmer för grafritning Grafritning kan i korthet beskrivas som konsten att placera en grafs noder och bågar i planet på ett för ögat tilltalande sätt. Målet med detta arbete är att ge en introduktion till grafer och grafritning samt att implementera några olika typer av grafritningsalgoritmer. Jag tar i detta arbete upp tre olika typer; cirkulära, hierarkiska och kraftstyrda grafritningsalgoritmer, med fokus på den sistnämnda. Vidare har jag förbättrat ett befintligt grafritarprogram där jag bland annat implementerat ett antal algoritmer, varav ett flertal är snabbare än den algoritm som ursprungligen användes. Slutligen görs en analys av några av dessa algoritmer. Jag har funnit signifikanta skillnader mellan algoritmerna och därför föreslås några olika algoritmer att använda, beroende på grafens egenskaper.