träd dag graf båge och vikt Grafer definitioner och terminologi

Relevanta dokument
Näst nästa gång: Nästa gång: mer grafer (kap 10) Grafer 1 1. ! uppspännande träd. ! minimala uppspännande träd. ! Prims algoritm. !

Trädstrukturer och grafer

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Graphs (chapter 14) 1

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Grafer, allmänt. Med datastrukturen graf menas vanligen: en mängd av noder (vertices) och en mängd av bågar (edges).

Föreläsning Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning 5: Grafer Del 1

Lösningar Datastrukturer TDA

Föreläsning Datastrukturer (DAT036)

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 6 Datastrukturer (DAT037)

FÖRELÄSNING 11 DATALOGI I

TNK049 Optimeringslära

Föreläsning Datastrukturer (DAT036)

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Datastrukturer. föreläsning 8. Lecture 6 1

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Datastrukturer. föreläsning 8. Maps 1

Föreläsning 6. Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf

Algoritmer och datastrukturer, föreläsning 11

Lösningsförslag till tentamen Datastrukturer, DAT037,

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

13 Prioritetsköer, heapar

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Datastrukturer och Algoritmer D0041D

Föreläsning 13 Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 7. Träd och binära sökträd

Föreläsning 7. Träd och binära sökträd

Föreläsningsanteckningar F6

Föreläsning 9 Innehåll

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

N = {i}: noder (hörn) Graf: G = (N, B) Definitioner. Väg: Sekvens av angränsande bågar. Cykel: Väg som startar och slutar i samma nod.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Tentamen Datastrukturer D DAT 036/DIT960

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Föreläsning 9 Innehåll

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Tentamen Datastrukturer (DAT036)

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 2 Datastrukturer (DAT037)

Lösningsförslag till tentamen

Tentamen, Algoritmer och datastrukturer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

Kapitel 9: Grafalgoritmer

Tentamen Datastrukturer (DAT036)

729G04 - Diskret matematik. Lektion 4

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Tildatenta Lösningsskiss

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Länkade strukturer, parametriserade typer och undantag

Algoritmer, datastrukturer och komplexitet

Datastrukturer. föreläsning 9. Maps 1

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Algoritmer, datastrukturer och komplexitet

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 09:00 14:00

Avancerad Problemlösning och Programmering i Praktiken

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 14 Innehåll

Föreläsning 8: Exempel och problemlösning

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Algoritmer och datastrukturer

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Föreläsning 4 Datastrukturer (DAT037)

F11. Läsanvisning: kap 10 + dessa OH. Kruskals algoritm kortaste vägar en till alla

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Transkript:

F9 Läsanvisning: kap 0 + dessa OH (Obs att OH bilderna tar upp mer än boken) intro till grafer (bara handskrivet och tavla) definitioner och terminologi representationer djupet först bredden först Nästa gång: mer grafer (kap 0)! uppspännande träd! minimala uppspännande träd! Prims algoritm Näst nästa gång:! Kruskals algoritm! kortaste vägar en till alla! Dijkstras algoritm träd dag graf Träd Dag Graf Träd har en implicit riktning på bågarna nedåt En dag är en riktad graf utan cykler ( Directed, Acyklic Graph ). Den är generellare än träd men mindre generell än grafer. En dag kan användas för att representera aritmetiska uttryck med gemensamma deluttryck, partiella ordningar i AOV nätverk (se topologisk sortering) mm. AOV = Activity On Vertex AOE = Activty On Edge är vanligare. En graf modellerar allmänna relationer. Den består av noder, som representerar objekt, och bågar som representerar relationer mellan objekten. Dessa har ofta en en vikt. F9 Grafer F9 Grafer Grafer definitioner och terminologi En graf G = (V, E) består av mängder - noder, V, (vertices, points, hörn) och - bågar, E, (edges, arcs, lines, kanter). Noderna representerar ofta objekt, (tex städer) bågarna relationer mellan objekten (tex avstånd). Noderna som ingår i en båge säges vara förbundna (adjacent) och säges vara grannar (neighbours) till varandra. (angränsande, närliggande) En graf kan vara riktad (directed) eller oriktad (undirected) En graf kan vara viktad (weighted) eller oviktad (not weighted=>vikt=). båge och vikt nod, båge och vikt är ganska vida begrepp eftersom grafer modellerar relationer: vikt: ofta avstånd, kostnad, grad av något... Euklidiska avstånd (traditionella avstånd) Manhattan avstånd (avståndet en bil måste fara på tex Manhattan) Hamming avstånd (minsta antalet substitutioner som krävs för att omvandla något till något annat) tid graden av något! vänskap eller annan social norm! troslikhet! släktskap kostnaden att ta sig mellan noderna grann-information och många fler F9 Grafer F9 Grafer 4

