Førsteårsprojekt F2008 Flere grafalgoritmer, og visualisering SØGES

Relaterede dokumenter
Førsteårsprojekt F2008. Nogle algoritmer på grafer

Førsteårsprojekt (FÅP) F2008 Veje, grafer, versionsstyring med CVS. Plan for førsteårsprojektet

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

DM507 Algoritmer og datastrukturer

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Grafer og graf-gennemløb

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Grafer og graf-gennemløb

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

DM507 Algoritmer og datastrukturer

Grafer og graf-gennemløb

Grafer og graf-gennemløb

Grafer og graf-gennemløb

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

Prioritetskøer og hobe. Philip Bille

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer.

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

Grafer / Otto Knudsen

Danmarks Tekniske Universitet

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Mindste udspændende træ

Introduktion til datastrukturer. Philip Bille

programmeringskonkurrencer implementation under tidspres

Løsning af møntproblemet

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Sammenhængskomponenter i grafer

Databaseadgang fra Java

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Skriftlig eksamen i Datalogi

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Grafer og grafalgoritmer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

Danmarks Tekniske Universitet

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Dynamisk programmering

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Dynamisk programmering

Vægtede grafer. I en vægtet graf har enhver kant tilknyttet en numerisk værdi, kaldet kantens vægt

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Sommeren 2001, opgave 1

Skriftlig eksamen i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

GOOGLE DOCS. Eksempel på instruktion til studerende der skal give feedback til medstuderende:

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Grafer og grafalgoritmer

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

Vejledende løsninger

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

CVS som KS-værktøj E Branching, Merging m.v.

Danmarks Tekniske Universitet

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Brugervejledning Joomla

DM507 Algoritmer og datastrukturer

Arbejde med 3D track motion

Danmarks Tekniske Universitet

Stakke, køer og lidt om hægtede lister

Videregående programmering i Java

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Datastrukturer (recap) Datastruktur = data + operationer herpå

Mindste udspændende træ

Eksempel på en database: studenter, kurser, eksamener

DM507 Algoritmer og datastrukturer

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Om binære søgetræer i Java

PHP kode til hjemmeside menu.

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Vejledning SC Per Dahl Johansen GEOTEAM A/S.

Udtømmende søgning 1

Brug af Office365 med Onedrive, nyeste Officepakke mv

Transkript:

Førsteårsprojekt F2008 Flere grafalgoritmer, og visualisering Peter Sestoft 2008-03-11* SØGES 1-2 studerende til Åbent Hus torsdag 10. april kl 1700-1800 Skal kunne fortælle 5-10 minutter om hvad hvordan det er at være bachelorstuderende på ITU svare på spørgsmål fra salen 1

I dag Deling af CVS-repository Opret Unix-gruppe: skriv til sysadm@itu.dk Opret fælles CVS-repository hos et gruppemedl. Korteste vej i en graf, Dijkstras algoritme Projekt: visualisering vejnet og ruter visning med farver mv. zoom scroll vejnavne Implementer visualisering afleveres 1. april kl 1200 Delt CVS repository CVS er essentielt for gruppearbejde Opret et fælles, delt CVS repository sådan: Send mail til sysadm@itu.dk om at I gerne vil have en Unix-gruppe Oplys: ønskede medlemmer (jeres brugernavne), og gruppens udløbsdato Opret et CVS repository i et gruppemedlems hjemmekatalog på ssh.itu.dk # mkdir faapcvs # chgrp -R f8grup1 faapcvs # chmod g+srwx faapcvs # cvs -d /import/home/sestoft/faapcvs init 2

Forklaring på besværgelserne # mkdir faapcvs # chgrp -R f8grup1 faapcvs # chmod g+srwx faapcvs Opret mappe Sæt mappens gruppe til f8grup1 Giv gruppen læseog skriveadgang, også til undermapper Giv gruppen læseog skriveadgang # cvs -d /import/home/sestoft/faapcvs init Hvordan benytte delt CVS? Repositoriet tilknyttes Eclipse som normalt Et gruppemedlem opretter et projekt fra Eclipse Alle andre gruppemedlemmer importerer det Når du skal redigere noget: Udfør Team > Update i Eclipse Lav dine ændringer Udfør Team > Commit i Eclipse Eller brug Team > Synchronize with repository 3

Algoritmer til korteste vej i graf Single source shortest path Givet en startknude s ( source ), find den korteste vej til alle andre knuder; eller til en bestemt knude t ( target ) Dijkstras algoritme, 1959 Virker når alle kantlængder >= 0 Hvis grafen er tynd (få kanter ift knuder) er det effektivt at bruge en prioritetskø Eksempel fra Goodrich & Tamassia fig 7.3-4 Goodrich&Tamassia Figure 7.3 4

