Skip to content

Commit

Permalink
Some minor graph edits
Browse files Browse the repository at this point in the history
Co-authored-by: LiviaValenti <[email protected]>
  • Loading branch information
Xtrah and LiviaValenti committed Nov 23, 2020
1 parent adaff1e commit 0719349
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 21 deletions.
20 changes: 11 additions & 9 deletions Algoritmer/Grafer/dag-shortest-path.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,25 @@ Men:

## Trinn for trinn
<!-- Pseudokode med forklaring -->
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.
Expand Down
12 changes: 5 additions & 7 deletions Algoritmer/Grafer/depth_first_search.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
<!-- Et problem er relasjonen mellom input og output -->
Expand All @@ -30,6 +26,8 @@ go between vertices in different depth-first trees.
<!-- Korrekhet: algoritmer virker, gir det svaret den skal -->
<!-- Eks: Binary search må ha en sortert liste -->

Du kan _ikke_ ende opp med bakoverkanter (back edges) på en DAG med DFS.

## Trinn for trinn
<!-- Pseudokode med forklaring -->

Expand Down
2 changes: 1 addition & 1 deletion Algoritmer/Grafer/transitive-closure.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,7 @@ Man har et sett aktiviteter som starter og slutter på forskjellige tider, og ø
### Huffmankoder og huffmans algoritme
<!-- [G4] Forstå Huffman og Huffman-koder -->

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**.

Expand Down Expand Up @@ -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
<!-- [H4] Forstå hvordan DFS klassifiserer 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
Expand All @@ -944,7 +949,7 @@ $\Theta(V+E)$ | $\Theta(V+E)$

### Topological sort
<!-- [H5] Forstå 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.

Expand Down Expand Up @@ -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?
Expand Down

0 comments on commit 0719349

Please sign in to comment.