Vägar En väg (path) är: en sekvens av noder där två intilliggande noder i sekvensen har en båge mellan sig. Cykler Cykel en väg med längd som startar och slutar på samma ställe (ej nödvändigtvis enkel väg) ( för oriktade grafer) Enkel väg (simple) - alla noder är olika En enkel cykel cykel där v är den enda upprepade noden, kallas också en krets (circut) Hamiltonsk väg enkel väg som besöker alla noder exakt en gång (jmf TSP som är billigaste sådana vägen). Euler väg väg som besöker alla bågar exakt en gång. vanligen tillåter man inte självloopar i en graf F9 Grafer F9 Grafer 6 (starkt) sammanhängande - (strongly) connected Två noder i en (di)graf sägs vara sammanhängande om det finns en väg mellan dem (ev. i flera steg). Om varje par av noder i en (di)graf är sammanhängande så sägs grafen vara (starkt) sammanhängande ( all in one piece ) (minst n respektive n- bågar) En riktad graf är sammanhängande om den är det betraktad som oriktad graf. Ej (starkt) sammanhängande sammanhängande (dock ej starkt) starkt sammanhängande ej starkt sammanh. sammanhängande komponenter av en graf sammanhängande = sammankopplad = sammanbunden F9 Grafer 7 Komplett graf I en komplett graf finns det en båge mellan varje par av noder. Maximala antalet bågar i en oriktad graf med n = V noder är n(n-)/. (riktad: n(n-), n om man tillåter självloopar) Om en graf har exakt så många bågar sägs den alltså vara komplett. n e 0 4 6 4+++...... n n +++...+n- = i = i = n(n-)/ F9 Grafer 8

ytterligare terminologi En nods grad är antalet bågar som utgår från den. För riktade talar man om in/ut grad. Acyklisk graf innehåller inte någon cykel Träd specialfall av graf, är en oriktad, sammanhängande och acyklisk graf ------------- Grafens ordning = antalet noder och Grafens storlek = antalet bågar. Grafens densitet = antalet bågar/maximala antalet bågar (för riktad graf med självloopar) e = E, n = V Representation av grafer Efterföljarmatris: (adjacency matrix) (eller föregångarmatris så klart) en riktad, viktad graf: motsvarande EM: 7 - - - 7 - - - - - - - - - Här använder vi en n x n matris som lagrar förbindelse ( det finns en väg ) eller vikt (tex kostnad, avstånd) mellan noderna. + tidskomplexitet för åtkomst/insättning= O() - alla grannar till tar O(n) - minneskravet är Ω(n ) även för en gles graf - tex utskrift tar också Ω(n ) F9 Grafer 9 F9 Grafer 0 Representation av grafer Efterföljarlista: (adjacency list) motsvarande EL: 7 7 här använder vi en accessvektor och länkade listor med grannarna och avstånden till dom. - tidskomplexitet för åtkomst, wc = O(n) + alla grannar till tar max O(n), ofta bättre - insättning tar wc=o(n) - minneskravet är O(n+e) (n+e för oriktad) - utskrift tar Ω(n+e) Även om dessa två är de vanligaste så finns det många fler tex: Infallande matris: (incidence matrix) e e e e 4 e e e e 4 n - u u n u u - n - - lämpligare om antalet bågar är litet e<n / F9 Grafer F9 Grafer