Dijkstra pseudo-kode Sæt D[v]= for alle knuder undt. D[s]=0 Opret prioritetskø pq med D[v] som nøgle Så længe pq ikke-tom udtag fra pq en knude v med minimal nøgle for hver kant (v,w) ud fra v, hvis D[v] + len(v,w) < D[w], så sæt D[w] = D[v] + len(v,w) Når pq er tom så er D[t] = korteste afstand fra s til t Fandt en kortere vej fra s til w Faktisk gælder dette så snart t er blevet udtaget fra prioritetskøen Husk: breddeførst og dybdeførst Analogier: DFS: Vælg næste knude fra en stak BFS: Vælg næste knude fra en kø (og hold eventuelt regnskab med level) Dijkstra: Vælg næste knude fra en prioritetskø (og hold regnskab med afstand fra source) BFS finder korteste afstand, i antal kanter, fra source til andre knuder Dijkstra finder korteste afstand, i kantlængde, fra source til andre knuder 5

Dijkstras algoritme i Java Map<KrakNode,ILocator<KrakNode>> locators = new HashMap<KrakNode, ILocator<KrakNode>>(); IPriorityQueue<KrakNode> pq = new PriorityQueue<KrakNode>(); for (KrakNode node : graph.nodes) if (node!= null && node!= source) { Ilocator<KrakNode> loc = pq.insert(node,double.positive_infinity)); locators.put(node, loc); Ilocator<KrakNode> loc = pq.insert(source, 0.0); locators.put(source, loc); // Slut på initialisering, her begynder selve algoritmen while (!pq.isempty()) { ILocator<KrakNode> v = pq.removemin(); for (KrakEdge edge : graph.edges.get(v.getitem().index)) { KrakNode w = edge.getotherend(v.getitem()); if (v.getkey() + edge.length < locators.get(w).getkey()) locators.get(w).replacekey(v.getkey() + edge.length); Prioritetskø med justerbar nøgle Typisk prioritetskø (fx fra java.util) interface IPriorityQueue<T> { public void insert(t item, double key); public T removemin(); Mangler en måde at justere nøgle Bedre prioritetskø Insert giver et interface IPriorityQueue<T> { håndtag public ILocator<T> insert(t item, double key); public Ilocator<T> removemin(); public boolean isempty(); interface ILocator<T> { public void replacekey(double key); public T getitem(); public double getkey(); Håndtaget bruges ved justering af key 6

Hvordan finde korteste vej? Dijkstra finder korteste afstand Den korteste vej findes ved at knytte en forgænger til hver knude Så længe pq ikke-tom udtag fra pq en knude v med minimal nøgle for hver kant (v,w) ud fra v, hvis D[v] + len(v,w) < D[w], så sæt D[w] = D[v] + len(v,w) og sæt w.previous = v Vejen (baglæns) findes ved at gå fra t til t.previous osv. til man når s Dijkstra uegnet til punkt-til-punkt Ex: Find korteste vej fra s=itu til t=nakskov Dijkstra finder først afstanden til alle steder der er nærmere end Nakskov Dvs næsten alle steder på Sjælland, Møn,... Det er spildt arbejde... En simpel forbedring: Søg fra begge ender samtidig hjælper noget men ikke meget Algoritme A* gør det lidt bedre ved kun at søge i den geografisk rigtige retning 7

Algoritmiske forbedringer A* algoritmen mm præsenteres i Algoritmer og Datastrukturer Eksperimentelle resultater, se Sanders & Schultes: Engineering fast route planning algorithms, Workshop on Experimental Algorithmics 2007 En hurtig, ikke afsindig indviklet algoritme, se Sanders & Schultes: Highway hierarchies hasten exact shortest path queries, European Symposium on Algorithms 2005 Men måske stadig rigelig kompliceret... Visualisering af vejnettet 1. Tegn veje på fast størrelse kort 2. Tegn med forskellige farver 3. Tilpas til vinduets størrelse 4. Tillad zoom ind 5. Tillad zoom ud 6. Tillad scroll op, ned, venstre, højre 7. Brug mus til at vise navn på nærmeste vej... og 1000 andre ting 8

Koordinattransformationer Vejdataenes koordinatsystem er UTM32, men (øst,nord) koordinater i meter Skærmens koordinatsystem er i pixler (venstre,ned) Man skal kunne regne frem og tilbage fra meter til pixel: for at tegne en vej fra pixel til meter: for at vide hvad musen peger på Transformationerne er ret simple...... men skal indpakkes i en klasse, ellers bliver det umådelig rodet Koordinattransformationsklasse Fra meter til pixel: public int gfromx(double x); public int gfromy(double y); Fra pixel til meter: public double xfromg(int gx); public double yfromg(int gy); 9

Opgaver i relation til projekt Interaktiv visualisering af vejnettet Tirsdag 1. april: Aflevering af program og designdokumenter Tirsdag 8. april: Hver gruppe præsenterer sin visualisering 10