Algorithmen & Datenstrukturen

2. Semester Informatik (HSLU)

2. Semester Informatik (HSLU)


C. C.
Diese Lernkarten behandeln grundlegende und fortgeschrittene Konzepte von Algorithmen und Datenstrukturen auf Universitätsniveau. Sie konzentrieren sich auf verschiedene Datenstrukturen wie Listen, Arrays und Stacks, sowie deren Implementierung, Operationen und Ressourcenbedarf. Die Karteikarten erklären auch Algorithmen wie binäres Suchen und deren Aufwand. Sie sind besonders nützlich für Studierende der Informatik, die ihr Verständnis von Algorithmen und Datenstrukturen vertiefen möchten, um effiziente Lösungen für komplexe Probleme zu entwickeln.
Karten
134
Lernende
20
Sprache
Deutsch
Kategorie
Informatik
Stufe
Universität
Erstellt / Aktualisiert
21.02.2017 / 08.09.2023

Lernkarten

Wie gross ist der Aufwand beim Einfügen eines Elementes "C" einer sortierten Liste?

Dazu handelt es sich einmal um eine einfach und einmal um eine doppelt verkettete Liste!

Wir müssen sequenziell die richtige Position (B) suchen und ein neues Element einfügen, das Verschieben der restlichen Elemente entfällt hingegen! Der Aufwand ist trotzdem: O(n)

Aufwand für einfach und doppelt verkettete Liste identisch

Wie gross ist der Aufwand beim Einfügen eines Elementes "C" einer Liste?

Dazu handelt es sich einmal um eine einfach und einmal um eine doppelt verkettete Liste!

Wir müssen sequenziell das gewünschte Element suchen und es aus der Liste entfernen. Auch hier ist kein Nachrücken von Elementen notwendig. Aufwand (bedingt durch Suche): O(n)

Aufwand ist für einfach und doppelt verkettet Liste identisch

Listen werden typisch mit mindestens zwei Klassen modelliert. Weshalb?

Eine Klasse repräsentiert die Liste selber
- Enthält die Referenz auf das erste Element (head).
- Hilfsattribute z.B. für Anzahl enthaltene Elemente.
- Methoden für die verschiedenen Operationen

Eine zweite Klasse repräsentiert die Elemente und wird häufig als Knoten, Element oder Node bezeichnet.
- Enthält je nach Listentyp (einfach/doppelt) ein oder zwei Referenzen auf den Vorgänger bzw. den Nachfolger.
- Enthält Attribut(e) für die eigentlichen, enthaltenen Daten

Bei der Implementation mit Java kann das Datenattribut generisch sein und somit für beliebige Typen parametrisiert werden

Konzeptionelles Modell: Einfach verkettete Liste

Da jeder Node (Element) eine Referenz auf den Nachfolger (next) hält, resultiert eine ________ Beziehung auf den selben Typ.

Da jeder Node (Element) eine Referenz auf den Nachfolger (next) hält, resultiert eine rekursive Beziehung auf den selben Typ.

- Modell enthält einen Zyklus

Konzeptionelles Modell: Doppelt verkettete Liste

Analog zur einfach verketteten Liste, der Node (Element) hat nun aber zwei Referenzen. Wo?

Je eine auf seinen unmittelbaren Vorgänger (prev) und seinen Nachfolger (next)

Was ist der Hauptvorteil von Listen gegenüber Arrays?

Der Hauptvorteil von Listen ist, dass sie dynamisch sind:

Sie können eine beliebige Datenmenge aufnehmen, belegen selber aber keinen «festen» Platz, sondern wachsen und schrumpfen mit der Datenmenge mit.

- prädestiniert für (sehr) grosse, stark variierende Datenmengen

Was sind weitere Vorteile einer Liste gegenüber einer Array abgesehen davon, dass Listen dynamisch sind?

- Der Aufwand für das reine Einfügen in eine Liste ist an jeder beliebigen Position (sofern man diese bereits gefunden hat!) konstant (und schnell)

- Listen sind als Datenstrukturen objektorientiert implementiert, unterstützen Generics, und können dank der vorhandenen Interfaces je nach Anwendungsfall in spezifischen Implementationen eingesetzt / ausgetauscht werden

Was ist eine Stack?

Der Stack ist eine Datenstruktur, der die Element als «Stapel» speichert:
- push(E e): Neue Elemente werden immer oben auf den Stapel abgelegt.
- E pop(): Es kann jeweils nur das oberste Element entnommen werden

Was ist die Semantik eines Stacks? (kurz)

LIFO - Last In First Out

Was ist eine Analogie zu einem Stack in Alltag?

Tellerstapel

Wo werden Stack eingesetzt?

- Datenablage bei Funktionsaufrufen
- Umkehren der Reihenfolge

Wie gross ist der Aufwand der Operationen bei einem Stack, welcher (1) mit einer Array oder (2) mit einer Liste implementiert wurde?

(siehe Bild)

Welche Unterschiede gibt es bei der Implementation eines Stacks (1) mit einer Array und (2) mit einer Liste?

(siehe Bild)

Stack mit Bibliotheksklassen

Welche Klassen und Interfaces sind für Stack-Implementation bzw. Semantik geeignet?

(siehe Bild)

Wir haben also die Wahl!
(Nebenbei: Array-Variante ist auch dynamisch implementiert!)

Lernen