CS 210 – Algorithms and Data Structures (Summer 2026) · unit page · YouTube
2026-04-20, 11:49

Click any sentence to play from there.

The transcript was generated automatically by YouTube's speech recognition and is offered as is. It may contain errors, in particular in concerning technical terms, names and formulas.

0:02 Im nächsten Kapitel ganz grob ein bisschen was zur Programmierumgebung. Äh was ich da damit meine, sage ich Ihnen gleich. Ähm, ich möchte ein bisschen was zu Standardbibliotheken sagen und dann zu ein paar Hilfsklassen, die aus den Büchern stammen, ähm an denen ich manche Sachen angelehnt habe, die einfach manche Aufgaben gerade in Java speziell ein bisschen bequemer machen und äh da vielleicht ein bisschen bisschen Reibung aus äh ihrer Erfahrung nehmen.

0:35 Ein Stück weit ist dieses Modul ein Spagat zwischen Theorie und Praxis. Algorithmen und Datenstrukturen selbst sind eigentlich ein Teil der theoretischen Informatik, der Algorithmik, aber sie sind nicht losgelöst zu betrachten. Wir machen das, weil sie so praktis relevant sind für Implementierung. Deswegen sollen sie zwar einerseits firm sein in diesen theoretischen Analysen und den Beweisen und diesen Dingen, aber sie sollen sie auch einsetzen können. Dafür werden wir zwar Java verwenden, aber das soll nicht primär um die Sprache gehen. Deshalb äh erlauben wir uns an ein paar Stellen Abkürzung, insbesondere, wenn es darum geht, robusten Code in Java zu schreiben. Da ist dann ein Unterschied zwischen welcher Code eignet sich gut, um eine algorithmische Idee auf einer Folie zu präsentieren und wie sollte man Code schreiben, wenn er robust in dem Produktionssystem laufen soll? Das sind beides spannende Dinge, aber wir werden nur eins von beidem in der Vorlesung wirklich unterbringen. Ersteres äh an anderen Stellen möchte ich möchte ich Abkürzung definitiv auslassen und verbieten, nämlich dann, wenn es ähm sagen, dass den den das dem dem Lernziel zu wieder läuft. Ein klassisches Beispiel wäre jetzt Python, wenn wir das verwenden würden. Python hat eingebaut jede Menge Datenstrukturen, die man dann direkt verwenden kann. Selbst schon die eingebauten Listen, die äh vielleicht besser Arrays heißen sollten, denn einfügen in der Liste in Python in der Mitte ist im Wesentlichen die Elemente, die danach kommen, einmal verschieben nach rechts, weil also ist relativ langsam, wenn die Liste groß ist.

2:17 Umgekehrt kann man aber in Python an der Liste hinten immer beliebig viele Elemente anhängen. Die hat keine keine vordefinierte Größe. Das ist was. Um Algorithmik zu unterrichten ist das extrem lästig. Gott sei Dank haben wir ja äh diese Abstraktion noch nicht direkt in der Sprache gibt. Sie kennen Java Arrays. Die haben eine feste Größe, die man bei beim Anlegen festlegen muss und mehr gibt es dann nicht. kann man nicht verkleinern oder vergrößern. Das ist hiermit gemeint mit den Abkürzungen, die wir die wir explizit nicht nehmen wollen, auch wenn sie vielleicht manchmal in den Programmiersprachen bequem angeboten würden.

3:05 Ein paar Takte zu Standardbibliotheken. Eine Programmiersprache legt fest, was ich schreiben darf und was ein gültiges Programm ist. Und das reicht natürlich, wenn man aus theoretischer Informatik drauf schaut, völlig aus, solange die Sprache Turing vollständig ist. Ich weiß nicht, kommt dann in theoretischer Informatik noch mal im Detail. Äh, es braucht nicht sehr viel, um eine Sprache theoretisch so ausdrucksstark zu machen, wie jede andere Programmiersprache. Tatsächlich sind dann auch alle im Wesentlichen gleichausdrucksstark.

