Algoritmer för grafritning Jesper Tunér

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.