ALD

ghjk

ghjk


Fichier Détails

Cartes-fiches 9
Langue Deutsch
Catégorie Informatique
Niveau Université
Crée / Actualisé 22.09.2025 / 25.09.2025
Lien de web
https://card2brain.ch/cards/20250922_ald
Intégrer
<iframe src="https://card2brain.ch/box/20250922_ald/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Vor- und Nachteile Single Linked List

Vorteile:

  • Dynamische Speicherverwaltung
    • Die Liste kann während der Laufzeit wachsen oder schrumpfen, ohne dass ein fester Speicherblock benötigt wird (anders als bei Arrays).
  • Effizientes Einfügen und Löschen

    • Einfügen und Löschen von Knoten an beliebigen Positionen (insbesondere am Anfang) ist effizient, da keine Verschiebung von Elementen nötig ist (nur Zeiger werden angepasst).

    • Aufwand: O(1) am Kopf, O(n) an beliebiger Position (weil man bis dorthin traversieren muss).

  • Kein Speicherplatzverschwendung durch feste Größe

    • Nur so viel Speicher wird benötigt, wie tatsächlich für die Knoten gebraucht wird (plus Zeiger)

Nachteile:

  • Kein direkter Zugriff (Random Access)

    • Zugriff auf ein Element erfordert das sequentielle Durchlaufen der Liste von vorne. Aufwand: O(n).

  • Zusätzlicher Speicherbedarf

    • Jeder Knoten benötigt zusätzlichen Speicher für den Zeiger auf den nächsten Knoten.

  • Nur in eine Richtung durchlaufbar

    • Man kann nur von Anfang nach Ende traversieren, Rückwärtslaufen ist nicht möglich (anders als bei doppelt verketteten Listen).

  • Komplexere Implementierung

    • Im Vergleich zu Arrays ist das Handling (Einfügen, Löschen, Traversieren) fehleranfälliger wegen der Zeiger.

Vor- und Nachteile Double Linked List

Vorteile:

  • Bidirektionale Traversierung: Man kann sowohl vorwärts als auch rückwärts durch die Liste laufen.

  • Einfügen und Löschen effizient: Wenn man den Knoten kennt, lassen sich Elemente an beliebiger Stelle in O(1) einfügen oder entfernen (kein Verschieben wie bei Arrays nötig).

  • Flexibler als einfach verkettete Listen: Einfacheres Löschen eines Knotens, da der Vorgänger direkt verlinkt ist (kein explizites Durchlaufen nötig, um den Vorgänger zu finden).

Nützlich für bestimmte Anwendungen: Wird oft in Deques, Stacks, Navigationssystemen (z. B. „Vor“ und „Zurück“ im Browser) oder Speicherverwaltung verwendet.

 

Nachteile:

  • Mehr Speicherbedarf: Jeder Knoten benötigt zusätzlich zum Wert zwei Zeiger (statt nur einem bei einfach verketteten Listen).

  • Komplexere Implementierung: Verwaltung von zwei Zeigern (prev & next) erhöht die Fehleranfälligkeit (z. B. Gefahr von Speicherlecks oder „dangling pointers“).

  • Schlechtere Cache-Lokalität als Arrays: Da die Elemente nicht zwingend im zusammenhängenden Speicher liegen, sind Zugriffe weniger effizient.

  • Zugriff auf Index langsam: Wie bei der einfach verketteten Liste ist ein Zugriff auf das i-te Element nur durch Traversieren in O(n) möglich.

Vor- und Nachteile Array List

Vorteile:

  • Direkter Zugriff in O(1): Zufälliger Zugriff auf jedes Element über den Index ist sehr schnell.

  • Gute Cache-Lokalität: Elemente liegen zusammenhängend im Speicher, was Zugriffe effizient macht.

  • Einfache Implementierung: Weniger komplex als verkettete Listen.

  • Iteration sehr effizient: Da die Elemente nebeneinander im Speicher liegen, sind Schleifen über die Liste schneller als bei verketteten Strukturen.

  • Gut für „read-heavy“-Szenarien: Wenn man oft liest und selten einfügt/löscht, ist die ArrayList optimal.