3:37 Das ist aber nicht das gleiche wie bequem und effizient und so weiter. Insbesondere, wenn es um die Geschwindigkeit geht, äh ist die ist die Aussage ein bisschen differenzierter. Als Analogie könnte man sagen, die Programmiersprachen legen so ein bisschen die Grammatikregeln fest, aber um eine flüssige Unterhaltung führen zu können, wer eine Fremdsprache lernt, der kennt das Problem, braucht man auch einfach Wörter und Abstraktionen und Begriffe und Redewendungen und so weiter. Und das ist im Programmieren das, was äh was Programmierbibliotheken liefern können. sind vor implementierte Funktionen in aller Regel plus Objekte und so weiter, die häufig vorkommende Dinge, Abstraktionen ähm effizient verwendbar machen und dass man sie jedes Mal neu bauen muss, sowie eben auch gibt eine Redewendung ein ganzen Kontext vermitteln kann einem Gegenüber, der die auch kennt, ohne dass man das jeweils komplett ausführen müsste. Anders als ähm die Programmiersprache selbst braucht man für eine Bibliothek eigentlich keine Erweiterung der Sprache, sondern man kann die Sprache selbst verwenden, um sie zu erweitern.

4:45 Das ist so ein bisschen wie wenn Sie jemandem eine Redewendung erklären. Sie können versuchen den ganzen Kontext, der in so einer Redewendung mitschwingt, äh was was wäre eine gute Redewendung? Ähm ein schönes Beispiel, eine die so ein bisschen nichts verfängliches, aber die ein bisschen beladen ist mit Kontext. Ja.

5:06 So wie man in den Wald schreit, schreit's wieder raus oder wie man in den Wald schreit, schaltet es heraus. So kenne ich es. Ja, also ist natürlich ähm auch der Teil der Redewendung, dass die so ein bisschen robust sind. Man kann die so ein leicht Variation leichten Variationen von verschiedenen Leuten hören. Man weiß trotzdem noch zuzuen, was damit gemeint ist. In dem Fall ist es so ein bisschen ja ähm was du nicht willst, was man dir tut. Füge auch keinem anderen zu, schwingt mit oder ähm ja, der der Kontext ist sehr breit, kann moralistisch sein, kann aber auch rein ähm physisch gemeint sein. Das was man so reingibt, das kommt auch zurück. Was man an Aufwand reinsteckt, kommt an Ertrag zurück. All diese Dinge. Also, sie können die deutsche Sprache nehmen, um die deutsche Sprache zu erweitern, um eine Redewendung, die vielleicht ihr Gegenüber nicht kannte. Danach ist die dann bekannt und wir können die beide jetzt verwenden, ohne sie jedes Mal neu zu definieren. Das ist was auch eine Programmierbibliothek macht.

6:08 Ähm, in der Regel gibt's auch Teile dann, die irgendwie so ein das die Koordination mit dem Betriebssystem übernimmt. So, Eingabe, Ausgabe ist der Klassiker. Ähm, da braucht man streng genommen nicht Erweiterung der Programmiersprache, aber man muss diese System Calls irgendwie machen. Das ist auch oft weggekapselt, damit man das nicht nicht tun muss oder aus Sicherheitsgründen darf man vielleicht auch gar nicht. Na gut. Standardbibliothek ist eine spezielle Programmierbibliothek, die eben fest Teil der Sprache ist und immer da ist. Ich brauche die nicht extra einbinden, sondern ohne, dass wir weiter drüber reden, gehe ich davon aus, dass dass das verstanden wird. Da gibt's in natürlich sprachlich in natürlicher Sprache nicht so ein richtiges Äquivalent. Es gibt eigentlich keinen Teil von Deutsch, wo man davon ausgehen kann, dass jeder den kennt. Schwierig zu ist an den Rändern unscharf, aber wahrscheinlich gibt es schon so ein einen Teil, von dem man ausgeht, dass die meisten den verstehen würden. Aber natürliche Sprache ist immer an den an den Adressaten angepasst. Ähm Programmiersprachen sind nicht ganz so flexibel.

7:15 Ähm Beispiele sind hier gelistet. Jede Programmiersprache hat eigentlich eine Standardbibliothek mit an Bord. wie umfangreich und wie umfänglich die sind, unterscheidet sich teils dramatisch. Das ist dann auch so ein bisschen die Frage, ähm welche Sprache man für welchen Zweck verwendet. Oft ist tatsächlich so, dass für den Einsatzzweck oder die wie hilfreich eine Programmiersprache ist, weniger wichtig ist, was sind so genau die Regeln und hat Python jetzt einen Volver Operator oder nicht? Das ist alles nicht so richtig entscheidend. viel spannender ist, welche Bibliotheken und gerade gibt es für die Steinbibliothek gibt es gut designte Bibliotheken. Das macht auch viel größer den Unterschied als ähm die Details der Sprache.

