From 8444096c8ccb214bd034a408b6b12c3c0314202e Mon Sep 17 00:00:00 2001 From: Xtrah Date: Sun, 15 Nov 2020 18:48:49 +0100 Subject: [PATCH] Minor general update --- Algoritmer/Grafer/breadth_first_search.md | 1 + Algoritmer/Grafer/depth_first_search.md | 1 + Algoritmer/Grafer/dijkstra.md | 1 + Algoritmer/Grafer/heap_sort.md | 2 ++ Algoritmer/Sortering/bucket_sort.md | 1 + Algoritmer/Sortering/counting_sort.md | 6 +++--- Algoritmer/Sortering/radix_sort.md | 1 + Algoritmer/Sortering/selection_sort.md | 4 ++-- README.md | 17 +++++++++-------- 9 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Algoritmer/Grafer/breadth_first_search.md b/Algoritmer/Grafer/breadth_first_search.md index 6e2ff2a..7a30ba7 100644 --- a/Algoritmer/Grafer/breadth_first_search.md +++ b/Algoritmer/Grafer/breadth_first_search.md @@ -1,4 +1,5 @@ # Breadth first search (BFS) + Best case | Average case | Worst case | Minne ---------|----------|---------|--------- diff --git a/Algoritmer/Grafer/heap_sort.md b/Algoritmer/Grafer/heap_sort.md index e8398c0..99d3ee1 100644 --- a/Algoritmer/Grafer/heap_sort.md +++ b/Algoritmer/Grafer/heap_sort.md @@ -35,4 +35,6 @@ Heap sort er en sammenligningsbasert algoritme, lik selection sort, hvor vi før ## Kjøretid og utregning + + ## Python kodeeksempel diff --git a/Algoritmer/Sortering/bucket_sort.md b/Algoritmer/Sortering/bucket_sort.md index 6e1c8ef..30d742a 100644 --- a/Algoritmer/Sortering/bucket_sort.md +++ b/Algoritmer/Sortering/bucket_sort.md @@ -18,6 +18,7 @@ Bucket sort antar at input-listen er generert tilfeldig og er uniformt fordelt o ## Tilleggskrav for korrekthet +For at bucket sort skal fungere må vi unngå at alle tallene havner i samme bøtte. ## Trinn for trinn diff --git a/Algoritmer/Sortering/counting_sort.md b/Algoritmer/Sortering/counting_sort.md index af2c47e..84f9f1f 100644 --- a/Algoritmer/Sortering/counting_sort.md +++ b/Algoritmer/Sortering/counting_sort.md @@ -34,15 +34,15 @@ Anta at du kan kun ha $k$ distinkte elementer. Tell hvor mange instanser det er - Ikke sammenligningsbasert - **Counting sort** slår **radix sort** hvis antallet elementer $n \gg k$ forskjellige elementer. (_Dette er også det tilfellet hvor algoritmen er mest effektiv._) - Sorterer basert på at alle input-elementene $n$ er heltall med en range mellom $0$ og $k$. -- Ikke in-place da den lager en ny liste midlertidig for å telle antall forekomster av hvert element -- Stabil: den relative rekkefølgen til elementene i listen opprettholdes under sorteringen +- In-place: Nei, da den lager en ny liste midlertidig for å telle antall forekomster av hvert element +- Stabil: Ja, den relative rekkefølgen til elementene i listen opprettholdes under sorteringen ## Kjøretid og utregning Best case | Average case | Worst case | Minne ---------|----------|---------|--------- -TODO | TODO | TODO | TODO +$\Theta(n+k)$ | $\Theta(n+k)$ | $\Theta(n+k)$ | $O(n+k)$ ## Python kodeeksempel diff --git a/Algoritmer/Sortering/radix_sort.md b/Algoritmer/Sortering/radix_sort.md index af8f29b..440bef7 100644 --- a/Algoritmer/Sortering/radix_sort.md +++ b/Algoritmer/Sortering/radix_sort.md @@ -43,6 +43,7 @@ $\Theta(d(n+k))$ | $\Theta(d(n+k))$ | $\Theta(d(n+k))$ | $O(n+k)$ der $d$ er antallet siffer i maksimum, $n$ er antall elementer og $k$ er antallet unike elementer. ## Python kodeeksempel + ```python def modified_counting_sort(A, B, idx): # A = Usortert liste. B = Liste hvor resultatet skal puttes. idx = indeksen som sorteringen skal basere seg på k = 10 diff --git a/Algoritmer/Sortering/selection_sort.md b/Algoritmer/Sortering/selection_sort.md index 3fa68d9..7d34a89 100644 --- a/Algoritmer/Sortering/selection_sort.md +++ b/Algoritmer/Sortering/selection_sort.md @@ -31,8 +31,8 @@ En tidkrevende sorteringsalgoritme som søker gjennom en usortert liste og flytt ## Styrker og svakheter sammenlignet med andre -- In-place: det blir ikke opprettet kopier av lista, elementer blir kun flyttet. -- Ustabil: garanterer ikke at den relative rekkefølgen til like elementer er lik under sorteringen av listen. +- In-place: Ja, det blir ikke opprettet kopier av lista, elementer blir kun flyttet. +- Stabil: Nei, garanterer ikke at den relative rekkefølgen til like elementer er lik under sorteringen av listen. ## Kjøretid og utregning diff --git a/README.md b/README.md index 09196b9..9b339a1 100644 --- a/README.md +++ b/README.md @@ -515,6 +515,8 @@ $$[B1, C2, C1, A1]$$ og sorterer den kun etter bokstaver, vil rekkefølgen for $C$ forbli uforandret: $$[A1, B1, C2, C1]$$ +Vi sier ofte at _den relative rekkefølgen_ opprettholdes. + ### Counting sort [Link til counting sort](Algoritmer/Sortering/counting_sort.md) @@ -622,17 +624,15 @@ Memoisering innebærer at man cacher løsninger på delproblemer for så å kunn ```python F = [-1]*50 #array to store fibonacci terms -def dynamic_fibonacci(n): +def fibonacci_top_down(n): if (F[n] < 0): if (n==0): F[n] = 0 elif (n == 1): F[n] = 1 else: - F[n] = dynamic_fibonacci(n-1) + dynamic_fibonacci(n-2) + F[n] = fibonacci_top_down(n-1) + fibonacci_top_down(n-2) return F[n] - -print(dynamic_fibonacci(46)) ``` ### Iterasjon (bottom-up) @@ -648,8 +648,6 @@ def fibonacci_bottom_up(n): for i in range(2, n+1): F[i] = F[i-1] + F[i-2] return F[n] - -print(fibonacci_bottom_up(46)) ``` ### Konstruere løsning fra lagrede beslutninger @@ -657,6 +655,9 @@ print(fibonacci_bottom_up(46)) ### Optimal delstruktur +Optimal delstruktur vil si at løsningen er en kombinasjon av optimale løsninger på delinstansene. + +Hva om vi ikke har overlappende delproblemer? Da kan vi ikke bruke memoisering da det ikke er noe hensikt i å huske svarene. ### Overlappende delinstanser @@ -666,7 +667,7 @@ print(fibonacci_bottom_up(46)) Stavkuttingsproblemet: du har en stav av størrelse $n$ som skal deles i biter og selges for størst fortjeneste. Forskjellige størrelser selges for forskjellige priser. -La $n=7$ og $p=<1,4,3,6,8,5,9>$ være en instans av stavkuttingsproblemet. Hva blir den maksimale inntekten, $r_7$? +La $n=7$ og $p=[1,4,3,6,8,5,9]$ være en instans av stavkuttingsproblemet. Hva blir den maksimale inntekten, $r_7$? $$4+4+4+1 = 13$$ $$4+8 = 12$$ @@ -771,7 +772,7 @@ $\Theta(V)$ | $\Theta(V+E)$ Hver node & kant blir sjekket en gang. -### Depth first search (DFS) +### Depth first search (DFS) og parentesteoremet