Compare commits

..

4 Commits

13 changed files with 199 additions and 4 deletions

2
.gitignore vendored
View File

@ -20,6 +20,8 @@
!/protocol/woche*.md !/protocol/woche*.md
!/code !/code
!/code/**/
!/code/**/*.py
################################################################ ################################################################
# ARTEFACTS # ARTEFACTS

View File

@ -22,3 +22,21 @@ In diesem Repository findet man:
- ≥ 50% der Punkte aus den 6 Pflichtserien sollen geschafft werden. - ≥ 50% der Punkte aus den 6 Pflichtserien sollen geschafft werden.
- _nur digitale Abgabe_! - _nur digitale Abgabe_!
## Code ##
Im Unterordner [`code`](./code) kann man ein Python-Projekt finden, in dem verschiedene Algorithmen implementiert werden.
Man kann gerne den Code benutzen, in einer eigenen Repository verändern,
und mit den in dem Kurs präsentierten Algorithmen herumexperimentieren.
Um den Python Code auszuführen, bspw. im Bash:
```bash
python3 code/main.py; # linux, OSX
py -3 code/main.py; # Windows
```
Oder man erstelle einen bash Skript wie `run.sh`, trage die Befehle da ein und führe
```bash
chmod +x run.sh; # nur einmalig nötig
./run.sh
```
aus.

0
code/__init__.py Normal file
View File

0
code/local/__init__.py Normal file
View File

9
code/local/maths.py Normal file
View File

@ -0,0 +1,9 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EXPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import math;
import random;

9
code/local/misc.py Normal file
View File

@ -0,0 +1,9 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EXPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import re;
from textwrap import dedent;

14
code/local/system.py Normal file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EXPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import os;
import sys;
import pathlib;
import platform;
import shutil;
import subprocess;

19
code/local/typing.py Normal file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EXPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from types import TracebackType;
from typing import Any;
from typing import Callable;
from typing import Dict;
from typing import Generator;
from typing import Generic;
from typing import List;
from typing import Tuple;
from typing import Type;
from typing import TypeVar;
from typing import Union;

49
code/main.py Normal file
View File

@ -0,0 +1,49 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IMPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import os;
import sys;
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))));
from code.search.exports import *;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# GLOBAL VARIABLES/CONSTANTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# MAIN PROCESS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def main():
goThroughCases();
return;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# SECONDARY PROCESSES
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def goThroughCases():
## Hier Fälle einfügen:
## Case 1:
L = [1,3,5,7,11,13,17,19,23];
u = 0;
v = len(L) - 1;
x = 13;
p = AlgoInterpol(L, u, v, x);
print('Ausführung des Interplationsalgorithmus:', p, L[p] if p >= 0 else None);
return;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EXECUTE CODE
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if __name__ == '__main__':
main();

0
code/search/__init__.py Normal file
View File

8
code/search/exports.py Normal file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EXPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from code.search.methods import AlgoInterpol;

40
code/search/methods.py Normal file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IMPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from local.maths import *;
from local.typing import *;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# GLOBAL VARIABLES/CONSTANTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ALGORITHM
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def AlgoInterpol(L: List[int], u: int, v: int, x: int) -> int:
if not(L[u] <= x and x <= L[v]):
print('out of bounds!')
return -1;
p = getSuchposition(L, u, v, x);
print('Interpolatiert von u={u}, v={v} -> p = {p}.'.format(u=u, v=v, p=p));
if L[p] == x:
print('gefunden!');
return p;
elif x > L[p]:
print('x > L[p]');
return AlgoInterpol(L, p+1, v, x);
else:
print('x < L[p]');
return AlgoInterpol(L, u, p-1, x);
def getSuchposition(L: List[int], u: int, v: int, x: int) -> int:
r = (x - L[u])/(L[v]-L[u]);
p = math.floor(u + r*(v-u))
return p;

View File

@ -2,13 +2,40 @@
## Agenda ## ## Agenda ##
- [ ] - [x] Wdh: Laufzeitberechnung
- [ ] - Verschachtelte Blöcke
- Blöcke hintereinander
- Rekursion ---> Masterthm
- [x] Big-Oh Notation
- Bestimmung von Klassen
- Vergleiche zw. Klassen
- [x] Masterthm
- Größen: a, b, g
- Wie lässt sich T(n/b) definieren, wenn n/b nicht ganzzahlig ist?
- Man benutze Floor im Masterthm:
```text
Korrekte Variante: T(n) = a·T(floor(n/b)) + g(n)
```
- Bemerkung: man kann einen Trick verwenden, um T und g von Funktionen
auf Funktionen ℝ⁺ ⟶ zu erweitern, nämlich
```text
Setze T(x) := T(floor(x)) für alle x ∈ ℝ⁺
Setze g(x) := g(floor(x)) für alle x ∈ ℝ⁺
```
und kann damit den Ausdruck im Masterthm wieder vereinfachen auf:
```text
T(n) = a·T(n/b) + g(n)
```
und den Satz ohne Probleme beweisen.
- [ ] Suchalgorithmen
- (diese Woche nicht dazu gekommen)
## Nächste Woche ## ## Nächste Woche ##
- - ab Suchalgorithmen
### TODOs (Studierende) ### ### TODOs (Studierende) ###
- - VL-Inhalte aus Wochen 12 durchgehen
- Empfohlen: jeden Suchalgorithmus verstehen und ausprobieren (entweder per Hand oder durch Implementierung)