8:03 Für Java speziell unsere Unterrichtssprache heißt die Standbibliothek, die Java Runtime Library. Ähm, vermutlich müsste man da mittlerweile dazu sagen, der Java Standard Edition Teil, ähm, die Java Standard Bibliothek ist sehr umfangreich geworden mit Modulen, die man dann doch erst ähm optional dazu packen muss, bzw. es kommt auch ein bisschen drauf an, wo genau äh das ausgeführt wird. Es gibt einen Teil, der für Mobilgeräte ist und so weiter. Äh wir werden uns beschränken auf diese auf den Basisteil, der wirklich überall verfügbar ist, auch auf Android z.B. Insbesondere sind es die Klassen in Java Leng, Java Util und einige andere Packages. Sicherlich haben sie System out Printline verwendet, das ist Teil davon. In Java 21 sind etwa 4400 Klassen und Interfaes, die da immer so verfügbar sind. Das kann schon ein bisschen überwältigend sein und niemand niemand kennt all diese Klassen wirklich auswendig. Vielleicht ein paar ganz tief verbuddelte Java Core Developer, die die Dinger wirklich geschrieben haben, aber selbst dann 4400 alle im Detail hm äh das schafft man eigentlich nicht. Deswegen ist das auch gar nicht das Ziel. in der Standardbibliothek, wenn sie gut designt ist, soll so sein, dass sie nur so eine Ahnung haben müssen, dass es das, was sie suchen, was sie jetzt brauchen, da wahrscheinlich gibt und dass die die Namen und die äh Pakete und so weiter, dass das äh die Abstraktionen so gewählt sind, dass sie dann auch finden können, was sie suchen.

9:46 Das ist auch ein Teil, den man als Programm als den gute Programmierer ausmachen. Und ähm sie müssen diese 4000 Klassen nicht auswendig kennen, weil es dafür ja die Dokumentation gibt. Dafür gibt's Hilfsmittel verschiedener verschiedener Art von Automationen, die ihn da das Leben leichter machen.

10:11 Ja, da kann man wieder diese zwei Unterscheidungen treffen. Ich glaube, ich habe genug da drüber gesagt. Man kann mit der KI, wenn das eine Steinbibliothek ist, kriegt man oft sinnvollen Code, der die verwendet, automatisch generiert. Wenn Sie das aber machen, ohne zu lernen, wie die Abstraktion dahinter funktioniert, dann müssen Sie das nächste Mal das gleiche Prozedere wieder über sichergehen lassen. Bei vielen Sachen, die man öfter macht, lohnt sich vielleicht das äh zu lernen.

10:41 Ähm einen Punkt wollte ich hier noch anbringen, den hätte ich eigentlich gerne hier in dem Kapitel. Das ist dieses dieser Punkt hier, den ich noch mitgeben möchte. Diese 4400 Klassen, wie gesagt, brauchen sie definitiv nur einen kleinen Teil davon. Aber der andere Punkt ist eben noch, dass diese Standardbibliotheken dem per Definition nimmen, weil sie ja für alle, die Java verwenden gebaut sind, keinerlei Rücksicht drauf nehmen, ob sie Experte sind oder Anfänger. Und das heißt natürlich, dass die teilweise äh relativ rigoros Dinge voraussetzen, die man schon kennt oder auf die man Rücksicht nimmt nehmen sollte. Äh was dann für Experten auch zutrifft, aber vielleicht noch nicht für alle hier.

11:25 Aus diesem Grund werden wir Teile aus der Schimbibliothek durch diese Klassen von diesen ähm aus dem Lehrbuch hier äh ein bisschen ersetzen bzw. so ein Rapper davor schalten, um das ein bisschen einstiegsfreundlicher zu machen, aber ohne sie daran zu hindern, den vollen Funktionsumfang, der für Spaß irgendwie hilfreich ist, zu nutzen. M.

← Video 1-4: Die Sprache der ExpertenVideo 2-2: algs4 Library, StdIn, StdOut →