Vilken skall väljas? Hur stor kommer din graf att bli? Matriser fungerar bara för relativt små grafer Hur gles är grafen? Gles graf => E-lista Vilka egenskaper vill du ha? tex så är det bättre med EL om du skall göra DFS som vill ha alla grannar till Skall grafen ändras mycket och hur? Minne: antag riktad graf med vikter. E-Llista: Vektorn behöver n celler, varje nod i listan minst -4 celler och det finns e sådana noder: n + e till n + 4e E-matris: n Listan lönar sig alltså då n + e n => e (n -n)/ n / (n /4) Vi behöver en klass för en båge public class Edge { private int source; private int dest; private double weight; public Edge(int source, int dest){. public Edge(int source, int dest, double w) {. public int getsource() {. public int getdest() {. public double getweight() {. public String tostring() {. Return true if two edges are equal. Edges are equal if the source and destination are equal. Weight is not considered. public boolean equals(object obj){. - Man kan representera förbindelse med en binär bit => e n /(x) - Om grafen är oriktad kan man halvera matrisen. F9 Grafer Return a hash code for an edge. The hash code is the source shifted left 6 bits exclusive or with the dest public int hashcode() { return (source << 6) ^ dest; F9 Grafer 4 Och ett interface A graph is a set of vertices and a set of edges. Vertices are represented by int's from 0 to n-. Edges are ordered pairs of vertices. Each implementation of the Graph interface should provide a constructor that specifies the number of vertices and whether or not the graph is directed. @author Koffman and Wolfgang Och sedan bygger vi en hierarki public interface Graph { int getnumv(); boolean isdirected(); void insert(edge edge); boolean isedge(int source, int dest); //if there is no edge return an //edge with Double.POSITIVE_INFINITY Edge getedge(int source, int dest); Iterator < Edge > edgeiterator( int source); (public är underförstått i ett interface) F9 Grafer public abstract class AbstractGraph implements Graph { private int numv; private boolean directed; public AbstractGraph(int numv, boolean directed) {... public int getnumv() {... public boolean isdirected() {... public void loadedgesfromfile( BufferedReader br) throws IOException {... public static Graph creategraph( BufferedReader br, boolean isdirected, String type) throws IOException {... F9 Grafer 6

One concrete class uses an array of lists to represent the edges. public class ListGraph extends AbstractGraph { private List<Edge>[] edges; // ------------------------ public ListGraph(int numv, boolean directed) { super(numv, directed); edges = new List[numV]; for (int i = 0; i < numv; i++) { edges[i]=new LinkedList<Edge>(); // ------------------------ public void insert(edge edge) { edges[edge.getsource()].add(edge); if (!isdirected()) { edges[edge.getdest()].add( new Edge( edge.getdest(), edge.getsource(), edge.getweight())); // ------------------------ public Edge getedge(int source, int dest) { Edge target = new Edge(source, dest, Double.POSITIVE_INFINITY); public boolean isedge(int source, int dest) { return edges[source].contains( new Edge(source, dest)); // ------------------------ public Iterator<Edge> edgeiterator(int source) { return edges[source].iterator(); for (Edge edge : edges[source]){ if (edge.equals(target)) // Desired edge found, return it return edge; // All edges for source checked. // Desired edge not found return target; // or null or exc. F9 Grafer 7 F9 Grafer 8 Algoritmer Ett av de mest fundamentala sakerna vi vill göra är att gå igenom alla noder och bågar i grafen. Vi måste se till att vi bara besöker varje båge/nod en gång annars blir algoritmen ineffektiv. Vi måste göra det systematiskt så vi inte missar någon nod. Vi håller reda på hur långt vi kommit med bearbetningen av en nod genom att låta den vara i ett av tre tillståndet ej besök än, oupptäckt (unvisited, undiscovered) besöks nu, upptäckt ( (being) visited, discovered) färdig besökt, behandlad (finished visiting, processed) En nod passerar dessa tillstånd Djupet Först Sökning Dfs är ett sätt att besöka (räkna upp) alla noder i en graf (jmf med preorder för träd. dfs är ej unik. Ide: ) börja var som helst ) sök djupare så länge det går ) backtracka 4) börja om på nytt om det behövs F B A dfs(e) dfs(a)+ dfs(e) E E E 6 4 F G F G G B D B D D 4 A C A C C F9 Grafer 9 F9 Grafer 0

dfs pseudokod Start up: 8 for v in..n loop 9 mark v as unvisited end loop 0 for v in..n loop if v unvisited dfs(v) end if end loop --------------------------- pseudocode dfs(vertex: u) vertex: v mark u as visited...//process u here (preorder) or after the loop for each vertex v on adjlist(u) 4 if v is unvisited dfs(v) end if end for 6...//process u here (postorder) or before loop 7 mark u as processed end dfs F9 Grafer Komplexitet Antag att vi har en E-lista, e bågar, n noder initieringen tar 8-9: n 0-: n + rekursiva anrop dfs tar:, 7 konstant, 6 beror på vad vi vill göra, antag konstant - loopen går totalt, över alla sina varv, ett varv per båge så vi kan inte ha fler anrop av dfs än e (inklusive anropen från ) Detta plus looparna 8 och 0 ger oss O(n+e) = O(max(n,e)) F9 Grafer Dfs i oriktade grafer Ungefär som för riktade, se vänsta fig BFS bredden först sökning Alla efterföljare till en nod besöks innan man går djupare i grafen, högra fig. bak bak BFS psudocode tag en obesökt nod i grafen och lägg in den i en kö samt markera den besökt tag bort första noden ur kön samt lägg in alla dess obesökta grannar i kön samt markera dem besökta samt lägg bågen mellan noden och dess grannar i en lista med uppspännande trädet om kön inte är tom så upprepa 4 om det finns fler noder så upprepa 4 kön uppsp. trädet, {-, -, 4 {-, -, -4 4 {-, -, -4 {-, -, -4 O(max(n, e) F9 Grafer F9 Grafer 4