Philip Bille Orienteret graf. Mængde af knuder forbundet parvis med orienterede kanter. deg + (7) =, deg - (7) = Lemma. v V deg - (v) = v V deg + (v) = m. Bevis. Hver kant har netop en startknude og slutknude. sti fra til 7 9 8 7 9 8 0 kreds 0
Google Maps 8/0/ : Vejnetværk Spildopsamling (garbage collection) Knude = vejkryds, kant = ensrettet vej. Knude = objekt, kant = peger/reference. rødder Hvilke objekter kan vi nå fra en rod? Map data 0 Google 0 m WWW Automater og regulære udtryk Knude = hjemmeside, kant = hyperlink. Knude = tilstand, kant = tilstandsovergang. Webcrawling PageRank https://www.google.dk/maps/@.78,.7877,7z Accepterer automaten aab = findes sti fra til 0 der matcher aab? Page of Regulære udtryk kan repræsenteres som automat. a a 8 R = a (a ) (b c) http://computationalculture.net/article/what_is_in_pagerank b c 7 0 8 97
Afhængigheder Afhængigheder Knude = emner, kant = afhængighed. Er der nogle cykliske afhængigheder? Hvordan kan vi finde en rækkefølge emnerne så vi undgår afhængigheder? tabeller flettesortering hægtede lister stakke køer flettesortering indsættelsessortering stakke grafer stærke sammenhængkomponenter ordbøger indsættelsessortering hob tabeller ordbøger køer uorienterede grafer orienterede grafer foren og find grafer uorienterede grafer binær søgning binære søgetræer binær søgning hægtede lister BFS/DFS topologisk sortering MST orienterede grafer binære søgetræer foren og find MST korteste veje BFS/DFS topologisk sortering korteste veje hob Dijkstras algoritme Dijkstras algoritme stærke sammenhængkomponenter Problemer på orienterede grafer graf knuder kanter internet hjemmeside hyperlink transport vejkryds ensrettet vej skedulering job precedens relation infektionssygdom person infektion citation artikel citation Sti. Er der en sti fra s til t? Korteste sti. Hvad er den korteste sti fra s til t. Orienteret acyclisk graf. Findes der kredse i grafen? Topologisk sortering. Kan vi ordne knuder i en sekvens så alle kanter peger samme vej? Stærk sammenhængskomponent. Er der en vej mellem alle par af knuder? Transitiv afslutning. For hvilke knuder v og w er der en sti fra v til w? objekt graf objekter pegere/referencer objekt hieraki klasse nedarver fra kontrol-flow kode hop
Incidensmatrix Incidensmatrix. D n n tabel. Plads. O(n ) Tid for afgøre om v peger på u. O() 7 9 8 0 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Incidensliste Repræsentation Incidensliste. Tabel af hægtede lister. Plads. O(n + m) Tid for afgøre om v peger på u. O(deg + (v)) I praksis. De fleste grafer i virkeligheden er tynde brug incidenslister. 7 9 8 0 7 8 9 0 7 0 7 0 9 0 repræsentation plads kant fra v til u? incidensmatrix O(n O() incidensliste O(n + m) O(deg 0
DFS(s) DFS-visit(s) DFS-visit(v) marker v for alle umarkerede knuder w som v peger på DFS-visit(w) π[w] = v BFS(s) Enqueue(s) marker s d[s] = 0 gentag indtil kø er tom v = Dequeue() for alle umarkede w som v peger på marker w d[w] = d[v] + π[w] = v Enqueue(w) Søgning i grafer DFS og BFS i O(n + m) tid på orienterede grafer.
Topologisk sortering og DAGs DAGs og topologisk sortering DAG. Orienteret acyclisk graf (directed acyclic graph). Graf uden kredse. Topologisk sortering. Ordning af knuder v, v,, vn fra venstre til højre således at alle kanter peger mod højre. Problemer. Er G en DAG? Hvordan beregner vi en topologisk sortering? Mål. Vise G er en DAG G har en topologisk sortering + find algoritme til at løse begge problemer. Lemma. G har en topologisk sortering G er en DAG. Bevis. Modbevis. v i v j Antag G har topologisk sortering v, v,, vn og ikke er en DAG. G indeholder kreds K. Kig på knude vi i K som er længst til venstre i sortering og knude vj lige før (vj, vi) er kant i K og dermed i G. Men vi er før vj i rækkefølge v, v,, vn er ikke en topologisk sortering. DAGs og topologisk sortering DAGs og topologisk sortering Opgave. Givet en DAG, find på en strategi til at beregne en topologisk sortering. 7 Lemma. G er en DAG G har en knude med indgrad 0. Bevis. Modbevis. Antag G er en DAG og alle knuder har indgrad. Vælg knude v og følg kanter baglæns fra v. Efter n+ skridt må der være mindst knude u vi har besøgt gange. u + de knuder mellem første og anden gang vi besøger u udgør kreds.
DAGs og topologisk sortering Algoritme Lemma. G er en DAG G har topologisk sortering. Bevis. Induktion over n Basis n =. Induktionsskridt n >. Find knude med indgrad 0. G - {v} er en DAG G - {v} har en topologisk sortering. Placer v længst til venstre efterfulgt af den topologiske sortering af G - {v}. Giver topologisk sortering af G da v ikke har nogen indgående kanter. Induktionsbevis som algoritme. Korrekthed. Følger af induktionsbevis. TopSort(G) if G = ({v}, ) print v else find v så deg - (v) = 0 print v TopSort(G - {v}) Implementation Mål. Implementer algoritmen effektivt på incidenslisterepræsentation 7 7 TopSort(G) if G = ({v}, ) print v else find v så deg - (v) = 0 print v TopSort(G - {v})
Implementation Implementation Løsning. Konstruer omvendt graf G R. Linæer søgning i incidensliste for G R efter knude med indgrad 0 i hvert skridt. Tid per knude. Find knude v med indgrad 0: O(n). Fjern kanter ud af v: O(deg + (v)) TopSort(G) if G = ({v}, ) print v else find v så deg - (v) = 0 print v TopSort(G - {v}) Samlet tid for n knuder. O(n + v V deg + (v)) = O(n + m) = O(n ). Løsning. Vedligehold indgrad af hver knude i incidensliste + hægtet liste af alle knuder med indgrad 0. Initialisering. O(n+m) Tid per knude. Find knude v med indgrad 0: O(). Fjern kanter ud af v: O(deg + (v)) TopSort(G) if G = ({v}, ) print v else find v så deg - (v) = 0 print v TopSort(G - {v}) Samlet tid for n knuder. O(n + v V deg + (v)) = O(n + m). 0-deg deg tabel 0 0 0 Topologisk sortering og DAGs Topologisk sortering med DFS Lemma. G er en DAG G har en topologisk sortering. Theorem. Vi kan afgøre om G er DAG og hvis den er så finde en topologisk sortering i O(n + m) tid. Topologisk sortering med DFS. Ide. Kør DFS på G. Ved slutning af rekursivt kald til knude v læg v på stak. Udskriv stak. Tid. O(n + m) Intuition. Finder rekursivt knuder med udgrad 0.
Stærke sammenhængskomponenter Def. v og u er stærk sammenhængende (strongly connected) hvis der er sti fra v til u og fra u til v. Def. Et stærk sammenhængskomponent (strongly connected component) er en maksimal delmængde af stærk sammenhængende knuder. 7 9 8 0 Stærke sammenhængskomponenter med DFS Stærke sammenhængskomponenter med DFS med DFS. Ide. Kør DFS på omvendt graf G R. Kør DFS på G ifht. rækkefølge fra første DFS. Hver rekursiv søgning finder et stærkt sammenhængskomponent. Intuition? Korrekthed. Se kap. i CLRS. Tid. O(n + m) Theorem. Vi kan finde alle stærke sammenhængskomponenter i O(n + m) tid.
Implicit graf Implicit graf. Uorienteret/orienteret graf G repræsenteret implicit. Implicit repræsentation. Startknude s. Algoritme til at generere naboer af en knude. Bruges i spil, kunstig intelligens, etc. Rubiks terning Rubiks terning Rubiks terning n+m =..00.7.89.8.000 ~ trillioner. Hvad er det optimale antal træk man skal bruge på at "løse" en terning ligegyldigt hvor man starter? år nedre grænse øvre grænse 98 8 990 8 99 8 9 99 8 7 99 8 9 99 0 9 00 0 8 00 0 7 007 0 008 0 008 0 008 0 00 0 0 www.cube0.org