From 07193499c07315efd1858e88d8a10f46d7a1abfc Mon Sep 17 00:00:00 2001 From: Xtrah Date: Mon, 23 Nov 2020 23:45:03 +0100 Subject: [PATCH] Some minor graph edits Co-authored-by: LiviaValenti --- Algoritmer/Grafer/dag-shortest-path.md | 20 +++++++++++--------- Algoritmer/Grafer/depth_first_search.md | 12 +++++------- Algoritmer/Grafer/transitive-closure.md | 2 +- README.md | 13 +++++++++---- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/Algoritmer/Grafer/dag-shortest-path.md b/Algoritmer/Grafer/dag-shortest-path.md index d933dc6..96e3303 100644 --- a/Algoritmer/Grafer/dag-shortest-path.md +++ b/Algoritmer/Grafer/dag-shortest-path.md @@ -30,23 +30,25 @@ Men: ## Trinn for trinn -Parametere: - -G: Graf - -w: Vekting - +**Parametere:** +G: Graf +w: Vekting s: Startnode ```pseudo - DAG-SHORTEST-PATH(G,w,s) 1 Topologisk sortering av nodene i G 2 INITIALIZE-SINGLE-SOURCE(G,s) -3 for hver node u in G.V -4 for hver kant (u, v) in G.E +3 for hver node u i G.V +4 for hver kant (u, v) i G.E 5 RELAX(u,v,w) +``` +```pseudo +RELAX(u,v,w): +1 if v.d > u.d + w(u,v): +2 v.d = u.d + w(u,v) +3 v.𝜋 = u ``` 1: Topologisk sortering: Gir en lineĂŠr sortering av nodene i en DAG slik at for hver kant u,v kommer u fĂžr v. diff --git a/Algoritmer/Grafer/depth_first_search.md b/Algoritmer/Grafer/depth_first_search.md index 935828d..cbfc373 100644 --- a/Algoritmer/Grafer/depth_first_search.md +++ b/Algoritmer/Grafer/depth_first_search.md @@ -14,14 +14,10 @@ DFS er en algoritme som er nyttig for Ă„ traversere grafer. Klassifisering av kanter: -1. Trekanter: Er kanter i dybde fĂžrst skogen G. Kanten (u,v) er en tre kant hvis den fĂžrst var oppdaget ved Ă„ utforske (u,v). -2. Back edges are those edges (u,v) connecting a vertex u to an ancestor in a -depth-first tree. We consider self-loops, which may occur in directed graphs, to -be back edges. +1. Trekanter: Er kanter i dybde fĂžrst skogen G. Kanten $(u,v) er en tre kant hvis den fĂžrst var oppdaget ved Ă„ utforske (u,v). +2. Back edges are those edges (u,v) connecting a vertex u to an ancestor in a depth-first tree. We consider self-loops, which may occur in directed graphs, to be back edges. 3. Forward edges are those nontree edges (u,v) connecting a vertex u to a descendant in a depth-first tree. -4. Cross edges are all other edges. They can go between vertices in the same -depth-first tree, as long as one vertex is not an ancestor of the other, or they can -go between vertices in different depth-first trees. +4. Cross edges are all other edges. They can go between vertices in the same depth-first tree, as long as one vertex is not an ancestor of the other, or they can go between vertices in different depth-first trees. ## Den formelle definisjonen av det generelle problemet @@ -30,6 +26,8 @@ go between vertices in different depth-first trees. +Du kan _ikke_ ende opp med bakoverkanter (back edges) pĂ„ en DAG med DFS. + ## Trinn for trinn diff --git a/Algoritmer/Grafer/transitive-closure.md b/Algoritmer/Grafer/transitive-closure.md index 297de93..309b0e1 100644 --- a/Algoritmer/Grafer/transitive-closure.md +++ b/Algoritmer/Grafer/transitive-closure.md @@ -14,7 +14,7 @@ Transitive-Closure er lik som Floyd-Warshall, men sjekker kun om det finnes en s Vi kjĂžrer en kunstig konstruering av delinstanser: Vi begrenser hvilke noder vi har lov til Ă„ gĂ„ igjennom. -Vi kan fĂžrst forsĂžke Ă„ gĂ„ gjennom k-1 noder og deretter fĂžrst kun gĂ„ fra i til k-1 noder og k til j. +Vi kan fĂžrst forsĂžke Ă„ gĂ„ gjennom $k-1$ noder og deretter fĂžrst kun gĂ„ fra $i$ til $k-1$ noder og $k$ til $j$. ![Notasjon](https://i.imgur.com/jP3joiR.png) diff --git a/README.md b/README.md index 7d0e3ee..16feff5 100644 --- a/README.md +++ b/README.md @@ -838,7 +838,7 @@ Man har et sett aktiviteter som starter og slutter pĂ„ forskjellige tider, og Ăž ### Huffmankoder og huffmans algoritme -Huffmankoder er en mĂ„te Ă„ kode data som bestĂ„r av tegn pĂ„ en slik mĂ„te at den tar minst mulig plass. Selve kodingen defineres av et Huffman-tre som gir informasjonen som trengs for kode en streng med data, for Ă„ dekode den igjen. Selve treet konstrueres grĂ„dig basert pĂ„ frekvensen til hvert tegn i inputdataen. +Huffmankoder er en mĂ„te Ă„ kode data som bestĂ„r av tegn pĂ„ en slik mĂ„te at den tar minst mulig plass. Selve kodingen defineres av et Huffman-tre som gir informasjonen som trengs for kode en streng med data, for Ă„ dekode den igjen. Selve treet konstrueres grĂ„dig basert pĂ„ frekvensen til hvert tegn i inputdataen. Huffmans algoritme er en grĂ„dig algoritme som komprimerer data veldig effektivt, vanligvis mellom 20%-90%. Algoritmen bruker en tabell som teller antall hendelser av hvert tegn i en sekvens med tegn, og bygger et binĂŠrtre basert pĂ„ **frekvensene**. @@ -928,11 +928,16 @@ DFS kan brukes som subrutine, blant annet i Topological sort. En mĂ„te Ă„ tenke pĂ„ DFS: > BesĂžk oppdagede noder umiddelbart. +#### Parentesteoremet + +Noder oppdages _fĂžr_ og avsluttes _etter_ sine etterkommere. Hvis de ikke er etterkommere av hverandre, oppdages og avsluttes de fĂžr de andre. Finnes dete en sti i mellom dem er det **no prob**. + +#### DFS og klassifisering av kanter Kantklassifiseringer: - MĂžter en hvit node: Tre-kant -- MĂžter en grĂ„ node: Bakoverkant +- MĂžter en grĂ„ node: Bakoverkant (ikke pĂ„ en DAG) - MĂžter en svart node: Forover- eller krysskant. Best case | Worst case @@ -944,7 +949,7 @@ $\Theta(V+E)$ | $\Theta(V+E)$ ### Topological sort -NĂ„r man har en behov for rekkefĂžlge pĂ„ nodene i en DAG (directed acyclic graph), kan vi utfĂžre topological sort. Sorteringen legger foreldre fĂžr barn, evt sorterer alle slik at de kommer etter sine avhengigheter. +NĂ„r man har en behov for rekkefĂžlge pĂ„ nodene i en DAG (directed acyclic graph), kan vi utfĂžre topological sort. Sorteringen legger foreldre fĂžr barn, evt sorterer alle slik at de kommer etter sine avhengigheter. Topologisk sortering gir en ordning av nodene, som **respekterer retningen pĂ„ kantene**. Gir nodene en rekkefĂžlge. Samme som gjĂžres i delproblemgrafen i dynamisk programmering. @@ -1488,7 +1493,7 @@ Alt i NP kan reduseres til NP hardt. **Reduksjoner skjer til lik eller hĂžyere k - **VERTEX-COVER** - En urettet graf $G$ og et heltall $k$ - Har $G$ et nodedekke med $k$ noder? Dvs: $k$ noder som tilsammen ligger inntil alle kantene - - Et nodedekke for en graf G har noder som forbinder alle kantene i G. + - Et nodedekke for en graf $G$ har noder som forbinder alle kantene i $G$. - **HAM-CYCLE** - En urettet graf $G$ - Finnes det en sykel som inneholder alle nodene nĂžyaktig en gang?