From 68ad81116cc32083e68c452c4c6232bf13c88771 Mon Sep 17 00:00:00 2001
From: Matthias Konitzny <konitzny@ibr.cs.tu-bs.de>
Date: Thu, 15 Sep 2022 12:03:13 +0200
Subject: [PATCH] Updated sample dataset to contain numeric ids only and
 generate objectGroups correctly

---
 datasets/AuD-Inhalt2.xlsx | Bin 43565 -> 35577 bytes
 datasets/xlsxTOjson.ipynb |  87 ++++++++++++++++++++++++++++----------
 2 files changed, 64 insertions(+), 23 deletions(-)

diff --git a/datasets/AuD-Inhalt2.xlsx b/datasets/AuD-Inhalt2.xlsx
index be2b7e5d969a1c4e43510e5b55937a1df851ece5..d7c95307522a10c0b29f893ddbc803d08ad84cf3 100644
GIT binary patch
literal 35577
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

literal 43565
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
Y{a;N96ZIGX07R%yF6uF{&HAhN9~am_^#A|>

diff --git a/datasets/xlsxTOjson.ipynb b/datasets/xlsxTOjson.ipynb
index a9447ce..22e75ae 100644
--- a/datasets/xlsxTOjson.ipynb
+++ b/datasets/xlsxTOjson.ipynb
@@ -2,19 +2,19 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 2,
    "id": "86f8df89-a483-4093-9098-41196f891c64",
    "metadata": {},
    "outputs": [],
    "source": [
     "import pandas as pd\n",
     "import numpy as np\n",
-    "import simplejson as json"
+    "import json"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 3,
    "id": "efd2d705-f64e-433e-a26f-ed8d7c78c667",
    "metadata": {},
    "outputs": [],
@@ -30,7 +30,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "id": "b6873712-56e4-46a9-8bec-031093dd28b1",
    "metadata": {},
    "outputs": [],
@@ -40,7 +40,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "id": "8cc123c3-8fd7-4c82-ba85-3ca5d7d7bfa2",
    "metadata": {},
    "outputs": [
@@ -53,7 +53,7 @@
        "      dtype='object')"
       ]
      },
-     "execution_count": 4,
+     "execution_count": 5,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -64,53 +64,94 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 52,
+   "id": "b7d12c35-c334-4beb-ba2a-a8753e8100e7",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "COLOR_PALETTE = [\n",
+    "    \"rgb(104, 169, 77)\",\n",
+    "    \"rgb(102, 75, 154)\",\n",
+    "    \"rgb(41, 171, 226)\",\n",
+    "    \"rgb(224, 133, 35)\",\n",
+    "    \"rgb(214, 207, 126)\",\n",
+    "    \"rgb(239, 65, 35)\",\n",
+    "    \"rgb(255, 255, 255)\",\n",
+    "]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 53,
    "id": "e9481135-3734-45ed-9847-8f9426bd0f00",
    "metadata": {},
    "outputs": [],
    "source": [
     "nds = []\n",
-    "lks = []"
+    "lks = []\n",
+    "object_groups = []\n",
+    "name_to_group = {}\n",
+    "id_map = {}\n",
+    "node_ids = 0\n",
+    "group_ids = 0"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "id": "3b4f6841-2c52-4bc4-a03e-005eb7153881",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "for idx, row in table.iterrows():\n",
+    "    id_map[row[\"id\"]] = node_ids\n",
+    "    node_ids += 1\n",
+    "    if row[\"Art\"] not in name_to_group:\n",
+    "        name_to_group[row[\"Art\"]] = group_ids\n",
+    "        group = {\"id\": group_ids, \"name\": row[\"Art\"], \"color\": COLOR_PALETTE[group_ids % len(COLOR_PALETTE)]}\n",
+    "        object_groups.append(group)\n",
+    "        group_ids += 1"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 55,
    "id": "a138d20d-4dc3-4eb8-8ebd-71d1fb3f0cbf",
    "metadata": {},
    "outputs": [],
    "source": [
     "for idx, row in table.iterrows():\n",
-    "    node = {'id':row[\"id\"], 'name':row[\"name\"], 'description':row[\"description\"], 'type':row[\"Art\"], 'video': row[\"Videodatei\"]}\n",
+    "    node = {'id':id_map[row[\"id\"]], 'name':row[\"name\"], 'description':row[\"description\"], 'type':name_to_group[row[\"Art\"]], 'video': row[\"Videodatei\"]}\n",
     "    nds.append({k: v for k, v in node.items() if check_value(v)}) # Remove empty attributes\n",
     "    for link in str(row[\"Links\"]).split(', '):\n",
     "        if link != \"nan\": \n",
-    "            lks.append({'source':row[\"id\"], 'target':int(link)})"
+    "            target = id_map[link] if link in id_map else id_map[int(link)]\n",
+    "            lks.append({'source':id_map[row[\"id\"]], 'target':target})"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 57,
    "id": "c06e658c-33d1-4ba8-8a47-ae857984d6ce",
    "metadata": {},
    "outputs": [],
    "source": [
-    "result = {'nodes':nds, 'links':lks}"
+    "result = {'nodes':nds, 'links':lks, 'objectGroups': object_groups}"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 58,
    "id": "565d11cd-47b6-402e-a734-b4b8a5a66181",
    "metadata": {},
    "outputs": [],
    "source": [
-    "jr = json.dumps(result, ensure_ascii = True, ignore_nan=True)"
+    "jr = json.dumps(result, ensure_ascii = True)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 59,
    "id": "de7e0bae",
    "metadata": {
     "collapsed": false,
@@ -128,28 +169,28 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 61,
    "id": "589984bd-3033-484e-a7a9-bfcaf4547372",
    "metadata": {},
    "outputs": [],
    "source": [
-    "with open(\"aud1.json\", \"w\") as f:\n",
+    "with open(\"aud5.json\", \"w\") as f:\n",
     "    f.write(jr)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 60,
    "id": "5ec60a2a-6703-46e4-a649-be731cfbe428",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "'{\"nodes\": [{\"id\": 1, \"name\": \"Begr\\\\u00fc\\\\u00dfung und Organisatorisches\", \"description\": \"Eine Einf\\\\u00fchrung in die Algorithmen und Datenstrukturen\", \"type\": \"Vorlesung\", \"video\": \"https://www.ibr.cs.tu-bs.de/courses/ws2122/aud/videos/VL0.mp4\"}, {\"id\": 2, \"name\": \"Rundreise Problem\", \"description\": \"Gegeben: Ein Graph G = (V, E) mit Kantenl\\\\u00e4ngen we, Gesucht: Eine k\\\\u00fcrzeste Rundreise, welche alle Knoten im Graphen einmal besucht und im Startknoten wieder endet.\", \"type\": \"Beispiel\", \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/2_Bsp_Rundreise-Problem.mp4\"}, {\"id\": 3, \"name\": \"Puzzle\", \"description\": \"Jeder hat schon einmal ein Puzzle gel\\\\u00f6st, doch wie sieht das aus algorithmischer Sicht aus?\", \"type\": \"Beispiel\", \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/3_Bsp_Puzzle.mp4\"}, {\"id\": 4, \"name\": \"Algorithmus-Definition\", \"description\": \"Zitat: \\'Ein Algorithmus ist eine aus endlich vielen Schritten bestehende eindeutige Handlungsvorschrift zur L\\\\u00f6sung eines Problems oder einer Klasse von Problemen.\\'-Wikipedia. Dabei wird als Input eine Problembeschreibung gegeben und durch Anwendung des Algorithmus eine fertige L\\\\u00f6sung des Problems ermittelt. Oft spielt die Laufzeit des Algorithmus eine gro\\\\u00dfe Rolle. Sie beschreibt, wie viele einzelne Schritte n\\\\u00f6tig sind um das Problem zu l\\\\u00f6sen, in Abh\\\\u00e4ngigkeit von der Gr\\\\u00f6\\\\u00dfe des Problems.\", \"type\": \"Definition\", \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/4_Def_Algorithmus.mp4\"}, {\"id\": 5, \"name\": \"Kofferpacken\", \"description\": \"Kann ich alle meine Gep\\\\u00e4ckst\\\\u00fccke auf zwei gleich gro\\\\u00dfe Koffer aufteilen? <br>Gegeben: Eine Menge von n Objekten, jedes mit einer Gr\\\\u00f6\\\\u00dfe li; <br>Gesamtgr\\\\u00f6\\\\u00dfe \\\\u2211 li = 2K<br>Gesucht: Eine Verteilung auf zwei Koffer der Gr\\\\u00f6\\\\u00dfe K\", \"type\": \"Beispiel\"}, {\"id\": 6, \"name\": \"P und NP\", \"description\": \"Die Klassen P und NP teilen algorithmische Probleme in zwei Kategorien auf. Die eine, bei der man mithilfe eines Algorithmus eine L\\\\u00f6sung Pfinden kann (P) und eine zweite, bei der bisher nur das NachPr\\\\u00fcfen einer existierenden L\\\\u00f6sung gelingt (NP). Wenn es allerdings keine L\\\\u00f6sung gibt, so l\\\\u00e4sst sich das bei Problemen der Klasse NP nur schlecht beweisen.\", \"type\": \"Definition\"}, {\"id\": 7, \"name\": \"Einf\\\\u00fchrung des Algorithmusbegriffs\", \"description\": \"In dieser Vorlesung wird der Begriff \\'Algorithmus\\' definiert und erkl\\\\u00e4rt.\", \"type\": \"Vorlesung\", \"video\": \"https://www.ibr.cs.tu-bs.de/courses/ws2122/aud/videos/VL1.mp4\"}, {\"id\": 8, \"name\": \"Datenstrukturen\", \"description\": \"Eine Datenstruktur erlaubt es, die f\\\\u00fcr eine Aufgabe notwendigen Informationen geeignet zu repr\\\\u00e4sentieren und den Zugriff und die Verwaltung w\\\\u00e4hrend der Bearbeitung in effizienter Weise zu erm\\\\u00f6glichen.\", \"type\": \"Definition\"}, {\"id\": 21, \"name\": \"Organisation und Pseudocode\", \"description\": \"In dieser \\\\u00dcbung haben wir noch einmal organisatorische Dinge besprochen und uns mit dem Thema Pseudocode auseinandergesetzt.\", \"type\": \"\\\\u00dcbung\", \"video\": \"https://www.ibr.cs.tu-bs.de/courses/ws2122/aud/videos/U0.mp4\"}, {\"id\": 9, \"name\": \"Pseudocode\", \"description\": \"Pseudocode ist eine Art Algorithmen einigerma\\\\u00dfen einheitlich zu notieren. Dabei werden zwar Schl\\\\u00fcsselw\\\\u00f6rter genutzt um eine gewisse Einheitlichkeit zu bieten und gleichzeitig die Logik zu beschreiben, allerdings geht es noch nicht darum einen compilierbaren Code mit korrekter Syntax zu schreiben.\", \"type\": \"Definition\", \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/9_Def_Pseudocode.mp4\"}, {\"id\": 10, \"name\": \"Einleitung in die Graphen\", \"description\": \"Eine Einleitung in die Welt der Graphen am wohl bekanntesten Beispiel, dem Haus des Nikolaus.\", \"type\": \"Vorlesung\"}, {\"id\": 11, \"name\": \"Haus des Nikolaus\", \"description\": \"Jeder kennt das Haus vom Nikolaus, doch wie wird es gemalt? Wo setzt man den Stift an und wo wieder ab?\", \"type\": \"Beispiel\"}, {\"id\": 12, \"name\": \"Eulertouren\", \"description\": \"Ein Eulerweg ist ein Weg in einem Graphen, welcher alle Kanten nutzt. Eine Eulertour kehrt dar\\\\u00fcber hinaus auch zum Startknoten zur\\\\u00fcck.\", \"type\": \"Definition\"}, {\"id\": 13, \"name\": \"Graphenbegriffe\", \"description\": \"Ein Graph besteht aus Knoten und Kanten das sollte inzwischen jeder wissen, doch was parallele Kanten, Schleifen, (geschlossene) Wege, Pfade, Kreise, Eulerwege/-touren, sowie Hamiltonpfade und -kreise sind wird in dieser Vorlesung noch einmal genau definiert.\", \"type\": \"Vorlesung\"}, {\"id\": 14, \"name\": \"Graph\", \"description\": \"\\\\u00dcber Graphen haben wir bereits viel gesprochen, doch was ein Graph genau ist und wie man ihn definiert erf\\\\u00e4hrst du hier.\", \"type\": \"Definition\"}, {\"id\": 15, \"name\": \"Wege in Graphen\", \"description\": \"Eine Kantenfolge W in einem Graphen G hei\\\\u00dft Weg, wenn sich keine Kante darin wiederholt und geschlossener Weg (Tour), wenn man am Ende wieder am Startknoten ankommt. Wiederholt sich kein Knoten spricht man von einem Pfad. Ein Kreis ist ein geschlossener Pfad. Bei einem Eulerweg/ einer Eulertour werden alle Kanten des Graphen genutzt. Ein Hamiltonpfad/kreis nutzt hingegen alle Knoten.\", \"type\": \"Definition\"}, {\"id\": 16, \"name\": \"Beweistechniken Teil 1\", \"description\": \"In der Mathematik und auch in der Algorithmik spielen Beweise immer wieder eine gro\\\\u00dfe Rolle. Es geht darum Aussagen zu belegen, zu widerlegen oder auf bestimmte Elemente anzuwenden. Dazu gibt es verschiedene Beweistechniken, welche ihr hier finden k\\\\u00f6nnt:\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 17, \"name\": \"Bedingungen f\\\\u00fcr Eulertouren\", \"description\": \"In dieser Vorlesung werden notwendige Bedingungen f\\\\u00fcr Eulertouren erleutert. Zus\\\\u00e4tzlich wird das Kapitel 2 noch einmal zusammengefasst und es werden Algorithmen eingef\\\\u00fchrt um die uns bisher bekannten Probleme zu l\\\\u00f6sen.\", \"type\": \"Vorlesung\"}, {\"id\": 18, \"name\": \"Algorithmus Wegfindung\", \"description\": \"Dieser Algorithmus (2.7) erh\\\\u00e4lt als Input einen Graphen G mit h\\\\u00f6chstens zwei ungeraden Knoten und liefert als Output einen Weg in G\", \"type\": \"Algorithmus\"}, {\"id\": 19, \"name\": \"Algorithmus von Hierholzer\", \"description\": \"Dieser Algorithmus (2.8) erh\\\\u00e4lt als Input einen zusammenh\\\\u00e4ngenden Graphen G mit h\\\\u00f6chstens zwei ungeraden Knoten und liefert als Output einen Eulerweg, bzw. eine Eulertour in G. Dazu wird auch Algorithmus 2.7 zum Finden von Wegen in G verwendet.\", \"type\": \"Algorithmus\"}, {\"id\": 20, \"name\": \"Algorithmus von Fleury\", \"description\": \"Dieser Algorithmus(2.13) erh\\\\u00e4lt als Input einen Graphen G mit h\\\\u00f6chstens 2 ungeraden Knoten und liefert als Output einen Weg in G. Der Algorithmus hat als Grundlage Algorithmus 2.7 zum Finden von Wegen. Auch l\\\\u00e4sst sich zeigen, dass man mit diesem Algorithmus eine Eulertour/einen Eulerweg finden kann.\", \"type\": \"Algorithmus\"}, {\"id\": 22, \"name\": \"Anwendung von Graphen\", \"description\": \"In dieser Vorlesung geht es um den Einsatzzweck von Graphen und es wird am Beispiel der Erd\\\\u00f6s- und der Kevin Bacon Zahl gezeigt, welche Zusammenh\\\\u00e4nge dargestellt werden k\\\\u00f6nnen.\", \"type\": \"Vorlesung\"}, {\"id\": 23, \"name\": \"Beweistechniken Teil 2\", \"description\": \"In dieser \\\\u00dcbung geht es um die Beweistechnik der vollst\\\\u00e4ndigen Induktion. Diese ist die wohl meist benutzte Beweistechnik in der Algorithmik. Auch werden Anwendungsbeispiele wie z.B. die Gau\\\\u00df\\'sche Summenformel oder der Zusammenhang in Graphen  erl\\\\u00e4utert.\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 24, \"name\": \"Graphenscan\", \"description\": \"In dieser Vorlesung wird der Graphenscanalgorithmus vorgestellt um Zusammenhangskomponenten in Graphen zu finden.\", \"type\": \"Vorlesung\"}, {\"id\": 25, \"name\": \"Algorithmus Graphenscan\", \"description\": \"Dieser Algorithmus (3.7) erh\\\\u00e4hlt als Input einen Graphen G = (V,E) und einen Knoten s darin und liefert als Output eine Knotenmenge Y aus V, die von s aus erreichbar ist, sowie eine Kantenmenge T aus E, welche die Erreichbarkeit sicherstellt\", \"type\": \"Algorithmus\"}, {\"id\": 26, \"name\": \"Datenstrukturen Teil 1\", \"description\": \"In dieser Vorlesung werden die Datenstrukturen Warteschlange (First In - First Out) und Stapel (Last In - First Out) vorgestellt. Au\\\\u00dferdem geht es um ihre Rolle f\\\\u00fcr Algorithmen und wie man sie implementieren kann. Das ganze wird am Beispiel des Graphscan Algorithmus gezeigt und somit werden auch Breiten- und Tiefensuche eingef\\\\u00fchrt.\", \"type\": \"Vorlesung\"}, {\"id\": 27, \"name\": \"Warteschlange\", \"description\": \"Eine Warteschlange ist eine Datenstruktur, welche nach dem Prinzip \\'First In - First Out\\' arbeitet. Man findet sie auch im allt\\\\u00e4glichen Leben oft wieder, wenn man sich beispielsweise an der Kasse anstellen muss. Der Kunde der zuerst da war, wir auch zuerst bedient.\", \"type\": \"Definition\"}, {\"id\": 28, \"name\": \"Stapel\", \"description\": \"Ein Stapel ist eine Datenstruktur, welche nach dem Prinzip \\'Last In - First Out\\' arbeitet. Im allt\\\\u00e4glichen Leben findet man diese Form der Datenstruktur beim Geschirr abwaschen, man stapelt die Teller und der Teller der zuletzt dreckig wurde wird als erstes gereinigt, da man die Teller von oben herunter nimmt.\", \"type\": \"Definition\"}, {\"id\": 29, \"name\": \"Breitensuche\", \"description\": \"Die Breitensuche ist im Prinzip der Graphscan Algorithmus, ausgef\\\\u00fchrt mithilfe einer Warteschlange als Datenstruktur. Sie breitet sich aus wie eine Welle.\", \"type\": \"Algorithmus\"}, {\"id\": 30, \"name\": \"Tiefensuche\", \"description\": \"Die Breitensuche ist im Prinzip der Graphscan Algorithmus, ausgef\\\\u00fchrt mithilfe eines Stapels als Datenstruktur. Dabei werden eher einzelne Pfade gelaufen.\", \"type\": \"Algorithmus\"}, {\"id\": 31, \"name\": \"Datenstrukturen Teil 2\", \"description\": \"In dieser Vorlesung geht es einerseits um die Anwendung der Breitensuche, andererseits werden noch 2 weitere Datenstrukturen eingef\\\\u00fchrt: Die Inzidenz/-Adjazenzmatrix, sowie die Kantenliste.\", \"type\": \"Vorlesung\"}, {\"id\": 32, \"name\": \"Inzidenz/-Adjazenzmatrix\", \"description\": \"In einer Inzidenzmatrix wird mithilfe von 1en und 0en dargestellt, welche Knoten mit welchen Kanten inzident (zusammentreffend) sind. Bei einer Adjazenzmatrix wird dargestellt, welche Knoten adjazent (durch eine Kante verbunden) sind.\", \"type\": \"Definition\"}, {\"id\": 33, \"name\": \"Kanten-/Adjazenzliste\", \"description\": \"Eine Kantenliste ist eine Liste bestehend aus eintr\\\\u00e4gen der Form {vx, vy}, welche bedeuten, dass eine Kante zwischen vx und vy im Graphen existiert.\", \"type\": \"Definition\"}, {\"id\": 34, \"name\": \"Wachstum/O-Notation\", \"description\": \"In dieser Vorlesung wird noch einmal mit den Adjazenz- und Kantenlisten abgeschlossen. Au\\\\u00dferdem schauen wir uns einmal das Wachstum von Funktionen an und definieren und die O-Notation um damit zu arbeiten.\", \"type\": \"Vorlesung\"}, {\"id\": 35, \"name\": \"O-Notation\", \"description\": \"Die O-Notation wird genutzt um das Wachstum von Funktionen abzusch\\\\u00e4tzen. Damit k\\\\u00f6nnen Gr\\\\u00f6\\\\u00dfenordnungen und Wachstumsverhalten beschrieben werden.\", \"type\": \"Definition\"}, {\"id\": 36, \"name\": \"Graphscan \\\\u00dcbung\", \"description\": \"Simple Anwengung des Graphscan Algorithmus, einmal als Breiten- und als Tiefensuche. Wann welcher Algorithmus besser geeignet ist wird in dieser \\\\u00dcbung erkl\\\\u00e4rt.\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 37, \"name\": \"Wachstum\", \"description\": \"Die O-Notation wird genutzt um das Wachstum von Funktionen abzusch\\\\u00e4tzen. In dieser \\\\u00dcbung werden Zusammenh\\\\u00e4nge zwischen der Gr\\\\u00f6\\\\u00dfe des Inputs und dem Wachstum, sowie Relationen zwischen Laufzeitklassen n\\\\u00e4her beleuchtet. Auch wird die O-Notation an verschiedenen Beispielen erkl\\\\u00e4rt.\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 38, \"name\": \"Wiederholung: Suche in Graphen\", \"description\": \"Noch einmal ein R\\\\u00fcckblick auf alles, was bisher in \\'Kapitel 3: Suche in Graphen\\' passiert ist. \", \"type\": \"Vorlesung\"}, {\"id\": 39, \"name\": \"Eigenschaften von DFS und BFS\", \"description\": \"In dieser Vorlesung betrachten wir die Breiten- und Tiefensuche im Hinblick auf ihre Laufzeit. Dabei wird anschaulich, wie die Algorithmen arbeiten, wann man sie am besten nutzen sollte und wie man Laufzeiten beweisen kann.\", \"type\": \"Vorlesung\"}, {\"id\": 40, \"name\": \"Induktionsbeweise Bsp.\", \"description\": \"Einige Beispiele, bei denen der Induktionsbeweis auch in der Graphentheorie zum Einsatz kommt. \", \"type\": \"Beispiel\"}, {\"id\": 41, \"name\": \"Adjazenzliste\", \"description\": \"Wie eine Adjazenzliste f\\\\u00fcr einen Graphen erstellt werden kann wird hier einmal genauer beleuchtet.\", \"type\": \"Beispiel\"}, {\"id\": 42, \"name\": \"Graphscan Beispiel\", \"description\": \"Hier wird der Graphscan Algorithmus einmal mithilfe einer Adjazenzliste als Datenstruktur durchgef\\\\u00fchrt.\", \"type\": \"Beispiel\"}, {\"id\": 43, \"name\": \"Verschiedene dynamische Datenstrukturen\", \"description\": \"In dieser Vorlesung beginnen wir dynamische Datenstrukturen einzuf\\\\u00fchren. Es werden Stapel, Warteschlangen und verkettete Listen vorgestellt. Au\\\\u00dferdem besch\\\\u00e4ftigen wir uns mit bin\\\\u00e4rer Suche.\", \"type\": \"Vorlesung\"}, {\"id\": 44, \"name\": \"Verkettete Liste\", \"description\": \"Eine verkettete Liste ist eine dynamische Datenstruktur. Dabei werden f\\\\u00fcr die einzelnen Elemente jeweils Vorg\\\\u00e4nger und Nachfolger mit gespeichert. Der Vorteil hierbei ist, dass neue Eintr\\\\u00e4ge \\\\u00fcberall eingef\\\\u00fcgt werden k\\\\u00f6nnen.\", \"type\": \"Definition\"}, {\"id\": 45, \"name\": \"Bin\\\\u00e4re Suche\", \"description\": \"Dieser Algorithmus (4.1) erh\\\\u00e4lt als Input einen sortierten Array mit Eintr\\\\u00e4gen S[I], Suchwert WERT, linke Randposition LINKS, rechte Randposition RECHTS und liefert als Output die Position von WERT zwischen Arraypositionen LINKS und RECHTS, falls existent.\", \"type\": \"Algorithmus\"}, {\"id\": 46, \"name\": \"Bin\\\\u00e4re Suche Idee\", \"description\": \"Ein einleitendes Beispiel zur Bin\\\\u00e4ren Suche.\", \"type\": \"Beispiel\"}, {\"id\": 47, \"name\": \"Bin\\\\u00e4re Suche Beispiel\", \"description\": \"Der Algorithmus f\\\\u00fcr die bin\\\\u00e4re Suche einmal an zwei Beispielen angewandt.\", \"type\": \"Beispiel\"}, {\"id\": 48, \"name\": \"Bin\\\\u00e4re Suchb\\\\u00e4ume\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns genauer mit bin\\\\u00e4ren Suchb\\\\u00e4umen und den darauf anwendbaren Operationen, wie Maximum, Minimum, einf\\\\u00fcgen und l\\\\u00f6schen von Knoten, sowie mit der bin\\\\u00e4ren Suche.\", \"type\": \"Vorlesung\"}, {\"id\": 49, \"name\": \"Bin\\\\u00e4rer Suchbaum\", \"description\": \"In dieser Definition werden die Begriffe \\'gerichteter Graph/Baum\\', \\'H\\\\u00f6he eines Baumes\\', \\'(voller/vollst\\\\u00e4ndiger) bin\\\\u00e4rer Baum\\', \\'Blatt eines Baumes\\', \\'Teilbaum eines Knotens\\' und \\'bin\\\\u00e4rer Suchbaum\\' definiert und erkl\\\\u00e4rt.\", \"type\": \"Definition\"}, {\"id\": 50, \"name\": \"Grundoperationen Suchbaum\", \"description\": \"Minimum/Maximum finden, Suche im Baum, Nachfolger finden, Einf\\\\u00fcgen und L\\\\u00f6schen sind die Grundoperationen, welche auf bin\\\\u00e4re Suchb\\\\u00e4ume angewendet werden k\\\\u00f6nnen. Und hier findet ihr die Algorithmen dazu.\", \"type\": \"Algorithmus\"}, {\"id\": 51, \"name\": \"AVL-B\\\\u00e4ume\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit speziellen bin\\\\u00e4ren Suchb\\\\u00e4umen, den AVL-B\\\\u00e4umen und ihren Eigenschaften.\", \"type\": \"Vorlesung\"}, {\"id\": 52, \"name\": \"AVL-Baum\", \"description\": \"Ein bin\\\\u00e4rer Suchbaum ist h\\\\u00f6henbalanciert, wenn sich f\\\\u00fcr jeden Knoten v die H\\\\u00f6he der beiden Kinder von v um h\\\\u00f6chstens 1 unterscheidet. Ein h\\\\u00f6henbalancierter Suchbaum hei\\\\u00dft auch AVL-Baum.\", \"type\": \"Definition\"}, {\"id\": 53, \"name\": \"dyn. Operationen auf AVL-B\\\\u00e4umen\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit dem Erhalt der AVL-Eigenschaft eines bin\\\\u00e4ren Suchbaumes bei Einf\\\\u00fcge- und L\\\\u00f6schoperationen. Au\\\\u00dferdem werfen wir einen Blick auf die Fibonacci-Zahlen.\", \"type\": \"Vorlesung\"}, {\"id\": 54, \"name\": \"AVL-Rotation\", \"description\": \"Dieser Algorithmus (4.9) erh\\\\u00e4lt als Input einen Knoten x eines bin\\\\u00e4ren Suchbaumes T, Vaterknoten y, Gro\\\\u00dfvaterknoten z und liefert als Output den bin\\\\u00e4ren Suchbaum T nach Umstrukturierung mit x, y, z.\", \"type\": \"Algorithmus\"}, {\"id\": 55, \"name\": \"Fibonacci-Zahlen\", \"description\": \"Die Fibonacci-Zahlen sind eine rekursiv definierte Zahlenfolge, bei der sich eine Zahl aus der Summe ihrer zwei Vorg\\\\u00e4nger ergibt. Dabei sind die ersten beiden Elemente gegeben als 1. Die Fibonacci-Zahlen finden sich \\\\u00fcberall in der Natur wieder und haben nicht wenig mit unserer Auffassung von Sch\\\\u00f6nheit zu tun.\", \"type\": \"Definition\"}, {\"id\": 56, \"name\": \"B\\\\u00e4ume-\\\\u00dcbung\", \"description\": \"In dieser \\\\u00dcbung besch\\\\u00e4ftigen wir uns noch einmal genauer mit einigen Datenstrukturen wie verketteten Listen, bin\\\\u00e4ren B\\\\u00e4umen und AVL-B\\\\u00e4umen.\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 57, \"name\": \"Laufzeit von Algorithmus 2.7\", \"description\": \"Wir betrachten einmal die Laufzeit des Hierholzer-Algorithmus (2.7) und im Zusammenhang damit auch verkettete Listen.\", \"type\": \"Beispiel\"}, {\"id\": 58, \"name\": \"Beispiel Suchbaumoperationen\", \"description\": \"In diesem Teil der \\\\u00dcbung werden einmal die Operationen Einf\\\\u00fcgen, Suchen, Vorg\\\\u00e4nger/Nachfolger finden, l\\\\u00f6schen und verschmelzen von bin\\\\u00e4ren Suchb\\\\u00e4umen ge\\\\u00fcbt.\", \"type\": \"Beispiel\"}, {\"id\": 59, \"name\": \"AVL-Baum-Operationen\", \"description\": \"Wir schauen uns noch einmal genauer die AVL-B\\\\u00e4ume an und was man damit machen kann. Insbesondere auch die Operationen L\\\\u00f6schen und Einf\\\\u00fcgen.\", \"type\": \"Beispiel\"}, {\"id\": 60, \"name\": \"Dynamische Datenstrukturen 2\", \"description\": \"In dieser Vorlesung schauen wir noch einmal auf das bisher in Kapitel 4 gelernte zur\\\\u00fcck. Au\\\\u00dferdem geben wir einen \\\\u00dcberblick \\\\u00fcber einige weitere dynamische Datenstrukturen wie Rot-Scharz-B\\\\u00e4umme, B-B\\\\u00e4ume und Heaps.\", \"type\": \"Vorlesung\"}, {\"id\": 61, \"name\": \"Rot-Schwarz-B\\\\u00e4ume\", \"description\": \"Ein bin\\\\u00e4rer Suchbaum hei\\\\u00dft Rot-Schwarz-Baum, wenn er die folgenden Eigenschaften erf\\\\u00fcllt:<br>1. Jeder Knoten ist entweder rot oder schwarz.<br>2. Die Wurzel ist schwarz.<br>3. Jedes Blatt (NIL) ist schwarz.<br>4. Wenn ein Knoten rot ist, sind seine beiden Kinder schwarz.<br>5. F\\\\u00fcr jeden Knoten enthalten alle Pfade nach unten zu einem Blatt des Teilbaumes die gleiche Anzahl schwarzer Knoten.\", \"type\": \"Definition\"}, {\"id\": 62, \"name\": \"B-B\\\\u00e4ume\", \"description\": \"B-B\\\\u00e4ume sind bin\\\\u00e4re Suchb\\\\u00e4ume, welche f\\\\u00fcr externen Speicher (HDDs) optimiert sind. Dabei wird die H\\\\u00f6he des Baumes minimiert und es werden den Knoten mehr Schl\\\\u00fcssel zugewiesen.\", \"type\": \"Definition\"}, {\"id\": 63, \"name\": \"Heaps\", \"description\": \"Ein gerichteter bin\\\\u00e4rer Baum hei\\\\u00dft bin\\\\u00e4rer Min/Max-Heap, wenn jeder Knoten einen Schl\\\\u00fcssel hat, alle Ebenen au\\\\u00dfer der \\'letzten\\' genau 2 Knoten haben, auf der \\'letzten\\' Ebene die linken n-(2^h)+1 Positionen besetzt sind und jeder Schl\\\\u00fcssel eines Knotens h\\\\u00f6chstens/mindestens so gro\\\\u00df ist wie die seiner Kinder.\", \"type\": \"Definition\"}, {\"id\": 64, \"name\": \"Einf\\\\u00fchrung in das Sortieren\", \"description\": \"In dieser Vorlesung geben wir eine Einf\\\\u00fchrung in das Oberthema Sortieren. Wir stellen au\\\\u00dferdem einen Sortieralgorithmus mit dem Namen Mergesort vor und stellen grundlegende \\\\u00dcberlegungen zur Laufzeit von Sortieralgorithmen an.\", \"type\": \"Vorlesung\"}, {\"id\": 65, \"name\": \"Merge-Sort\", \"description\": \"Dieser Algorithmus (5.1) erh\\\\u00e4lt als Input ein Subarray von A=[1,...,n], der bei Index p beginnt und bei Index r endet, d.h. A[p,...,r] und liefert als Output ein sortiertes Subarray. Wichtig ist daf\\\\u00fcr auch die Subroutine (5.2), welche als Input zwei sortierte Subarrays von A=[1,...,n], d.h. A[p,...,q] und A[q+1,...,r] erh\\\\u00e4lt und als Output das sortierte Subarray A[p,...,r] liefert.\", \"type\": \"Algorithmus\"}, {\"id\": 66, \"name\": \"Sortier-Laufzeitschranken\", \"description\": \"In dieser Vorlesung leiten wir konkrete Laufzeitschranken f\\\\u00fcr das Problem des Sortierens einer Liste von Zahlen her. Zudem machen wir uns Gedanken \\\\u00fcber das L\\\\u00f6sen von Rekursionsgleichungen.\", \"type\": \"Vorlesung\"}, {\"id\": 67, \"name\": \"Permutation\", \"description\": \"Eine Permutation P ist eine Umsortierung von n Objekten.\", \"type\": \"Definition\"}, {\"id\": 68, \"name\": \"Erzeugende Funktionen\", \"description\": \"Erzeugende Funktionen k\\\\u00f6nnen genutzt werden um Rekursionen zu l\\\\u00f6sen.\", \"type\": \"Definition\"}, {\"id\": 69, \"name\": \"Erzeugende Funktionen/Mastertheorem\", \"description\": \"In dieser Vorlesung besprechen wir weitere Details zu erzeugenden Funktionen und f\\\\u00fchren das Master-Theorem ein.\", \"type\": \"Vorlesung\"}, {\"id\": 70, \"name\": \"erzeugende Funktionen Fibonacci-Zahlen\", \"description\": \"In diesem Beispiel wird einmal die erzeugende Funktion der Fibonacci-Zahlen hergeleitet.\", \"type\": \"Beispiel\"}, {\"id\": 71, \"name\": \"Master-Theorem\", \"description\": \"Das Master-Theorem bietet eine schnelle L\\\\u00f6sung f\\\\u00fcr die Frage, in welcher Laufzeitklasse eine gegebene rekursiv definierte Funktion liegt. Dies funktioniert leider nur, solange einer der drei F\\\\u00e4lle des Theorems auf die Funktion angewandt werden kann, ansonsten liefert das Theorem keine Aussage.\", \"type\": \"Definition\"}, {\"id\": 72, \"name\": \"Master-Theorem Beispiele\", \"description\": \"Einige Beispiele, an denen das Master-Theorem und seine Funktion noch einmal verdeutlicht wird.\", \"type\": \"Beispiel\"}, {\"id\": 73, \"name\": \"Sortieralgorithmen und Master-Theorem\", \"description\": \"Wir betrachten ein weiteres Beispiel f\\\\u00fcr Mergesort und leiten erneut die Laufzeit des Sortieralgorithmus her, indem das Master-Theorem benutzt wird. Au\\\\u00dferdem betrachten wir einen weiteren Sortieralgorithmus: Heapsort.\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 74, \"name\": \"Merge-Sort Beispiel\", \"description\": \"Hier wird der Merge-Sort Algorithmus einmal mit einem Beispiel komplett durchgef\\\\u00fchrt und die Laufzeit des Algorithmus betrachtet.\", \"type\": \"Beispiel\"}, {\"id\": 75, \"name\": \"Master-Theorem Beispiel\", \"description\": \"3 weitere Beispiele, welche dabei helfen das Master-Theorem zu verstehen und anzuwenden.\", \"type\": \"Beispiel\"}, {\"id\": 76, \"name\": \"Max-Heaps\", \"description\": \"Hier wir aufgezeigt, wie man mithilfe eines Algorithmus Max-Heaps bildet. \", \"type\": \"Algorithmus\"}, {\"id\": 77, \"name\": \"Max-Heaps Anwendung\", \"description\": \"Hier wird der Algorithmus aus der \\\\u00dcbung 6 zum Erstellen eines Max-Heaps einmal an einem Beispiel angewandt.\", \"type\": \"Beispiel\"}, {\"id\": 78, \"name\": \"Heapsort\", \"description\": \"Heapsort ist ein Algorithmus bei dem mithilfe von Max-Heaps eine Reihe von Elementen sortiert werden kann. Der Algorithmus hat dabei eine Laufzeit von O(n log n), wie auch in \\\\u00dcbung 6 bewiesen wird.\", \"type\": \"Algorithmus\"}, {\"id\": 79, \"name\": \"nichtlineare Rekursionen (Exkurs)\", \"description\": \"In dieser Vorlesung haben wir einen Exkurs in die nichtlineare Rekursion gemacht.\", \"type\": \"Vorlesung\"}, {\"id\": 80, \"name\": \"logistische Rekursion\", \"description\": \"Logistische Rekursion bezeichnet ein Wachstum proportional zu einer Gr\\\\u00f6\\\\u00dfe. Dabei betrachtet man beispielsweise eine Bev\\\\u00f6lkerung, welche zwar durch Fruchtbarkeit immer weiter w\\\\u00e4chst, aber beispielsweise durch Tod auch wieder im Wachstum beschr\\\\u00e4nkt wird.\", \"type\": \"Definition\"}, {\"id\": 81, \"name\": \"Mandelbrot-Menge\", \"description\": \"Die Mandelbrot-Menge, benannt nach Beno\\\\u00eet Mandelbrot, ist eine Menge in den komplexen Zahlen. Interpretiert man sie als geometrische Figur, so ergibt sich ein Fraktal, welches im allgemeinen Sprachgebrauch auch als Apfelm\\\\u00e4nnchen bekannt ist.\", \"type\": \"Definition\"}, {\"id\": 82, \"name\": \"Fraktale\", \"description\": \"Ein Fraktal beschreibt nat\\\\u00fcrliche oder k\\\\u00fcnstliche Gebilde oder geometrische Muster und ist ein von Beno\\\\u00eet Mandelbrot gepr\\\\u00e4gter Begriff. - Wikipedia\", \"type\": \"Definition\"}, {\"id\": 83, \"name\": \"Zellul\\\\u00e4re Automaten\", \"description\": \"Zellul\\\\u00e4re oder auch zellulare Automaten dienen der Modellierung r\\\\u00e4umlich diskreter dynamischer Systeme, wobei die Entwicklung einzelner Zellen zum Zeitpunkt t+1 prim\\\\u00e4r von den Zellzust\\\\u00e4nden in einer vorgegebenen Nachbarschaft und vom eigenen Zustand zum Zeitpunkt t abh\\\\u00e4ngt. - Wikipedia\", \"type\": \"Definition\"}, {\"id\": 84, \"name\": \"Game of Life\", \"description\": \"Das \\'Game of Life\\' ist das wohl bekannteste Beispiel eines zellul\\\\u00e4ren Automaten. \", \"type\": \"Beispiel\"}, {\"id\": 85, \"name\": \"Einf\\\\u00fchrung von Quick-Sort\", \"description\": \"In dieser Vorlesung kehren wir zur\\\\u00fcck zu Sortieralgorithmen und stellen den Quicksort-Algorithmus vor.\", \"type\": \"Vorlesung\"}, {\"id\": 86, \"name\": \"Quick-Sort\", \"description\": \"Dieser Algorithmus (5.14) erh\\\\u00e4lt als Input ein Subarray von A=[1,...,n], der bei Index p beginnt und bei Index r endet, d.h. A[p,...,r] und liefert als Output einen sortierten Subarray. Dabei ist auch Subroutine 5.15 wichtig, welche als Input ein Subarray von A=[1,...,n], d.h. A[p,...,r] erh\\\\u00e4lt und als Output zwei Subarrays A[p,...,q-1] und A[q+1,...,r] mit A[i]\\\\u2264A[q] und A[q]<A[j] f\\\\u00fcr i=p,...,q-1 und j=q+1,...,r liefert.\", \"type\": \"Algorithmus\"}, {\"id\": 87, \"name\": \"Laufzeit von Quick-Sort\", \"description\": \"Die Laufzeit des Quick-Sort Algorithmus l\\\\u00e4sst sich mithilfe vom Master-Theorem ermitteln. Dazu betrachten wir die 3 F\\\\u00e4lle best-case, average-case und worst-case f\\\\u00fcr den Algorithmus.\", \"type\": \"Beispiel\"}, {\"id\": 88, \"name\": \"Mediane\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit Medianen.\", \"type\": \"Vorlesung\"}, {\"id\": 89, \"name\": \"Standortprobleme\", \"description\": \"Was ist der optimale Standort f\\\\u00fcr beispielsweise ein Amazon-Lagerhaus? Idee: Die durchschnittliche Distanz zu den zu beliefernden Geb\\\\u00e4uden minimieren. In Amerika ist dies leicht umgesetzt mit der sogenannten Manhatten-Distanz. Dieses Problem ist die Einf\\\\u00fchrung in das Thema der Mediane.\", \"type\": \"Definition\"}, {\"id\": 90, \"name\": \"Median (diskret)\", \"description\": \"Der Rank k eines Elements x (auch \\'k-tes Element\\') ist definiert durch |{y \\\\u2208 X |y<=x}| = k. Also die Anzahl der Elemente, welche kleiner oder gleich x sind. Speziell hei\\\\u00dft x Median, wenn er das [n/2]-te Element ist. [n/2] wird dabei abgerundet.\", \"type\": \"Definition\"}, {\"id\": 91, \"name\": \"Median (kontinuierlich)\", \"description\": \"Der kontinuierliche Median hat als Eigenschaft, dass das sowohl Integral bis zum Median, als auch ab dem Median gr\\\\u00f6\\\\u00dfer-gleich 1/2 ist.\", \"type\": \"Definition\"}, {\"id\": 92, \"name\": \"Sortieralgorithmen Sonderf\\\\u00e4lle\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit Sonderf\\\\u00e4llen f\\\\u00fcr Sortieralgorithmen, durch die Sortieren in linearer Zeit erm\\\\u00f6glicht wird. Dabei werfen wir einen n\\\\u00e4heren Blick auf die Sortierverfahren Countingsort und Radixsort.\", \"type\": \"Vorlesung\"}, {\"id\": 93, \"name\": \"Counting-Sort\", \"description\": \"Dieser Algorithmus (5.14) erh\\\\u00e4lt als Input ein Array von A=[1],...,A[n] mit Schl\\\\u00fcsselwerten aus {1,\\\\u2026, k} und liefert als Output eine sortierte Kopie B[1],\\\\u2026,B[n] von [1],...,A[n].\", \"type\": \"Algorithmus\"}, {\"id\": 94, \"name\": \"Radix-Sort\", \"description\": \"Dieser Algorithmus (5.18) erh\\\\u00e4lt als Input n Zahlen mit je d Ziffern, die k verschiedene Werte annehmen k\\\\u00f6nnen, [1],...,A[n]  und liefert als Output einen sortierten Array. Dabei geht Radix-Sort im Gegensatz zu anderen Sortieralgorithmen ziffernweise vor.\", \"type\": \"Algorithmus\"}, {\"id\": 95, \"name\": \"Quick-Sort, Mediane, kd-B\\\\u00e4ume\", \"description\": \"In dieser \\\\u00dcbung schauen wir uns noch einmal das Sortierverfahren Quicksort an und sprechen \\\\u00fcber die Berechnung von Medianen. Au\\\\u00dferdem schauen wir uns mit den kd-B\\\\u00e4umen eine spezielle Datenstruktur f\\\\u00fcr mehrdimensionale Daten an.\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 96, \"name\": \"Quick-Sort Beispiel\", \"description\": \"In diesem Beispiel wird die Funktionsweise von Quick-Sort, sowie die Laufzeit betrachtet.\", \"type\": \"Beispiel\"}, {\"id\": 97, \"name\": \"Mediane Beispiel\", \"description\": \"In diesem Teil der \\\\u00dcbung schauen wir uns noch einmal genauer an, was Mediane sind, wie man sie algorithmisch bestimmen kann und in welcher Laufzeit das m\\\\u00f6glich ist.\", \"type\": \"Beispiel\"}, {\"id\": 98, \"name\": \"kd-B\\\\u00e4ume (Exkurs)\", \"description\": \"kd-B\\\\u00e4ume sind B\\\\u00e4ume mit einer h\\\\u00f6heren Dimension. Mithilfe der Idee den Baum abwechselnd nach x- und y-Koordinate zu durchsuchen und so zu konstruieren entsteht ein Algorithmus mit dem man mehrdimensionale Suchb\\\\u00e4ume erstellen kann. Auch schauen wir uns an, wie man in einem solchen Baum sucht.\", \"type\": \"Definition\"}, {\"id\": 99, \"name\": \"(parallelisierte) Sortierverfahren\", \"description\": \"In dieser Vorlesung beenden wir das Kapitel zum Thema Sortieralgorithmen und werfen abschlie\\\\u00dfend einen Blick auf parallelisierte Sortierverfahren.\", \"type\": \"Vorlesung\"}, {\"id\": 100, \"name\": \"Bubble-Sort Beispiel\", \"description\": \"Einige Beispiele, wie Bubble-Sort funktioniert, inklusive einiger verschiedener Darstellungen/Animationen und dem Vergleich mit Quick-Sort.\", \"type\": \"Algorithmus\"}, {\"id\": 101, \"name\": \"paralleles Bubble-Sort\", \"description\": \"Mithilfe von Parallelisierung l\\\\u00e4sst sich Bubble-Sort auch in linearer Zeit umsetzen. Die Idee daf\\\\u00fcr wird hier einmal erl\\\\u00e4utert.\", \"type\": \"Definition\"}, {\"id\": 102, \"name\": \"Bogo-Sort\", \"description\": \"Bogo-Sort ist ein eher als Scherz gemeinter Sortieralgorithmus. Dabei wird die gegebene Menge solange zuf\\\\u00e4llig durchpermutiert und \\\\u00fcberpr\\\\u00fcft bis die korrekte L\\\\u00f6sung erreicht ist.\", \"type\": \"Algorithmus\"}, {\"id\": 103, \"name\": \"Zusammenfassung\", \"description\": \"Diese Vorlesung markiert das Ende der Vorlesungszeit. Wir gehen deshalb noch einmal R\\\\u00fcckblickend \\\\u00fcber die verschiedenen Themen die in den vergangenen Monaten behandelt wurden und geben die M\\\\u00f6glichkeit Fragen zu stellen.\", \"type\": \"Vorlesung\"}, {\"id\": 104, \"name\": \"Klausurvorbereitung\", \"description\": \"Die letzte gro\\\\u00dfe \\\\u00dcbung von AuD mit Spiel, Spa\\\\u00df, Spannung und vielen Fragen.\", \"type\": \"\\\\u00dcbung\"}, {\"id\": 105, \"name\": \"Einleitung\", \"description\": \"Eine Einleitung in die Welt der Algorithmen und Datenstrukturen. Was ist ein Algorithmus und wozu wird er ben\\\\u00f6tigt? Und was haben Datenstrukturen damit zu tun?\", \"type\": \"Kapitel\"}, {\"id\": 106, \"name\": \"Graphen\", \"description\": \"Graphen sind eine wichtige Darstellungsform von Daten in der Informatik. Wie Graphen aufgebaut sind und was man alles mit ihnen machen kann wird in diesem Kapitel behandelt.\", \"type\": \"Kapitel\"}, {\"id\": 107, \"name\": \"Suche in Graphen\", \"description\": \"Die Suche in Graphen ist ein wichtiges Werkzeug. Allerdings gibt es mehrere Wege, welche zum Ziel f\\\\u00fchren und nicht alle funktionieren gleich gut. Wie man effizient in Graphen sucht wird in diesem Kapitel behandelt.\", \"type\": \"Kapitel\"}, {\"id\": 108, \"name\": \"Dynamische Datenstrukturen\", \"description\": \"Im Laufe der Vorlesung wurden bereits einige Datenstrukturen vorgestellt. In diesem Kapitel besch\\\\u00e4ftigen wir uns mit einer weiteren Klasse der Datenstrukturen, den dynamischen Datenstrukturen. Und damit, welche M\\\\u00f6glichkeiten sie bieten.\", \"type\": \"Kapitel\"}, {\"id\": 109, \"name\": \"Sortieren\", \"description\": \"Neben der Suche von Elementen spielt auch das Sortieren in der Informatik eine gro\\\\u00dfe Rolle. Wie man das macht wird in diesem Kapitel behandelt.\", \"type\": \"Kapitel\"}, {\"id\": 0, \"name\": \"AuD1\", \"description\": \"Algorithmen und Datenstrukturen 1\", \"type\": \"Kapitel\"}], \"links\": [{\"source\": 1, \"target\": 105}, {\"source\": 2, \"target\": 1}, {\"source\": 3, \"target\": 1}, {\"source\": 4, \"target\": 105}, {\"source\": 4, \"target\": 7}, {\"source\": 5, \"target\": 1}, {\"source\": 6, \"target\": 1}, {\"source\": 7, \"target\": 105}, {\"source\": 8, \"target\": 7}, {\"source\": 21, \"target\": 105}, {\"source\": 9, \"target\": 105}, {\"source\": 9, \"target\": 21}, {\"source\": 10, \"target\": 106}, {\"source\": 11, \"target\": 14}, {\"source\": 12, \"target\": 106}, {\"source\": 12, \"target\": 15}, {\"source\": 12, \"target\": 17}, {\"source\": 12, \"target\": 19}, {\"source\": 12, \"target\": 20}, {\"source\": 13, \"target\": 14}, {\"source\": 13, \"target\": 15}, {\"source\": 14, \"target\": 106}, {\"source\": 15, \"target\": 106}, {\"source\": 16, \"target\": 106}, {\"source\": 17, \"target\": 18}, {\"source\": 18, \"target\": 106}, {\"source\": 19, \"target\": 18}, {\"source\": 20, \"target\": 18}, {\"source\": 22, \"target\": 107}, {\"source\": 23, \"target\": 107}, {\"source\": 23, \"target\": 16}, {\"source\": 24, \"target\": 25}, {\"source\": 25, \"target\": 107}, {\"source\": 26, \"target\": 27}, {\"source\": 26, \"target\": 28}, {\"source\": 26, \"target\": 29}, {\"source\": 26, \"target\": 30}, {\"source\": 26, \"target\": 31}, {\"source\": 27, \"target\": 107}, {\"source\": 28, \"target\": 107}, {\"source\": 29, \"target\": 107}, {\"source\": 29, \"target\": 25}, {\"source\": 30, \"target\": 107}, {\"source\": 30, \"target\": 25}, {\"source\": 31, \"target\": 32}, {\"source\": 31, \"target\": 33}, {\"source\": 32, \"target\": 107}, {\"source\": 33, \"target\": 107}, {\"source\": 34, \"target\": 33}, {\"source\": 34, \"target\": 35}, {\"source\": 35, \"target\": 107}, {\"source\": 36, \"target\": 30}, {\"source\": 36, \"target\": 29}, {\"source\": 36, \"target\": 24}, {\"source\": 37, \"target\": 35}, {\"source\": 38, \"target\": 107}, {\"source\": 39, \"target\": 35}, {\"source\": 39, \"target\": 29}, {\"source\": 39, \"target\": 30}, {\"source\": 40, \"target\": 23}, {\"source\": 41, \"target\": 33}, {\"source\": 42, \"target\": 25}, {\"source\": 42, \"target\": 33}, {\"source\": 43, \"target\": 26}, {\"source\": 43, \"target\": 44}, {\"source\": 44, \"target\": 108}, {\"source\": 45, \"target\": 108}, {\"source\": 46, \"target\": 45}, {\"source\": 47, \"target\": 45}, {\"source\": 48, \"target\": 49}, {\"source\": 48, \"target\": 50}, {\"source\": 49, \"target\": 108}, {\"source\": 50, \"target\": 108}, {\"source\": 50, \"target\": 49}, {\"source\": 51, \"target\": 52}, {\"source\": 52, \"target\": 49}, {\"source\": 52, \"target\": 108}, {\"source\": 53, \"target\": 52}, {\"source\": 54, \"target\": 108}, {\"source\": 54, \"target\": 53}, {\"source\": 54, \"target\": 52}, {\"source\": 55, \"target\": 108}, {\"source\": 56, \"target\": 44}, {\"source\": 56, \"target\": 45}, {\"source\": 56, \"target\": 49}, {\"source\": 56, \"target\": 50}, {\"source\": 56, \"target\": 52}, {\"source\": 56, \"target\": 54}, {\"source\": 57, \"target\": 18}, {\"source\": 57, \"target\": 44}, {\"source\": 58, \"target\": 50}, {\"source\": 58, \"target\": 49}, {\"source\": 59, \"target\": 54}, {\"source\": 59, \"target\": 52}, {\"source\": 60, \"target\": 48}, {\"source\": 60, \"target\": 61}, {\"source\": 60, \"target\": 62}, {\"source\": 60, \"target\": 63}, {\"source\": 61, \"target\": 108}, {\"source\": 61, \"target\": 49}, {\"source\": 62, \"target\": 108}, {\"source\": 62, \"target\": 49}, {\"source\": 63, \"target\": 108}, {\"source\": 64, \"target\": 65}, {\"source\": 64, \"target\": 66}, {\"source\": 65, \"target\": 109}, {\"source\": 66, \"target\": 67}, {\"source\": 66, \"target\": 68}, {\"source\": 67, \"target\": 109}, {\"source\": 68, \"target\": 109}, {\"source\": 69, \"target\": 68}, {\"source\": 70, \"target\": 68}, {\"source\": 70, \"target\": 55}, {\"source\": 71, \"target\": 109}, {\"source\": 72, \"target\": 71}, {\"source\": 73, \"target\": 65}, {\"source\": 73, \"target\": 71}, {\"source\": 74, \"target\": 65}, {\"source\": 75, \"target\": 71}, {\"source\": 76, \"target\": 63}, {\"source\": 76, \"target\": 77}, {\"source\": 76, \"target\": 109}, {\"source\": 76, \"target\": 74}, {\"source\": 77, \"target\": 76}, {\"source\": 78, \"target\": 109}, {\"source\": 78, \"target\": 76}, {\"source\": 78, \"target\": 74}, {\"source\": 79, \"target\": 80}, {\"source\": 79, \"target\": 81}, {\"source\": 79, \"target\": 82}, {\"source\": 79, \"target\": 83}, {\"source\": 80, \"target\": 109}, {\"source\": 81, \"target\": 109}, {\"source\": 82, \"target\": 109}, {\"source\": 82, \"target\": 81}, {\"source\": 83, \"target\": 109}, {\"source\": 84, \"target\": 83}, {\"source\": 85, \"target\": 86}, {\"source\": 86, \"target\": 109}, {\"source\": 87, \"target\": 86}, {\"source\": 87, \"target\": 71}, {\"source\": 88, \"target\": 90}, {\"source\": 88, \"target\": 91}, {\"source\": 89, \"target\": 88}, {\"source\": 90, \"target\": 109}, {\"source\": 91, \"target\": 109}, {\"source\": 91, \"target\": 90}, {\"source\": 92, \"target\": 93}, {\"source\": 92, \"target\": 94}, {\"source\": 93, \"target\": 109}, {\"source\": 94, \"target\": 109}, {\"source\": 95, \"target\": 86}, {\"source\": 95, \"target\": 90}, {\"source\": 95, \"target\": 91}, {\"source\": 96, \"target\": 86}, {\"source\": 97, \"target\": 90}, {\"source\": 97, \"target\": 91}, {\"source\": 98, \"target\": 109}, {\"source\": 98, \"target\": 49}, {\"source\": 98, \"target\": 95}, {\"source\": 99, \"target\": 100}, {\"source\": 99, \"target\": 101}, {\"source\": 99, \"target\": 102}, {\"source\": 100, \"target\": 109}, {\"source\": 100, \"target\": 86}, {\"source\": 101, \"target\": 100}, {\"source\": 102, \"target\": 109}, {\"source\": 103, \"target\": 0}, {\"source\": 104, \"target\": 103}, {\"source\": 105, \"target\": 0}, {\"source\": 106, \"target\": 0}, {\"source\": 107, \"target\": 0}, {\"source\": 108, \"target\": 0}, {\"source\": 109, \"target\": 0}]}'"
+       "'{\"nodes\": [{\"id\": 0, \"name\": \"Begr\\\\u00fc\\\\u00dfung und Organisatorisches\", \"description\": \"Eine Einf\\\\u00fchrung in die Algorithmen und Datenstrukturen\", \"type\": 0, \"video\": \"https://www.ibr.cs.tu-bs.de/courses/ws2122/aud/videos/VL0.mp4\"}, {\"id\": 1, \"name\": \"Rundreise Problem\", \"description\": \"Gegeben: Ein Graph $G = (V, E)$ mit Kantenl\\\\u00e4ngen $w_e$, Gesucht: Eine k\\\\u00fcrzeste Rundreise, welche alle Knoten im Graphen einmal besucht und im Startknoten wieder endet.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/2_Bsp_Rundreise-Problem.mp4\"}, {\"id\": 2, \"name\": \"Puzzle\", \"description\": \"Jeder hat schon einmal ein Puzzle gel\\\\u00f6st, doch wie sieht das aus algorithmischer Sicht aus?\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/3_Bsp_Puzzle.mp4\"}, {\"id\": 3, \"name\": \"Algorithmus-Definition\", \"description\": \"Zitat: \\'Ein Algorithmus ist eine aus endlich vielen Schritten bestehende eindeutige Handlungsvorschrift zur L\\\\u00f6sung eines Problems oder einer Klasse von Problemen.\\'-Wikipedia. Dabei wird als Input eine Problembeschreibung gegeben und durch Anwendung des Algorithmus eine fertige L\\\\u00f6sung des Problems ermittelt. Oft spielt die Laufzeit des Algorithmus eine gro\\\\u00dfe Rolle. Sie beschreibt, wie viele einzelne Schritte n\\\\u00f6tig sind um das Problem zu l\\\\u00f6sen, in Abh\\\\u00e4ngigkeit von der Gr\\\\u00f6\\\\u00dfe des Problems.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/4_Def_Algorithmus.mp4\"}, {\"id\": 4, \"name\": \"P und NP\", \"description\": \"Die Klassen P und NP teilen algorithmische Probleme in zwei Kategorien auf. Die eine, bei der man mithilfe eines Algorithmus eine L\\\\u00f6sung Pfinden kann (P) und eine zweite, bei der bisher nur das NachPr\\\\u00fcfen einer existierenden L\\\\u00f6sung in polynomieller gelingt (NP). Wenn es allerdings keine L\\\\u00f6sung gibt, so l\\\\u00e4sst sich das bei Problemen der Klasse NP nur schlecht beweisen.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/6_Def_P-und-NP.mp4\"}, {\"id\": 5, \"name\": \"Einf\\\\u00fchrung des Algorithmusbegriffs\", \"description\": \"In dieser Vorlesung wird der Begriff \\'Algorithmus\\' definiert und erkl\\\\u00e4rt.\", \"type\": 0, \"video\": \"https://www.ibr.cs.tu-bs.de/courses/ws2122/aud/videos/VL1.mp4\"}, {\"id\": 6, \"name\": \"Datenstrukturen\", \"description\": \"Eine Datenstruktur erlaubt es, die f\\\\u00fcr eine Aufgabe notwendigen Informationen geeignet zu repr\\\\u00e4sentieren und den Zugriff und die Verwaltung w\\\\u00e4hrend der Bearbeitung in effizienter Weise zu erm\\\\u00f6glichen.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/8_Def_Datenstrukturen.mp4\"}, {\"id\": 7, \"name\": \"Organisation und Pseudocode\", \"description\": \"In dieser \\\\u00dcbung haben wir noch einmal organisatorische Dinge besprochen und uns mit dem Thema Pseudocode auseinandergesetzt.\", \"type\": 3, \"video\": \"https://www.ibr.cs.tu-bs.de/courses/ws2122/aud/videos/U0.mp4\"}, {\"id\": 8, \"name\": \"Pseudocode\", \"description\": \"Pseudocode ist eine Art Algorithmen theoretisch zu formulieren, ohne dabei auf die Besonderheiten einer Programmiersprache achten zu m\\\\u00fcssen. Das Ziel ist es Algorithmen klar und eindeutig darzustellen. Da Pseudocode meist \\\\u00e4hnliche Schl\\\\u00fcsselw\\\\u00f6rter wie tats\\\\u00e4chliche Programmiersprachen nutzt, l\\\\u00e4sst sich der entspehende Code oft einfach in eine tats\\\\u00e4chliche Implementierung \\\\u00fcbersetzen.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/9_Def_Pseudocode.mp4\"}, {\"id\": 9, \"name\": \"Einleitung in die Graphen\", \"description\": \"Eine Einleitung in die Welt der Graphen am wohl bekanntesten Beispiel, dem Haus des Nikolaus.\", \"type\": 0}, {\"id\": 10, \"name\": \"Haus des Nikolaus\", \"description\": \"Jeder kennt das Haus vom Nikolaus, doch wie wird es gemalt? Wo setzt man den Stift an und wo wieder ab?\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/11_Bsp_Haus-des-Nikolaus.mp4\"}, {\"id\": 11, \"name\": \"Eulertouren\", \"description\": \"Ein Eulerweg ist ein Weg in einem Graphen, welcher alle Kanten nutzt. Eine Eulertour kehrt dar\\\\u00fcber hinaus auch zum Startknoten zur\\\\u00fcck.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/12_Def_Eulertouren.mp4\"}, {\"id\": 12, \"name\": \"Graphenbegriffe\", \"description\": \"Ein Graph besteht aus Knoten und Kanten, doch was parallele Kanten, Schleifen, (geschlossene) Wege, Pfade, Kreise, Eulerwege/-touren, sowie Hamiltonpfade und -kreise sind wird in dieser Vorlesung noch einmal genau definiert.\", \"type\": 0}, {\"id\": 13, \"name\": \"Graph\", \"description\": \"Um mit Graphen arbeiten zu k\\\\u00f6nnen ist eine formale Definition besonders wichtig. Diese gibt es in diesem Video.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/14_Def_Graph.mp4\"}, {\"id\": 14, \"name\": \"Wege in Graphen\", \"description\": \"Eine Kantenfolge $W$ in einem Graphen $G$ hei\\\\u00dft Weg, wenn sich keine Kante darin wiederholt und geschlossener Weg (Tour), wenn man am Ende wieder am Startknoten ankommt. Wiederholt sich kein Knoten spricht man von einem Pfad. Ein Kreis ist ein geschlossener Pfad. Bei einem Eulerweg/ einer Eulertour werden alle Kanten des Graphen genutzt. Ein Hamiltonpfad/kreis nutzt hingegen alle Knoten.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/15_Def_Wege-in-Graphen.mp4\"}, {\"id\": 15, \"name\": \"Beweistechniken Teil 1\", \"description\": \"In der Mathematik und auch in der Algorithmik spielen Beweise immer wieder eine gro\\\\u00dfe Rolle. Es geht darum Aussagen zu belegen, zu widerlegen oder auf bestimmte Elemente anzuwenden. Dazu gibt es verschiedene Beweistechniken, welche ihr hier finden k\\\\u00f6nnt:\", \"type\": 3}, {\"id\": 16, \"name\": \"Direkter Beweis\", \"description\": \"Aussagen oft in der Form $A \\\\\\\\Rightarrow B$. Unterscheide zwischen Voraussetzung ($A$) und Schlussfolgerung ($B$). Wird die Schlussfolgerung durch eine logische Folgerungskette aus den Voraussetzungen hergeleitet, so spricht man von einem direkten Beweis.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/16a_Bsp_Direkter-Beweis.mp4\"}, {\"id\": 17, \"name\": \"Kontraposition\", \"description\": \"Ein direkter Beweis kann schwierig sein, sodass sich die Kontraposition anbietet. Es gilt $(A \\\\\\\\Righrarrow B) \\\\\\\\Leftrightarrow (-B \\\\\\\\Rightarrow -A)$. Wir k\\\\u00f6nnen also Annehmen, dass $B$ nicht gilt und folgern daraus, dass auch $A$ nicht gelten kann.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/16b_Bsp_Kontraposition.mp4\"}, {\"id\": 18, \"name\": \"Widerspruchsbeweis\", \"description\": \"Mathematische Aussagen sind entweder wahr oder falsch. Um eine wahre Aussage zu beweisen, k\\\\u00f6nnen wir zeigen, dass die Negation nicht gilt. Diese Beweistechnik nennt man Widerspruchsbeweis.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/16c_Bsp_Widerspruchsbeweis.mp4\"}, {\"id\": 19, \"name\": \"\\\\u00c4quivalenzbeweis\", \"description\": \"Aussagen der Form A <=> B k\\\\u00f6nnen bewiesen werden, indem sowohl<br>A => B und B => A gezeigt werden.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/16d_Bsp_\\\\u00c4quivalenzbeweis.mp4\"}, {\"id\": 20, \"name\": \"Bedingungen f\\\\u00fcr Eulertouren\", \"description\": \"In dieser Vorlesung werden notwendige Bedingungen f\\\\u00fcr Eulertouren erleutert. Zus\\\\u00e4tzlich wird das Kapitel 2 noch einmal zusammengefasst und es werden Algorithmen eingef\\\\u00fchrt um die uns bisher bekannten Probleme zu l\\\\u00f6sen.\", \"type\": 0}, {\"id\": 21, \"name\": \"Algorithmus Wegfindung\", \"description\": \"Dieser Algorithmus (2.7) erh\\\\u00e4lt als Input einen Graphen G mit h\\\\u00f6chstens zwei ungeraden Knoten und liefert als Output einen Weg in G\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/18_Alg_Wegfindung.mp4\"}, {\"id\": 22, \"name\": \"Algorithmus von Hierholzer\", \"description\": \"Dieser Algorithmus (2.8) erh\\\\u00e4lt als Input einen zusammenh\\\\u00e4ngenden Graphen G mit h\\\\u00f6chstens zwei ungeraden Knoten und liefert als Output einen Eulerweg, bzw. eine Eulertour in G. Dazu wird auch Algorithmus 2.7 zum Finden von Wegen in G verwendet.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/19_Alg_Hierholzer.mp4\"}, {\"id\": 23, \"name\": \"Algorithmus von Fleury\", \"description\": \"Dieser Algorithmus(2.13) erh\\\\u00e4lt als Input einen Graphen G mit h\\\\u00f6chstens 2 ungeraden Knoten und liefert als Output einen Weg in G. Der Algorithmus hat als Grundlage Algorithmus 2.7 zum Finden von Wegen. Auch l\\\\u00e4sst sich zeigen, dass man mit diesem Algorithmus eine Eulertour/einen Eulerweg finden kann.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/20_Alg_Fleury.mp4\"}, {\"id\": 24, \"name\": \"Anwendung von Graphen\", \"description\": \"In dieser Vorlesung geht es um den Einsatzzweck von Graphen und es wird am Beispiel der Erd\\\\u00f6s- und der Kevin Bacon Zahl gezeigt, welche Zusammenh\\\\u00e4nge dargestellt werden k\\\\u00f6nnen.\", \"type\": 0}, {\"id\": 25, \"name\": \"Beweistechniken Teil 2\", \"description\": \"In dieser \\\\u00dcbung geht es um die Beweistechnik der vollst\\\\u00e4ndigen Induktion. Diese ist die wohl meist benutzte Beweistechnik in der Algorithmik. Auch werden Anwendungsbeispiele wie z.B. die Gau\\\\u00df\\'sche Summenformel oder der Zusammenhang in Graphen  erl\\\\u00e4utert.\", \"type\": 3}, {\"id\": 26, \"name\": \"Graphenscan\", \"description\": \"In dieser Vorlesung wird der Graphenscanalgorithmus vorgestellt um Zusammenhangskomponenten in Graphen zu finden.\", \"type\": 0}, {\"id\": 27, \"name\": \"Algorithmus Graphenscan\", \"description\": \"Dieser Algorithmus (3.7) erh\\\\u00e4hlt als Input einen Graphen G = (V,E) und einen Knoten s darin und liefert als Output eine Knotenmenge Y aus V, die von s aus erreichbar ist, sowie eine Kantenmenge T aus E, welche die Erreichbarkeit sicherstellt\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/25_Alg_Graphenscan.mp4\"}, {\"id\": 28, \"name\": \"Datenstrukturen Teil 1\", \"description\": \"In dieser Vorlesung werden die Datenstrukturen Warteschlange (First In - First Out) und Stapel (Last In - First Out) vorgestellt. Au\\\\u00dferdem geht es um ihre Rolle f\\\\u00fcr Algorithmen und wie man sie implementieren kann. Das ganze wird am Beispiel des Graphscan Algorithmus gezeigt und somit werden auch Breiten- und Tiefensuche eingef\\\\u00fchrt.\", \"type\": 0}, {\"id\": 29, \"name\": \"Warteschlange\", \"description\": \"Eine Warteschlange ist eine Datenstruktur, welche nach dem Prinzip \\'First In - First Out\\' arbeitet. Man findet sie auch im allt\\\\u00e4glichen Leben oft wieder, wenn man sich beispielsweise an der Kasse anstellen muss. Der Kunde der zuerst da war, wir auch zuerst bedient.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/27_Def_Warteschlange.mp4\"}, {\"id\": 30, \"name\": \"Stapel\", \"description\": \"Ein Stapel ist eine Datenstruktur, welche nach dem Prinzip \\'Last In - First Out\\' arbeitet. Im allt\\\\u00e4glichen Leben findet man diese Form der Datenstruktur beim Geschirr abwaschen, man stapelt die Teller und der Teller der zuletzt dreckig wurde wird als erstes gereinigt, da man die Teller von oben herunter nimmt.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/28_Def_Stapel.mp4\"}, {\"id\": 31, \"name\": \"Breitensuche\", \"description\": \"Die Breitensuche ist im Prinzip der Graphscan Algorithmus, ausgef\\\\u00fchrt mithilfe einer Warteschlange als Datenstruktur. Sie breitet sich aus wie eine Welle.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/29_Alg_Breitensuche.mp4\"}, {\"id\": 32, \"name\": \"Tiefensuche\", \"description\": \"Die Breitensuche ist im Prinzip der Graphscan Algorithmus, ausgef\\\\u00fchrt mithilfe eines Stapels als Datenstruktur. Dabei werden eher einzelne Pfade gelaufen.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/30_Alg_Tiefensuche.mp4\"}, {\"id\": 33, \"name\": \"Datenstrukturen Teil 2\", \"description\": \"In dieser Vorlesung geht es einerseits um die Anwendung der Breitensuche, andererseits werden noch 2 weitere Datenstrukturen eingef\\\\u00fchrt: Die Inzidenz/-Adjazenzmatrix, sowie die Kantenliste.\", \"type\": 0}, {\"id\": 34, \"name\": \"Inzidenz/-Adjazenzmatrix\", \"description\": \"In einer Inzidenzmatrix wird mithilfe von 1en und 0en dargestellt, welche Knoten mit welchen Kanten inzident (zusammentreffend) sind. Bei einer Adjazenzmatrix wird dargestellt, welche Knoten adjazent (durch eine Kante verbunden) sind.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/32_Def_Inzidenz-Adjazenzmatrix.mp4\"}, {\"id\": 35, \"name\": \"Kanten-/Adjazenzliste\", \"description\": \"Eine Kantenliste ist eine Liste bestehend aus eintr\\\\u00e4gen der Form {vx, vy}, welche bedeuten, dass eine Kante zwischen vx und vy im Graphen existiert.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/33_Def_Kantenliste.mp4\"}, {\"id\": 36, \"name\": \"Wachstum/O-Notation\", \"description\": \"In dieser Vorlesung wird noch einmal mit den Adjazenz- und Kantenlisten abgeschlossen. Au\\\\u00dferdem schauen wir uns einmal das Wachstum von Funktionen an und definieren und die O-Notation um damit zu arbeiten.\", \"type\": 0}, {\"id\": 37, \"name\": \"O-Notation\", \"description\": \"Die O-Notation wird genutzt um das Wachstum von Funktionen abzusch\\\\u00e4tzen. Damit k\\\\u00f6nnen Gr\\\\u00f6\\\\u00dfenordnungen und Wachstumsverhalten beschrieben werden.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/35_Def_O-Notation.mp4\"}, {\"id\": 38, \"name\": \"Graphscan \\\\u00dcbung\", \"description\": \"Simple Anwengung des Graphscan Algorithmus, einmal als Breiten- und als Tiefensuche. Wann welcher Algorithmus besser geeignet ist wird in dieser \\\\u00dcbung erkl\\\\u00e4rt.\", \"type\": 3}, {\"id\": 39, \"name\": \"Breitensuche Beispiel\", \"description\": \"Ein Beispiel f\\\\u00fcr die Anwendung des Graphenscan Algorithmus in Form der Breitensuche mithilfe einer Warteschlange als Datenstruktur.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/36a_Bsp_Breitensuche.mp4\"}, {\"id\": 40, \"name\": \"Tiefensuche Beispiel\", \"description\": \"Ein Beispiel f\\\\u00fcr die Anwendung des Graphenscan Algorithmus in Form der Tiefensuche mithilfe eines Stapels als Datenstruktur.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/36b_Bsp_Tiefensuche.mp4\"}, {\"id\": 41, \"name\": \"Wachstum\", \"description\": \"Die O-Notation wird genutzt um das Wachstum von Funktionen abzusch\\\\u00e4tzen. In dieser \\\\u00dcbung werden Zusammenh\\\\u00e4nge zwischen der Gr\\\\u00f6\\\\u00dfe des Inputs und dem Wachstum, sowie Relationen zwischen Laufzeitklassen n\\\\u00e4her beleuchtet. Auch wird die O-Notation an verschiedenen Beispielen erkl\\\\u00e4rt.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/36c_Bsp_O-Notation.mp4\"}, {\"id\": 42, \"name\": \"Wiederholung: Suche in Graphen\", \"description\": \"Noch einmal ein R\\\\u00fcckblick auf alles, was bisher in \\'Kapitel 3: Suche in Graphen\\' passiert ist. \", \"type\": 0}, {\"id\": 43, \"name\": \"Eigenschaften von DFS und BFS\", \"description\": \"In dieser Vorlesung betrachten wir die Breiten- und Tiefensuche im Hinblick auf ihre Laufzeit. Dabei wird anschaulich, wie die Algorithmen arbeiten, wann man sie am besten nutzen sollte und wie man Laufzeiten beweisen kann.\", \"type\": 0}, {\"id\": 44, \"name\": \"Induktionsbeweis Beispiel\", \"description\": \"Ein Beispiel, bei dem der Induktionsbeweis auch in der Graphentheorie zum Einsatz kommt. Weitere Beispiele dieser Art finden sich in Vorlesung 12.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/40_Bsp_Induktionsbeweis.mp4\"}, {\"id\": 45, \"name\": \"Graphscan Adjazenzliste\", \"description\": \"Hier wird zuerst ein Graph in der Form einer Adjazenzliste dargestellt und dann mithilfe dieser als Datenstruktur der Graphscan Algorithmus durchgef\\\\u00fchrt.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/42_Bsp_Graphenscan-Adjazenzliste.mp4\"}, {\"id\": 46, \"name\": \"Verschiedene dynamische Datenstrukturen\", \"description\": \"In dieser Vorlesung beginnen wir dynamische Datenstrukturen einzuf\\\\u00fchren. Es werden Stapel, Warteschlangen und verkettete Listen vorgestellt. Au\\\\u00dferdem besch\\\\u00e4ftigen wir uns mit bin\\\\u00e4rer Suche.\", \"type\": 0}, {\"id\": 47, \"name\": \"Verkettete Liste\", \"description\": \"Eine verkettete Liste ist eine dynamische Datenstruktur. Dabei werden f\\\\u00fcr die einzelnen Elemente jeweils Vorg\\\\u00e4nger und Nachfolger mit gespeichert. Der Vorteil hierbei ist, dass neue Eintr\\\\u00e4ge \\\\u00fcberall eingef\\\\u00fcgt werden k\\\\u00f6nnen.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/44_Def_Verkettete-Listen.mp4\"}, {\"id\": 48, \"name\": \"Bin\\\\u00e4re Suche\", \"description\": \"Dieser Algorithmus (4.1) erh\\\\u00e4lt als Input einen sortierten Array mit Eintr\\\\u00e4gen S[I], Suchwert WERT, linke Randposition LINKS, rechte Randposition RECHTS und liefert als Output die Position von WERT zwischen Arraypositionen LINKS und RECHTS, falls existent.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/45_Alg_Bin\\\\u00e4re-Suche.mp4\"}, {\"id\": 49, \"name\": \"Bin\\\\u00e4re Suche Beispiel\", \"description\": \"Der Algorithmus f\\\\u00fcr die bin\\\\u00e4re Suche einmal an zwei Beispielen angewandt.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/46_Bsp_Bin\\\\u00e4re_Suche.mp4\"}, {\"id\": 50, \"name\": \"Bin\\\\u00e4re Suchb\\\\u00e4ume\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns genauer mit bin\\\\u00e4ren Suchb\\\\u00e4umen und den darauf anwendbaren Operationen, wie Maximum, Minimum, einf\\\\u00fcgen und l\\\\u00f6schen von Knoten, sowie mit der bin\\\\u00e4ren Suche.\", \"type\": 0}, {\"id\": 51, \"name\": \"Bin\\\\u00e4rer Suchbaum\", \"description\": \"In dieser Definition werden die Begriffe \\'gerichteter Graph/Baum\\', \\'H\\\\u00f6he eines Baumes\\', \\'(voller/vollst\\\\u00e4ndiger) bin\\\\u00e4rer Baum\\', \\'Blatt eines Baumes\\', \\'Teilbaum eines Knotens\\' und \\'bin\\\\u00e4rer Suchbaum\\' definiert und erkl\\\\u00e4rt.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/49_Def_Bin\\\\u00e4rer-Suchbaum.mp4\"}, {\"id\": 52, \"name\": \"Grundoperationen Suchbaum\", \"description\": \"Minimum/Maximum finden, Suche im Baum, Nachfolger finden, Einf\\\\u00fcgen und L\\\\u00f6schen sind die Grundoperationen, welche auf bin\\\\u00e4re Suchb\\\\u00e4ume angewendet werden k\\\\u00f6nnen. Und hier findet ihr die Algorithmen dazu.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/50_Alg_Bin\\\\u00e4rer-Suchbaum-Grundoperationen.mp4\"}, {\"id\": 53, \"name\": \"Bin\\\\u00e4rer Suchbaum Min/Max\", \"description\": \"In einem bin\\\\u00e4ren Suchbaum lassen sich leicht das Minimum, sowie das Maximum finden. Wie das funktioniert, kannst du dir hier noch einmal anschauen.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/50a_Bsp_Bin\\\\u00e4rer-Suchbaum-Min-Max.mp4\"}, {\"id\": 54, \"name\": \"Bin\\\\u00e4rer Suchbaum Suche\", \"description\": \"Auch die Suche in einem bin\\\\u00e4ren Suchbaum ist recht simpel, wie der Name schon verr\\\\u00e4t. Wie das genau funktioniert siehst du hier.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/50b_Bsp_Bin\\\\u00e4rer-Suchbaum-Suche.mp4\"}, {\"id\": 55, \"name\": \"Bin\\\\u00e4rer Suchbaum Nachfolger\", \"description\": \"Oft kann es helfen den Nachfolger eines Schl\\\\u00fcsselwertes in einem bin\\\\u00e4ren Suchbaum zu finden (Zum Beispiel beim L\\\\u00f6schen von Elementen). Wie das geht kannst du hier nachschauen.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/50c_Bsp_Bin\\\\u00e4rer-Suchbaum-Nachfolger.mp4\"}, {\"id\": 56, \"name\": \"Bin\\\\u00e4rer Suchbaum Einf\\\\u00fcgen\", \"description\": \"Das Einf\\\\u00fcgen in einen bin\\\\u00e4ren Suchbaum ist recht simpel, man muss allerdings darauf achten, dass die Struktur erhalten bleibt. Wie das geht siehst du hier.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/50d_Bsp_Bin\\\\u00e4rer-Suchbaum-Einf\\\\u00fcgen.mp4\"}, {\"id\": 57, \"name\": \"Bin\\\\u00e4rer Suchbaum L\\\\u00f6schen\", \"description\": \"Das L\\\\u00f6schen von Elementen kann sehr einfach sein, es kann sich jedoch auch als sehr komplex entpuppen, je nachdem wie viele Kinder der zu l\\\\u00f6schende Knoten hat. Solltest du dir hier noch unsicher sein schau dir das Video dazu an.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/50e_Bsp_Bin\\\\u00e4rer-Suchbaum-L\\\\u00f6schen.mp4\"}, {\"id\": 58, \"name\": \"AVL-B\\\\u00e4ume\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit speziellen bin\\\\u00e4ren Suchb\\\\u00e4umen, den AVL-B\\\\u00e4umen und ihren Eigenschaften.\", \"type\": 0}, {\"id\": 59, \"name\": \"AVL-Baum\", \"description\": \"Ein bin\\\\u00e4rer Suchbaum ist h\\\\u00f6henbalanciert, wenn sich f\\\\u00fcr jeden Knoten v die H\\\\u00f6he der beiden Kinder von v um h\\\\u00f6chstens 1 unterscheidet. Ein h\\\\u00f6henbalancierter Suchbaum hei\\\\u00dft auch AVL-Baum.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/52_Def_AVL-Baum.mp4\"}, {\"id\": 60, \"name\": \"dyn. Operationen auf AVL-B\\\\u00e4umen\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit dem Erhalt der AVL-Eigenschaft eines bin\\\\u00e4ren Suchbaumes bei Einf\\\\u00fcge- und L\\\\u00f6schoperationen. Au\\\\u00dferdem werfen wir einen Blick auf die Fibonacci-Zahlen.\", \"type\": 0}, {\"id\": 61, \"name\": \"AVL-Rotation\", \"description\": \"Dieser Algorithmus (4.9) erh\\\\u00e4lt als Input einen Knoten x eines bin\\\\u00e4ren Suchbaumes T, Vaterknoten y, Gro\\\\u00dfvaterknoten z und liefert als Output den bin\\\\u00e4ren Suchbaum T nach Umstrukturierung mit x, y, z.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/54_Alg_AVL-Restructure.mp4\"}, {\"id\": 62, \"name\": \"Fibonacci-Zahlen\", \"description\": \"Die Fibonacci-Zahlen sind eine rekursiv definierte Zahlenfolge, bei der sich eine Zahl aus der Summe ihrer zwei Vorg\\\\u00e4nger ergibt. Dabei sind die ersten beiden Elemente gegeben als 1. Die Fibonacci-Zahlen finden sich \\\\u00fcberall in der Natur wieder und haben nicht wenig mit unserer Auffassung von Sch\\\\u00f6nheit zu tun.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/55_Def_Fibonacci-Zahlen.mp4\"}, {\"id\": 63, \"name\": \"Induktionsbeweis-\\\\u00dcbung\", \"description\": \"In dieser \\\\u00dcbung schauen wir uns eine Beweistechnik an: die vollst\\\\u00e4ndige Induktion.\", \"type\": 3}, {\"id\": 64, \"name\": \"Induktionsbeweise\", \"description\": \"Eine Reihe von Beispielen zum Thema Induktionsbeweis. Es wird in verschiedenen Szenarien gezeigt, wie man Den Induktionsanfang erh\\\\u00e4lt, damit die Induktionsbehauptung aufstellt und diese dann nutzt um den Induktionsschritt durchzuf\\\\u00fchren.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/57_Bsp_Induktionsbeweise.mp4\"}, {\"id\": 65, \"name\": \"Fehler bei Induktionsbeweisen\", \"description\": \"In diesem Video wird einmal auf beliebte Fehler bei Induktionsbeweisen eingegangen, welche man unbedingt vermeiden sollte.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/58_Bsp_Fehler-bei-Induktionsbeweisen.mp4\"}, {\"id\": 66, \"name\": \"\\\\u00dcbung dynamische Datenstrukturen\", \"description\": \"In dieser \\\\u00dcbung betrachten wir noch einmal verschiedene Aspekte von Datenstrukturen und stellen \\\\u00dcberlegungen an, wie die Auswahl von Datenstrukturen die Laufzeit von Algorithmen beeinflussen kann.\", \"type\": 3}, {\"id\": 67, \"name\": \"Laufzeit Hierholzer Algorithmus\", \"description\": \"Wir betrachten einmal die Laufzeit des Hierholzer-Algorithmus (2.8) und im Zusammenhang damit auch verkettete Listen.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/59a_Bsp_Laufzeit-Hierholzer.mp4\"}, {\"id\": 68, \"name\": \"Suchbaummerge\", \"description\": \"In diesem Teil der \\\\u00dcbung betrachten wir einmal das Verschmelzen von bin\\\\u00e4ren Suchb\\\\u00e4umen und dessen Laufzeit.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/59b_Bsp_Suchbaummerge.mp4\"}, {\"id\": 69, \"name\": \"Beispiel AVL-Baum-Operationen\", \"description\": \"Wir schauen uns noch einmal genauer die AVL-B\\\\u00e4ume an und was man damit machen kann. Insbesondere auch die Operationen L\\\\u00f6schen und Einf\\\\u00fcgen.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/59c_Bsp_AVL-Baum-Operationen.mp4\"}, {\"id\": 70, \"name\": \"Dynamische Datenstrukturen 2\", \"description\": \"In dieser Vorlesung schauen wir noch einmal auf das bisher in Kapitel 4 gelernte zur\\\\u00fcck. Au\\\\u00dferdem geben wir einen \\\\u00dcberblick \\\\u00fcber einige weitere dynamische Datenstrukturen wie Rot-Scharz-B\\\\u00e4umme, B-B\\\\u00e4ume und Heaps.\", \"type\": 0}, {\"id\": 71, \"name\": \"Rot-Schwarz-B\\\\u00e4ume\", \"description\": \"Ein bin\\\\u00e4rer Suchbaum hei\\\\u00dft Rot-Schwarz-Baum, wenn er die folgenden Eigenschaften erf\\\\u00fcllt:<br>1. Jeder Knoten ist entweder rot oder schwarz.<br>2. Die Wurzel ist schwarz.<br>3. Jedes Blatt (NIL) ist schwarz.<br>4. Wenn ein Knoten rot ist, sind seine beiden Kinder schwarz.<br>5. F\\\\u00fcr jeden Knoten enthalten alle Pfade nach unten zu einem Blatt des Teilbaumes die gleiche Anzahl schwarzer Knoten.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/61_Def_Rot-Schwarz-B\\\\u00e4ume.mp4\"}, {\"id\": 72, \"name\": \"B-B\\\\u00e4ume\", \"description\": \"B-B\\\\u00e4ume sind bin\\\\u00e4re Suchb\\\\u00e4ume, welche f\\\\u00fcr externen Speicher (HDDs) optimiert sind. Dabei wird die H\\\\u00f6he des Baumes minimiert und es werden den Knoten mehr Schl\\\\u00fcssel zugewiesen.<br>Mehr dazu in Cormen, Kapitel 18 oder der Vorlesung RDB 2.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/62_Def_B-B\\\\u00e4ume.mp4\"}, {\"id\": 73, \"name\": \"Heaps\", \"description\": \"Ein gerichteter bin\\\\u00e4rer Baum hei\\\\u00dft bin\\\\u00e4rer Min/Max-Heap, wenn jeder Knoten einen Schl\\\\u00fcssel hat, alle Ebenen au\\\\u00dfer der \\'letzten\\' genau 2 Knoten haben, auf der \\'letzten\\' Ebene die linken n-(2^h)+1 Positionen besetzt sind und jeder Schl\\\\u00fcssel eines Knotens h\\\\u00f6chstens/mindestens so gro\\\\u00df ist wie die seiner Kinder.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/63_Def_Heaps.mp4\"}, {\"id\": 74, \"name\": \"Einf\\\\u00fchrung in das Sortieren\", \"description\": \"In dieser Vorlesung geben wir eine Einf\\\\u00fchrung in das Oberthema Sortieren. Wir stellen au\\\\u00dferdem einen Sortieralgorithmus mit dem Namen Mergesort vor und stellen grundlegende \\\\u00dcberlegungen zur Laufzeit von Sortieralgorithmen an.\", \"type\": 0}, {\"id\": 75, \"name\": \"Merge-Sort\", \"description\": \"Dieser Algorithmus (5.1) erh\\\\u00e4lt als Input ein Subarray von A=[1,...,n], der bei Index p beginnt und bei Index r endet, d.h. A[p,...,r] und liefert als Output ein sortiertes Subarray. Wichtig ist daf\\\\u00fcr auch die Subroutine (5.2), welche als Input zwei sortierte Subarrays von A=[1,...,n], d.h. A[p,...,q] und A[q+1,...,r] erh\\\\u00e4lt und als Output das sortierte Subarray A[p,...,r] liefert.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/65_Alg_Merge-Sort.mp4\"}, {\"id\": 76, \"name\": \"Sortier-Laufzeitschranken\", \"description\": \"In dieser Vorlesung leiten wir konkrete Laufzeitschranken f\\\\u00fcr das Problem des Sortierens einer Liste von Zahlen her. Zudem machen wir uns Gedanken \\\\u00fcber das L\\\\u00f6sen von Rekursionsgleichungen.\", \"type\": 0}, {\"id\": 77, \"name\": \"Permutation\", \"description\": \"Eine Permutation P ist eine Umsortierung von n Objekten.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/67_Def_Permutation.mp4\"}, {\"id\": 78, \"name\": \"Erzeugende Funktionen\", \"description\": \"Erzeugende Funktionen k\\\\u00f6nnen genutzt werden um Rekursionen zu l\\\\u00f6sen. Wie das genau aussieht wird an einem simplen Beispiel hier einmal angef\\\\u00fchrt.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/68_Def_erzeugende-Funktionen.mp4\"}, {\"id\": 79, \"name\": \"Erzeugende Funktionen/Mastertheorem\", \"description\": \"In dieser Vorlesung besprechen wir weitere Details zu erzeugenden Funktionen und f\\\\u00fchren das Master-Theorem ein.\", \"type\": 0}, {\"id\": 80, \"name\": \"erzeugende Funktionen Fibonacci-Zahlen\", \"description\": \"In diesem Beispiel wird einmal die erzeugende Funktion der Fibonacci-Zahlen hergeleitet.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/70_Bsp_Erzeugende-Funktionen-Fibonacci.mp4\"}, {\"id\": 81, \"name\": \"Master-Theorem\", \"description\": \"Das Master-Theorem bietet eine schnelle L\\\\u00f6sung f\\\\u00fcr die Frage, in welcher Laufzeitklasse eine gegebene rekursiv definierte Funktion liegt. Dies funktioniert leider nur, solange einer der drei F\\\\u00e4lle des Theorems auf die Funktion angewandt werden kann, ansonsten liefert das Theorem keine Aussage.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/71_Def_Master-Theorem.mp4\"}, {\"id\": 82, \"name\": \"Master-Theorem Beispiele\", \"description\": \"Einige Beispiele, an denen das Master-Theorem und seine Funktion noch einmal verdeutlicht wird.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/72_Bsp_Master-Theorem-Beispiele.mp4\"}, {\"id\": 83, \"name\": \"Sortieralgorithmen und Master-Theorem\", \"description\": \"Wir betrachten ein weiteres Beispiel f\\\\u00fcr Mergesort und leiten erneut die Laufzeit des Sortieralgorithmus her, indem das Master-Theorem benutzt wird. Au\\\\u00dferdem betrachten wir einen weiteren Sortieralgorithmus: Heapsort.\", \"type\": 3}, {\"id\": 84, \"name\": \"Merge-Sort Beispiel\", \"description\": \"Hier wird der Merge-Sort Algorithmus einmal mit einem Beispiel komplett durchgef\\\\u00fchrt und die Laufzeit des Algorithmus betrachtet.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/74_Bsp_Merge-Sort-Beispiel.mp4\"}, {\"id\": 85, \"name\": \"Master-Theorem Beispiel\", \"description\": \"3 weitere Beispiele, welche dabei helfen das Master-Theorem zu verstehen und anzuwenden.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/75_Bsp_Master-Theorem-Beispiel.mp4\"}, {\"id\": 86, \"name\": \"Max-Heaps\", \"description\": \"Hier wir aufgezeigt, wie man mithilfe eines Algorithmus Max-Heaps bildet. \", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/76_Alg_Max-Heaps.mp4\"}, {\"id\": 87, \"name\": \"Max-Heaps Anwendung\", \"description\": \"Hier wird der Algorithmus aus der \\\\u00dcbung 6 zum Erstellen eines Max-Heaps einmal an einem Beispiel angewandt.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/77_Bsp_Max-Heaps-Anwendung.mp4\"}, {\"id\": 88, \"name\": \"Heapsort\", \"description\": \"Heapsort ist ein Algorithmus bei dem mithilfe von Max-Heaps eine Reihe von Elementen sortiert werden kann. Der Algorithmus hat dabei eine Laufzeit von O(n log n), wie auch in \\\\u00dcbung 6 bewiesen wird.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/78_Alg_Heapsort.mp4\"}, {\"id\": 89, \"name\": \"nichtlineare Rekursionen (Exkurs)\", \"description\": \"In dieser Vorlesung haben wir einen Exkurs in die nichtlineare Rekursion gemacht.\", \"type\": 0}, {\"id\": 90, \"name\": \"logistische Rekursion\", \"description\": \"Logistische Rekursion bezeichnet ein Wachstum proportional zu einer Gr\\\\u00f6\\\\u00dfe. Dabei betrachtet man beispielsweise eine Bev\\\\u00f6lkerung, welche zwar durch Fruchtbarkeit immer weiter w\\\\u00e4chst, aber beispielsweise durch Tod auch wieder im Wachstum beschr\\\\u00e4nkt wird.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/80_Def_Logistische-Rekursion.mp4\"}, {\"id\": 91, \"name\": \"Mandelbrot-Menge\", \"description\": \"Die Mandelbrot-Menge, benannt nach Beno\\\\u00eet Mandelbrot, ist eine Menge in den komplexen Zahlen. Interpretiert man sie als geometrische Figur, so ergibt sich ein Fraktal, welches im allgemeinen Sprachgebrauch auch als Apfelm\\\\u00e4nnchen bekannt ist.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/81_Def_Mandelbrot-Menge.mp4\"}, {\"id\": 92, \"name\": \"Fraktale\", \"description\": \"Ein Fraktal beschreibt nat\\\\u00fcrliche oder k\\\\u00fcnstliche Gebilde oder geometrische Muster und ist ein von Beno\\\\u00eet Mandelbrot gepr\\\\u00e4gter Begriff. - Wikipedia\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/82_Def_Fraktale.mp4\"}, {\"id\": 93, \"name\": \"Zellul\\\\u00e4re Automaten\", \"description\": \"Zellul\\\\u00e4re oder auch zellulare Automaten dienen der Modellierung r\\\\u00e4umlich diskreter dynamischer Systeme, wobei die Entwicklung einzelner Zellen zum Zeitpunkt t+1 prim\\\\u00e4r von den Zellzust\\\\u00e4nden in einer vorgegebenen Nachbarschaft und vom eigenen Zustand zum Zeitpunkt t abh\\\\u00e4ngt. - Wikipedia\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/83_Def_Zellul\\\\u00e4re-Automaten.mp4\"}, {\"id\": 94, \"name\": \"Game of Life\", \"description\": \"Das \\'Game of Life\\' ist das wohl bekannteste Beispiel eines zellul\\\\u00e4ren Automaten. \", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/84_Bsp_Game-of-Life.mp4\"}, {\"id\": 95, \"name\": \"Einf\\\\u00fchrung von Quick-Sort\", \"description\": \"In dieser Vorlesung kehren wir zur\\\\u00fcck zu Sortieralgorithmen und stellen den Quicksort-Algorithmus vor.\", \"type\": 0}, {\"id\": 96, \"name\": \"Quick-Sort\", \"description\": \"Dieser Algorithmus (5.14) erh\\\\u00e4lt als Input ein Subarray von A=[1,...,n], der bei Index p beginnt und bei Index r endet, d.h. A[p,...,r] und liefert als Output einen sortierten Subarray. Dabei ist auch Subroutine 5.15 wichtig, welche als Input ein Subarray von A=[1,...,n], d.h. A[p,...,r] erh\\\\u00e4lt und als Output zwei Subarrays A[p,...,q-1] und A[q+1,...,r] mit A[i]\\\\u2264A[q] und A[q]<A[j] f\\\\u00fcr i=p,...,q-1 und j=q+1,...,r liefert.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/86_Alg_Quick-Sort.mp4\"}, {\"id\": 97, \"name\": \"Laufzeit von Quick-Sort\", \"description\": \"Die Laufzeit des Quick-Sort Algorithmus l\\\\u00e4sst sich mithilfe vom Master-Theorem ermitteln. Dazu betrachten wir die 3 F\\\\u00e4lle best-case, average-case und worst-case f\\\\u00fcr den Algorithmus.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/87_Bsp_Quick-Sort-Laufzeit.mp4\"}, {\"id\": 98, \"name\": \"Mediane\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit Medianen.\", \"type\": 0}, {\"id\": 99, \"name\": \"Standortprobleme\", \"description\": \"Was ist der optimale Standort f\\\\u00fcr beispielsweise ein Amazon-Lagerhaus? Idee: Die durchschnittliche Distanz zu den zu beliefernden Geb\\\\u00e4uden minimieren. In Amerika ist dies leicht umgesetzt mit der sogenannten Manhatten-Distanz. Dieses Problem ist die Einf\\\\u00fchrung in das Thema der Mediane.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/89_Def_Standortprobleme.mp4\"}, {\"id\": 100, \"name\": \"Median (diskret)\", \"description\": \"Der Rank k eines Elements x (auch \\'k-tes Element\\') ist definiert durch |{y \\\\u2208 X |y<=x}| = k. Also die Anzahl der Elemente, welche kleiner oder gleich x sind. Speziell hei\\\\u00dft x Median, wenn er das [n/2]-te Element ist. [n/2] wird dabei abgerundet.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/90_Def_Median-diskret.mp4\"}, {\"id\": 101, \"name\": \"Median (kontinuierlich)\", \"description\": \"Der kontinuierliche Median hat als Eigenschaft, dass das sowohl Integral bis zum Median, als auch ab dem Median gr\\\\u00f6\\\\u00dfer-gleich 1/2 ist.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/91_Def_Median-kontinuierlich.mp4\"}, {\"id\": 102, \"name\": \"Sortieralgorithmen Sonderf\\\\u00e4lle\", \"description\": \"In dieser Vorlesung besch\\\\u00e4ftigen wir uns mit Sonderf\\\\u00e4llen f\\\\u00fcr Sortieralgorithmen, durch die Sortieren in linearer Zeit erm\\\\u00f6glicht wird. Dabei werfen wir einen n\\\\u00e4heren Blick auf die Sortierverfahren Countingsort und Radixsort.\", \"type\": 0}, {\"id\": 103, \"name\": \"Counting-Sort\", \"description\": \"Dieser Algorithmus (5.14) erh\\\\u00e4lt als Input ein Array von A=[1],...,A[n] mit Schl\\\\u00fcsselwerten aus {1,\\\\u2026, k} und liefert als Output eine sortierte Kopie B[1],\\\\u2026,B[n] von [1],...,A[n].\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/93_Alg_Counting-Sort.mp4\"}, {\"id\": 104, \"name\": \"Radix-Sort\", \"description\": \"Dieser Algorithmus (5.18) erh\\\\u00e4lt als Input n Zahlen mit je d Ziffern, die k verschiedene Werte annehmen k\\\\u00f6nnen, [1],...,A[n]  und liefert als Output einen sortierten Array. Dabei geht Radix-Sort im Gegensatz zu anderen Sortieralgorithmen ziffernweise vor.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/94_Alg_Radix-Sort.mp4\"}, {\"id\": 105, \"name\": \"Quick-Sort, Mediane, kd-B\\\\u00e4ume\", \"description\": \"In dieser \\\\u00dcbung schauen wir uns noch einmal das Sortierverfahren Quicksort an und sprechen \\\\u00fcber die Berechnung von Medianen. Au\\\\u00dferdem schauen wir uns mit den kd-B\\\\u00e4umen eine spezielle Datenstruktur f\\\\u00fcr mehrdimensionale Daten an.\", \"type\": 3}, {\"id\": 106, \"name\": \"Quick-Sort Beispiel\", \"description\": \"In diesem Beispiel wird die Funktionsweise von Quick-Sort, sowie die Laufzeit betrachtet.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/96_Bsp_Quick-Sort-Beispiel.mp4\"}, {\"id\": 107, \"name\": \"Mediane Beispiel\", \"description\": \"In diesem Teil der \\\\u00dcbung schauen wir uns noch einmal genauer an, was Mediane sind, wie man sie algorithmisch bestimmen kann und in welcher Laufzeit das m\\\\u00f6glich ist.\", \"type\": 1, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/97_Bsp_Mediane-Beispiel.mp4\"}, {\"id\": 108, \"name\": \"kd-B\\\\u00e4ume (Exkurs)\", \"description\": \"kd-B\\\\u00e4ume sind B\\\\u00e4ume mit einer h\\\\u00f6heren Dimension. Mithilfe der Idee den Baum abwechselnd nach x- und y-Koordinate zu durchsuchen und so zu konstruieren entsteht ein Algorithmus mit dem man mehrdimensionale Suchb\\\\u00e4ume erstellen kann. Auch schauen wir uns an, wie man in einem solchen Baum sucht.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/98_Def_kd-B\\\\u00e4ume-Exkurs.mp4\"}, {\"id\": 109, \"name\": \"(parallelisierte) Sortierverfahren\", \"description\": \"In dieser Vorlesung beenden wir das Kapitel zum Thema Sortieralgorithmen und werfen abschlie\\\\u00dfend einen Blick auf parallelisierte Sortierverfahren.\", \"type\": 0}, {\"id\": 110, \"name\": \"Bubble-Sort Beispiel\", \"description\": \"Einige Beispiele, wie Bubble-Sort funktioniert, inklusive einiger verschiedener Darstellungen/Animationen und dem Vergleich mit Quick-Sort.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/100_Alg_Bubble-Sort-Beispiel.mp4\"}, {\"id\": 111, \"name\": \"paralleles Bubble-Sort\", \"description\": \"Mithilfe von Parallelisierung l\\\\u00e4sst sich Bubble-Sort auch in linearer Zeit umsetzen. Die Idee daf\\\\u00fcr wird hier einmal erl\\\\u00e4utert.\", \"type\": 2, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/101_Def_Paralleles-Bubble-Sort.mp4\"}, {\"id\": 112, \"name\": \"Bogo-Sort\", \"description\": \"Bogo-Sort ist ein eher als Scherz gemeinter Sortieralgorithmus. Dabei wird die gegebene Menge solange zuf\\\\u00e4llig durchpermutiert und \\\\u00fcberpr\\\\u00fcft bis die korrekte L\\\\u00f6sung erreicht ist.\", \"type\": 4, \"video\": \"https://www.ibr.cs.tu-bs.de/alg/videos/aud/ws2122/102_Alg_Bogo-Sort.mp4\"}, {\"id\": 113, \"name\": \"Zusammenfassung\", \"description\": \"Diese Vorlesung markiert das Ende der Vorlesungszeit. Wir gehen deshalb noch einmal R\\\\u00fcckblickend \\\\u00fcber die verschiedenen Themen die in den vergangenen Monaten behandelt wurden und geben die M\\\\u00f6glichkeit Fragen zu stellen.\", \"type\": 0}, {\"id\": 114, \"name\": \"Klausurvorbereitung\", \"description\": \"Die letzte gro\\\\u00dfe \\\\u00dcbung von AuD mit Spiel, Spa\\\\u00df, Spannung und vielen Fragen.\", \"type\": 3}, {\"id\": 115, \"name\": \"Einleitung\", \"description\": \"Eine Einleitung in die Welt der Algorithmen und Datenstrukturen. Was ist ein Algorithmus und wozu wird er ben\\\\u00f6tigt? Und was haben Datenstrukturen damit zu tun?\", \"type\": 5}, {\"id\": 116, \"name\": \"Graphen\", \"description\": \"Graphen sind eine wichtige Darstellungsform von Daten in der Informatik. Wie Graphen aufgebaut sind und was man alles mit ihnen machen kann wird in diesem Kapitel behandelt.\", \"type\": 5}, {\"id\": 117, \"name\": \"Suche in Graphen\", \"description\": \"Die Suche in Graphen ist ein wichtiges Werkzeug. Allerdings gibt es mehrere Wege, welche zum Ziel f\\\\u00fchren und nicht alle funktionieren gleich gut. Wie man effizient in Graphen sucht wird in diesem Kapitel behandelt.\", \"type\": 5}, {\"id\": 118, \"name\": \"Dynamische Datenstrukturen\", \"description\": \"Im Laufe der Vorlesung wurden bereits einige Datenstrukturen vorgestellt. In diesem Kapitel besch\\\\u00e4ftigen wir uns mit einer weiteren Klasse der Datenstrukturen, den dynamischen Datenstrukturen. Und damit, welche M\\\\u00f6glichkeiten sie bieten.\", \"type\": 5}, {\"id\": 119, \"name\": \"Sortieren\", \"description\": \"Neben der Suche von Elementen spielt auch das Sortieren in der Informatik eine gro\\\\u00dfe Rolle. Wie man das macht wird in diesem Kapitel behandelt.\", \"type\": 5}, {\"id\": 120, \"name\": \"AuD1\", \"description\": \"Algorithmen und Datenstrukturen 1\", \"type\": 5}], \"links\": [{\"source\": 0, \"target\": 115}, {\"source\": 1, \"target\": 0}, {\"source\": 2, \"target\": 0}, {\"source\": 3, \"target\": 115}, {\"source\": 3, \"target\": 5}, {\"source\": 4, \"target\": 0}, {\"source\": 5, \"target\": 115}, {\"source\": 6, \"target\": 5}, {\"source\": 7, \"target\": 115}, {\"source\": 8, \"target\": 115}, {\"source\": 8, \"target\": 7}, {\"source\": 9, \"target\": 116}, {\"source\": 10, \"target\": 13}, {\"source\": 11, \"target\": 116}, {\"source\": 11, \"target\": 14}, {\"source\": 11, \"target\": 20}, {\"source\": 11, \"target\": 22}, {\"source\": 11, \"target\": 23}, {\"source\": 12, \"target\": 13}, {\"source\": 12, \"target\": 14}, {\"source\": 13, \"target\": 116}, {\"source\": 14, \"target\": 116}, {\"source\": 15, \"target\": 116}, {\"source\": 16, \"target\": 15}, {\"source\": 17, \"target\": 15}, {\"source\": 18, \"target\": 15}, {\"source\": 19, \"target\": 15}, {\"source\": 20, \"target\": 21}, {\"source\": 21, \"target\": 116}, {\"source\": 22, \"target\": 21}, {\"source\": 23, \"target\": 21}, {\"source\": 24, \"target\": 117}, {\"source\": 25, \"target\": 117}, {\"source\": 25, \"target\": 15}, {\"source\": 26, \"target\": 27}, {\"source\": 27, \"target\": 117}, {\"source\": 28, \"target\": 29}, {\"source\": 28, \"target\": 30}, {\"source\": 28, \"target\": 31}, {\"source\": 28, \"target\": 32}, {\"source\": 28, \"target\": 33}, {\"source\": 29, \"target\": 117}, {\"source\": 30, \"target\": 117}, {\"source\": 31, \"target\": 117}, {\"source\": 31, \"target\": 27}, {\"source\": 32, \"target\": 117}, {\"source\": 32, \"target\": 27}, {\"source\": 33, \"target\": 34}, {\"source\": 33, \"target\": 35}, {\"source\": 34, \"target\": 117}, {\"source\": 35, \"target\": 117}, {\"source\": 36, \"target\": 35}, {\"source\": 36, \"target\": 37}, {\"source\": 37, \"target\": 117}, {\"source\": 38, \"target\": 32}, {\"source\": 38, \"target\": 31}, {\"source\": 38, \"target\": 27}, {\"source\": 39, \"target\": 31}, {\"source\": 39, \"target\": 27}, {\"source\": 40, \"target\": 32}, {\"source\": 40, \"target\": 27}, {\"source\": 41, \"target\": 37}, {\"source\": 42, \"target\": 117}, {\"source\": 43, \"target\": 37}, {\"source\": 43, \"target\": 31}, {\"source\": 43, \"target\": 32}, {\"source\": 44, \"target\": 25}, {\"source\": 44, \"target\": 46}, {\"source\": 45, \"target\": 27}, {\"source\": 45, \"target\": 35}, {\"source\": 46, \"target\": 28}, {\"source\": 46, \"target\": 47}, {\"source\": 47, \"target\": 118}, {\"source\": 48, \"target\": 118}, {\"source\": 49, \"target\": 48}, {\"source\": 50, \"target\": 51}, {\"source\": 50, \"target\": 52}, {\"source\": 51, \"target\": 118}, {\"source\": 52, \"target\": 118}, {\"source\": 52, \"target\": 51}, {\"source\": 53, \"target\": 52}, {\"source\": 54, \"target\": 52}, {\"source\": 55, \"target\": 52}, {\"source\": 56, \"target\": 52}, {\"source\": 57, \"target\": 52}, {\"source\": 58, \"target\": 59}, {\"source\": 59, \"target\": 51}, {\"source\": 59, \"target\": 118}, {\"source\": 60, \"target\": 59}, {\"source\": 61, \"target\": 118}, {\"source\": 61, \"target\": 60}, {\"source\": 61, \"target\": 59}, {\"source\": 62, \"target\": 118}, {\"source\": 63, \"target\": 25}, {\"source\": 64, \"target\": 63}, {\"source\": 64, \"target\": 25}, {\"source\": 65, \"target\": 63}, {\"source\": 65, \"target\": 25}, {\"source\": 66, \"target\": 47}, {\"source\": 66, \"target\": 48}, {\"source\": 66, \"target\": 51}, {\"source\": 66, \"target\": 52}, {\"source\": 66, \"target\": 59}, {\"source\": 66, \"target\": 61}, {\"source\": 67, \"target\": 22}, {\"source\": 67, \"target\": 47}, {\"source\": 68, \"target\": 52}, {\"source\": 68, \"target\": 51}, {\"source\": 69, \"target\": 61}, {\"source\": 69, \"target\": 59}, {\"source\": 70, \"target\": 50}, {\"source\": 70, \"target\": 71}, {\"source\": 70, \"target\": 72}, {\"source\": 70, \"target\": 73}, {\"source\": 71, \"target\": 58}, {\"source\": 71, \"target\": 51}, {\"source\": 72, \"target\": 58}, {\"source\": 72, \"target\": 51}, {\"source\": 73, \"target\": 118}, {\"source\": 74, \"target\": 75}, {\"source\": 74, \"target\": 76}, {\"source\": 75, \"target\": 119}, {\"source\": 76, \"target\": 77}, {\"source\": 76, \"target\": 78}, {\"source\": 77, \"target\": 119}, {\"source\": 78, \"target\": 119}, {\"source\": 79, \"target\": 78}, {\"source\": 80, \"target\": 78}, {\"source\": 80, \"target\": 62}, {\"source\": 81, \"target\": 119}, {\"source\": 82, \"target\": 81}, {\"source\": 83, \"target\": 75}, {\"source\": 83, \"target\": 81}, {\"source\": 84, \"target\": 75}, {\"source\": 85, \"target\": 81}, {\"source\": 86, \"target\": 73}, {\"source\": 86, \"target\": 87}, {\"source\": 86, \"target\": 119}, {\"source\": 86, \"target\": 84}, {\"source\": 87, \"target\": 86}, {\"source\": 88, \"target\": 119}, {\"source\": 88, \"target\": 86}, {\"source\": 88, \"target\": 84}, {\"source\": 89, \"target\": 90}, {\"source\": 89, \"target\": 91}, {\"source\": 89, \"target\": 92}, {\"source\": 89, \"target\": 93}, {\"source\": 90, \"target\": 119}, {\"source\": 91, \"target\": 119}, {\"source\": 92, \"target\": 119}, {\"source\": 92, \"target\": 91}, {\"source\": 93, \"target\": 119}, {\"source\": 94, \"target\": 93}, {\"source\": 95, \"target\": 96}, {\"source\": 96, \"target\": 119}, {\"source\": 97, \"target\": 96}, {\"source\": 97, \"target\": 81}, {\"source\": 98, \"target\": 100}, {\"source\": 98, \"target\": 101}, {\"source\": 99, \"target\": 98}, {\"source\": 100, \"target\": 119}, {\"source\": 101, \"target\": 119}, {\"source\": 101, \"target\": 100}, {\"source\": 102, \"target\": 103}, {\"source\": 102, \"target\": 104}, {\"source\": 103, \"target\": 119}, {\"source\": 104, \"target\": 119}, {\"source\": 105, \"target\": 96}, {\"source\": 105, \"target\": 100}, {\"source\": 105, \"target\": 101}, {\"source\": 106, \"target\": 96}, {\"source\": 107, \"target\": 100}, {\"source\": 107, \"target\": 101}, {\"source\": 108, \"target\": 119}, {\"source\": 108, \"target\": 51}, {\"source\": 108, \"target\": 105}, {\"source\": 109, \"target\": 110}, {\"source\": 109, \"target\": 111}, {\"source\": 109, \"target\": 112}, {\"source\": 110, \"target\": 119}, {\"source\": 110, \"target\": 96}, {\"source\": 111, \"target\": 110}, {\"source\": 112, \"target\": 119}, {\"source\": 113, \"target\": 120}, {\"source\": 114, \"target\": 113}, {\"source\": 115, \"target\": 120}, {\"source\": 116, \"target\": 120}, {\"source\": 117, \"target\": 120}, {\"source\": 118, \"target\": 120}, {\"source\": 119, \"target\": 120}], \"objectGroups\": [{\"id\": 0, \"name\": \"Vorlesung\", \"color\": \"rgb(104, 169, 77)\"}, {\"id\": 1, \"name\": \"Beispiel\", \"color\": \"rgb(102, 75, 154)\"}, {\"id\": 2, \"name\": \"Definition\", \"color\": \"rgb(41, 171, 226)\"}, {\"id\": 3, \"name\": \"\\\\u00dcbung\", \"color\": \"rgb(224, 133, 35)\"}, {\"id\": 4, \"name\": \"Algorithmus\", \"color\": \"rgb(214, 207, 126)\"}, {\"id\": 5, \"name\": \"Kapitel\", \"color\": \"rgb(239, 65, 35)\"}]}'"
       ]
      },
-     "execution_count": 11,
+     "execution_count": 60,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -169,7 +210,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -183,7 +224,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.11"
+   "version": "3.10.4"
   }
  },
  "nbformat": 4,
-- 
GitLab