diff --git a/02 Sortieralgorithmen/02 Progammierprojekt.ipynb b/02 Sortieralgorithmen/02 Progammierprojekt.ipynb new file mode 100644 index 0000000..302b266 --- /dev/null +++ b/02 Sortieralgorithmen/02 Progammierprojekt.ipynb @@ -0,0 +1,131 @@ +{ + "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 +} diff --git a/02 Sortieralgorithmen/02 Programmierprojekt/00 Vorlage.ipynb b/02 Sortieralgorithmen/02 Programmierprojekt/00 Vorlage.ipynb new file mode 100644 index 0000000..6fdc8b7 --- /dev/null +++ b/02 Sortieralgorithmen/02 Programmierprojekt/00 Vorlage.ipynb @@ -0,0 +1,260 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7aa14816-da13-4292-bf98-e599bb4d57e3", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "# Programmierung für den Algorithmus:" + ] + }, + { + "cell_type": "raw", + "id": "6889ffe7-f0a7-4371-9edd-636d9da7396d", + "metadata": { + "editable": true, + "raw_mimetype": "", + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [] + }, + { + "cell_type": "markdown", + "id": "25eeadb9-b28c-438d-942e-179c19f05c7d", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Funktion `zufallsArray`\n", + "(einmal programmieren, in jedes Notebook kopieren)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "99f4d96d-9879-41b2-a3e2-4ac9518a0343", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "// erzeugt ein Array mit \"laenge\" zufälligen Zahlen\n", + "function zufallsArray(laenge) {\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "b761b72c-639c-4b0b-9aeb-b290897e2ead", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Funktion `sort`\n", + "Die Funktion bekommt als Parameter ein unsortiertes Array und soll mithilfe des gewählten Sortier-Algorithmus das Array sortieren und zurückgeben." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2272d5d1-f899-4e34-beb0-dfd86b87e349", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "function sort(arr) {\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "a8afd5a3-09f5-41f4-af6c-8b155a402ba1", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Testlauf\n", + "Zur Demonstration mit 10 Einträgen:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0045a5a5-f0f6-40c7-a67e-d7abe8ccb2b6", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "let unsortiert = zufallsArray(10)\n", + "console.log(unsortiert)\n", + "let sortiert = sort(unsortiert)\n", + "console.log(sortiert)" + ] + }, + { + "cell_type": "markdown", + "id": "515167f0-f7bc-4f81-9b6c-fdecddc48cc9", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Zeitmessung\n", + "Mit verschieden großen Arrays (ausprobieren, welche Größe Sinn ergibt).\n", + "*(Selbstständig programmieren)*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a5c7b17-5096-48a0-a52e-7ce0a7518e4f", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "1c726b13-ce9c-4853-a720-5536c1ec002f", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Ergebnisse der Zeitmessung:" + ] + }, + { + "cell_type": "raw", + "id": "6987bfbd-0436-49b3-a336-5331027d0159", + "metadata": { + "editable": true, + "raw_mimetype": "", + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [] + }, + { + "cell_type": "markdown", + "id": "c1e36d9e-0afc-45be-9e4e-887e594e557c", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Laufzeit" + ] + }, + { + "cell_type": "raw", + "id": "8a15c48b-9f03-4199-9824-fc6d3ff6e90d", + "metadata": { + "editable": true, + "raw_mimetype": "", + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [] + }, + { + "cell_type": "markdown", + "id": "f96396ff-d977-4704-b75e-b16ba5887440", + "metadata": { + "editable": false, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## stabil oder nicht-stabil?\n", + "mit Begründung:" + ] + }, + { + "cell_type": "raw", + "id": "0e8f53ab-c4ec-4f31-8c9e-fec70956e07e", + "metadata": { + "editable": true, + "raw_mimetype": "", + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [] + } + ], + "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 +}