inf-abi2027/02 Sortieralgorithmen/02 Progammierprojekt.ipynb

132 lines
4.2 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "cd29a032-072b-4ca6-a3e3-efb176993768",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"# Projekt zu Sortierverfahren"
]
},
{
"cell_type": "markdown",
"id": "40d22d02-7d98-41f9-a5c0-d43a372e50a8",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Ziel\n",
"Ziel ist es, verschiedene Sortierverfahren zu implementieren und zu vergleichen"
]
},
{
"cell_type": "markdown",
"id": "e584a65a-a138-4064-85f2-f3fa468cf0ac",
"metadata": {
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## 1. Allgemeine Kriterien\n",
"* Auch zu Hause kann und soll weitergearbeitet werden!\n",
"* Jedes Sortierverfahren soll in ein eigenes Jupyter-Notebook programmiert werden - eine Vorlage steht dafür bereit.\n",
"* Die Funktion, um ein Array mit Zufallszahlen zu erzeugen, kann von Aufgabe 01.06.3 übernommen werden und muss dann in jedes Jupyter-Notebook kopiert werden.\n",
"* Beginn ist am Montag, 24.11. Abgabe ist am Freitag, 12.12.\n",
"* Am Montag, 8.12. findet die Klausur statt."
]
},
{
"cell_type": "markdown",
"id": "1e385fe9-3054-41a9-9eda-192d0468cb0e",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## 2. **MUSS**-Kriterien\n",
"Die *MUSS*-Kriterien müssen auf jeden Fall erfüllt werden. Werden nur diese erfüllt, so liegt die Endnote im Bereich von ca. 6 Punkten.\n",
"* Das Sortierverfahren **SelectionSort** muss sowohl **out-of-place** als auch **in-place** programmiert werden.\n",
" * Hinweis: bei in-place dürfen keine Array-Funktionen wie z.B. `splice` oder `push` verwendet werden!\n",
"* Das Sortierverfahren **InsertionSort** muss programmiert werden.\n",
"* Der Quellcode muss **kurz kommentiert** werden.\n",
" * Es soll nicht jede Zeile kommentiert werden, lediglich Blöcke, was ihr euch dabei gedacht habt und was der jeweilige Abschnitt tut."
]
},
{
"cell_type": "markdown",
"id": "5642f602-be4b-417d-b993-fdf81e1ae37f",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## 3. **SOLL**-Kriterien\n",
"Werden zusätzlich auch noch die SOLL-Kriterien erfüllt, so liegt die Endnote bei ca. 10 Punkten.\n",
"* Als Beispiel für die \"divide-and-conquer\"-Technik soll **MergeSort** programmiert werden.\n",
"* **BubbleSort** soll programmiert werden.\n",
"* Es soll eine Zeitmessung programmiert werden, um die Schnelligkeit der verschiedenen Sortierverfahren miteinander vergleichen zu können.\n",
" * Achtung: die Zeitmessung nur für den Sortiervorgang **ohne** Ausgabe\n",
"* Die *durchschnittlich* benötigte Zeit soll für **alle** Sortierverfahren für unterschiedlich große Arrays gemessen und zusammengestellt/verglichen werden."
]
},
{
"cell_type": "markdown",
"id": "aca2c026-0d46-44ee-b177-65450ba74f89",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## 4. **DARF**-Kriterien\n",
"Werden **alle** Kriterien erfüllt, so liegt die Endnote bei etwa 15 Punkten.\n",
"* Mindestens **zwei** der folgenden Algorithmen dürfen programmiert werden:\n",
" * **HeapSort**\n",
" * **QuickSort**\n",
" * **TimSort**\n",
" * oder ein selbst gewählter Sortieralgorithmus.\n",
"* Begründe für **alle** Algorithmen, ob diese in *deiner* Programmierung stabil oder nicht-stabil funktionieren.\n",
"* Gib die Laufzeit deiner Programmierung für alle Algorithmen an."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Deno",
"language": "typescript",
"name": "deno"
},
"language_info": {
"codemirror_mode": "typescript",
"file_extension": ".ts",
"mimetype": "text/x.typescript",
"name": "typescript",
"nbconvert_exporter": "script",
"pygments_lexer": "typescript",
"version": "5.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}