Nachteile:

  • Einfügen/Löschen ineffizient:

    • Am Ende meist O(1) (außer bei Vergrößerung des Arrays).

    • Am Anfang oder in der Mitte: O(n), da alle nachfolgenden Elemente verschoben werden müssen.

  • Feste Größe + Reallokation: Wenn das Array voll ist, muss ein neues, größeres Array erstellt und der Inhalt kopiert werden (teure Operation).

  • Speicherplatzverschwendung: Oft wird mehr Speicher reserviert, als gerade benötigt wird (wegen Wachstumsstrategie).

  • Keine bidirektionale Verknüpfung: Kein einfaches Einfügen/Löschen durch nur Umhängen von Zeigern wie bei Listen.

Eigenschaften von einem Algorithmus?

Korrektheit: Erfüllt seine zugrunde liegende Spezifikation. Liefert das – und nur das – korrekte Ergebnis seiner Aufgabenspezifikation 

Vollständigkeit: Nicht (nur) auf die reine Funktionalität bezogen. Essentiell wichtige Vor- und Rahmenbedingungen müssen formuliert werden (zb. Verfügbare/notwendige Datenobjekte) 

Eindeutigkeit: Anweisungen und Abfolge dürfen keinen Interpretationsspielraum erlauben.

 Ausführbarkeit: Klarheit über Ausführung der Anweisungen muss gegeben sein. Ausführbarkeit darf nicht unterbrochen sein

Statische Endlichkeit: Definierter „Umfang“ / „Größe“ der Formulierung muss endlich sein. − (endlich viele Seiten, endlich viel Speicherplatz)

Dynamische Endlichkeit / Unendlichkeit: Ein Algorithmus kann nach endlich vielen Schritten terminieren (und ist damit dynamisch endlich) > Ein Algorithmus kann aber nicht terminierend sein und seine Aufgabe unendlich lange ausführen 

Effizienz:  die Aufgabe unter bestmöglicher Ausnutzung vorhandener Ressourcen zu erfüllen − Laufzeit & Speicherverbrauch

Wo können Algorithmen in der Informatik eingesetzt werden?

Sortieren, Suchen, Verschlüsseln, Klassifizieren, Optimieren, Komprimieren

Was sind Datenstrukturen?

  • Sind – neben Operatoren (+, -, =, …) - elementare Bestandteile eines Algorithmus
  • Unveränderbare Datenobjekte in Form von Literalen oder Konstanten > Math.Pi, > const int x = 17;
  • Veränderbare Datenobjekte (= Variablen)
    • > int x = 17;
    • > Eingeschränkte Wertemenge − Integer, Boolean, Character, … −
  • Unveränderbare und veränderbare Datenobjekte werden auch als atomare-, elementare-, einfache- oder unstrukturierte Datenobjekte bezeichnet 
  • Algorithmen erreichen schnell Komplexitätsgrad, in denen einfache Datenobjekte nicht mehr ausreichen −
  • Erweiterte Möglichkeiten zur Datenmodellierung sind erforderlich, in Form von
    • > strukturierten,
    • > dynamischen und
    • > vernetzten Datenobjekten 

Wie können zwei Algorithmen verglichen werden, die das gleiche Problem lösen?

1. Zeit und Arbeitsspeicher messen, bei gleichen Eingabewerten

  • Probleme:
    • abhängig von Leistung des Computers
    • abhängig was Computer sonst so macht
    • abhängig von Programmiersprache und Implementierung
    • Algorithmen müssen bereits implementiert sein!

2. Zählen und gewichten der Rechenschritte (Feinanalyse)

  • Problem: hoher Aufwand 

3. Grobes Zählen der Rechenschritte (Grobanalyse)

  • Aufwand geringer als bei Feinanalyse
  • nur den am schnellsten wachsenden Term berücksichtigen
    • (=> ergibt Komplexitätsklasse)

Iteration und Rekursion

  • Iteration
    • Einzelne Anweisungen werden wiederholt ausgeführt
    • Einsatz von Schleifen −
  • Rekursion
    • Methode ruft sich selbst rekursiv (wiederholend) auf
    • Abbruchbedingung muss gegeben sein
      • − Viele Problemlösungen verleiten zum rekursiven Ansatz
      • − Rekursiver Ansatz jedoch in den meisten Fällen nicht optimal, weil
      •  Abbruchkriterium muss sichergestellt sein Speicherverbrauch / Stack Overflow

Was ist ein Graph?

Graphen sind (mathematische) Modelle für netzartige Strukturen

  • Verkehrsnetze
  • Computernetze
  • elektr. Schaltungen 

Étudier