Ein Repository für den Kurs Algorithmen und Datenstrukturen, Bioinformatik, WiSe 2021–22
Go to file
2021-11-01 20:15:34 +01:00
code master > master: config - giftproblem jetzt 0-1 wertig statt bool 2021-11-01 19:59:21 +01:00
dist master > master: dist Ordner 2021-10-30 10:19:27 +02:00
notes master > master: quellen 2021-10-12 20:40:35 +02:00
protocol master > master: protokoll - woche3 2021-10-29 15:20:50 +02:00
scripts master > master: code - korrigierte Artefacterstellung für python 2021-10-30 10:39:42 +02:00
.env master > master: .env hinzugefügt 2021-10-30 10:18:04 +02:00
.gitignore master > master: .gitignore 2021-10-30 10:17:44 +02:00
README.md master > master: README - Anmerkungen 2021-11-01 20:15:34 +01:00

Algorithmen und Datenstrukturen I, WiSe 2021-22

Diese Repository ist für die Seminargruppe j/l am Freitag um 13:1514:45 im Raum SG 3-14 bzw. SG 4-10 (alternierend).

HINWEIS 1: In diesem Repository werden keine Personen bezogenen Daten der Studierenden gespeichert.

HINWEIS 2: Es besteht absolut gar keine Pflicht, die Materialien in diesem Repo zu verwenden. Diese sind lediglich zusätzliche Hilfsmittel. Im Zweifelsfalls sollte man sich immer an den Definitionen und Auslegungen in der VL orientieren.

In diesem Repository findet man:

Leistungen während des Semesters

  • 12 x freiwillige Serien (unkorrigiert: Lösungen werden per Moodle veröffentlicht)
  • 6 x Pflichtserien (jeweils 2 Wochen Bearbeitungsdauer)
  • wöchentlich werden im den Lernstunden andere Aufgabenblätter im Raum angezeigt und von Studierenden bearbeitet.

Vorleistungen

  • ≥ 50% der Punkte aus den 6 Pflichtserien sollen geschafft werden.
  • nur digitale Abgabe!

Code

Im Unterordner code kann man Codeprojekte in Python und Golang finden, in denen verschiedene Algorithmen implementiert werden (siehe insbes. code/python/src/algorithms und code/golang/internal/algorithms).

Gerne kann man den Code benutzen, in einem eigenen Repository verändern, und mit den im Kurs präsentierten Algorithmen herumexperimentieren.

HINWEIS: Bei meiner Implementierung kann es zu leichten Abweichungen kommen. Bitte stets an dem Material im VL-Skript sich orientieren. Der Hauptzweck der Code-Projekte besteht darin, dass Wissbegierige die Algorithmen konkret ausprobieren können. Alle theoretischen Aspekte werden jedoch im Skript und in den Übungen ausführlicher erklärt.

Systemvoraussetzungen

Bashscripts

Im Ordner scripts sind mehrere Workflows als Bashscripts kodiert. (Man kann natürlich ohne sie arbeiten, insbesondere dann, wenn man einen guten IDE hat.)

Zunächst braucht man einen Bashterminal. Das kommt mit OSX (Terminal) und Linux. Für Windows-User braucht man git-for-windows zu installieren, was auch bash mit installiert. (Und für diejenigen, die VSCode oder andere IDEs benutzen, lässt sich bash als integrierten Terminal im IDE selbst verwenden.)

Den Bashscripts benötigen Ausfuhrrechte. Hierfür führe man

chmod +x scripts/*.sh;

aus. Das muss danach nie wiederholt werden.

Jetzt können wir von dem Hauptordner des Repositorys Befehle wie

./scripts/build.sh
./scripts/build.sh ---mode setup

usw. in der Bash-Console ausführen.

Für das Python-Projekt

Python version 3.x.x (idealerweise zumindest 3.9.5) plus einige Module (siehe code/requirements). Letztere lassen sich mittels

# Benutze die Option `--venv true`, um mit virtuellem Env zu arbeiten:
./scripts/build.sh --lang python --mode setup
## oder:
python3 -m pip install -r code/requirements; # linux, osx
py -3   -m pip install -r code/requirements; # Windows

installieren.

Für das Golang-Projekt

Man braucht go Version 1.17.x. (Man kann bestimmt bei späteren Releases höhere Versionen benutzen. Man muss lediglich dann in ./code/golang/go.mod die Version hochstellen und die Requirements nochmals installieren lassen.) Und einige Packages werden benötigt. Letztere lassen sich mittels

./scripts/build.sh --lang go --mode setup

installieren.

Ausführung

Für das Python-Projekt

pushd code/python/src; ## <- auf Pfad mit main.py wechseln

## Anzeigen der Hilfsanleitung:
python3 main.py -h; # linux, OSX
py -3   main.py -h; # Windows
## Ausführung der Testfälle in code/config.yml:
python3 main.py run [--debug]; # linux, OSX
py -3   main.py run [--debug]; # Windows
## --debug Option benutzen, um Infos über Schritte zu zeigen.

popd; ## <- zum vorherigen Pfad zurückwechseln

Oder man erstelle ein bash Skript wie run.sh, trage die Befehle da ein und führe

chmod +x run.sh; # nur einmalig nötig
./run.sh

aus.

Für das Golang-Projekt

Zuerst den Artefakt kompilieren:

./scripts/build.sh --lang go --mode dist;
## oder:
go build -o "dist/ads" "code/golang/main.go";

und dann mit dem gebauten Artefakt arbeiten:

./dist/ads help; # zeigt Hilfsanleitung
./dist/ads version; # zeigt Version
./dist/ads run [--debug]; # führt code aus

ANMERKUNG. Ich habe versucht in beiden Projekten alle unnötigen Komplikationen von den Algorithmen auszublenden. Dennoch kann es durchaus der Fall sein, dass die Python-Implementierung wesentlich einfacher zu verstehen ist als die Go-Implementierung. Das Go-Projekt wurde v. a. deshalb entwickelt, da man mit Python nicht mit Pointers (»Zeiger«, siehe Woche 3) arbeiten kann. Dennoch versuche ich in beiden Projekten parallel auf einem ähnlichen Stand zu halten. Und beide Projekt sind so konzipiert, dass sie Inputs gleichen Formats (d. h. die config.yml Datei) akzeptieren.