Grundlagen der Algorithmen und Datenstrukturen Kapitel

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Sortieren I - Bubblesort -
Kapitel 5. Stacks und Queues
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Synonyme: Stapel, Keller, LIFO-Liste usw.
Design by Contract with JML - Teil 2
Gliederung Motivation / Grundlagen Sortierverfahren
Binäre Bäume Richard Göbel.
Listen Richard Göbel.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Union-Find-Strukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Operationen auf verketteten Listen
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Beanifiing the Browser Beans implementieren Serializable.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Kapitel 2: Datenstrukturen
Stacks Referat im Fach Basisinformationstechnologien von Venelina Koleva.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Programmierung
1. Die rekursive Datenstruktur Liste 1.1 Warteschlange (Queue)
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Algorithmen und Datenstrukturen Übungsmodul 6
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Algorithmen und Datenstrukturen Übungsmodul 11
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Kapitel 5: Von Datenstrukturen zu Abstrakten Datentypen
Wie sammeln wir Wortschatz? How do we collect vocabulary?
Beispielanwendung von Java Threads
se_5_liste_stack_etc.ppt1 Softwareengineering Listenstrukturen und ähnliches Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.
Grundlagen der Algorithmen und Datenstrukturen Kapitel
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Die STL. Schreiben und Lesen von Dateien  Einbinden von  Lesen und Schreiben über stream-Objekte Streams führen Transformationen zwischen Programmobjekten.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Tutorium Software-Engineering SS14 Florian Manghofer.
gemeinsam.innovativ.nachhaltig.
3. Schafft das Internet neue Transaktionsdesign?
8 Zündung/Motormanagement
Lieber Leser, liebe Leserin,
GABI UND BEN.
Microsoft® Office PowerPoint® 2007-Schulung
Rosebrock: Geometrische Gruppen
Wer wir sind! Ihr S-Campus-Team direkt im Campus Center. Sven Deussing
Langzeitbelichtung Ein Zugang zur Kinematik in Klassenstufe 7/8
Slađana Dmitrović 8. Klasse
traduzione in italiano
Programmieren in C Dynamische Listen / Bäume
2. Dynamik Zur vollständigen Beschreibung und Erklärung von Bewegungen müssen die Ursachen für diese Bewegungen (Kräfte, Drehmomente) und die Eigenschaften.
Definition/Allgemeines:
ɣ brain to write Erklärung des Rauschens Experimente
Einführung in Web- und Data-Science Clustering
Preprocessing Teil 2 Ein wenig Theorie der astronomischen Bildvorverarbeitung. „Es gibt nichts Praktischeres als eine gute Theorie.“ (D.Hilbert, I.Kant,
Komplexe Wechselstromrechnung
Winkel B A U S T E L L E Die einzelnen Bausteine entstehen nach einander und sind noch nicht sinnvoll geordnet!
Fraktale Maple D =
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
 Präsentation transkript:

Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.3-3.5 Prof. Dr. Christian Scheideler

Sequenzen Sequenz: s = <e0,…,en-1> Arten, auf Element zuzugreifen: Feldrepräsentation: absoluter Zugriff über s[i] Listenrepräsentation: relativer Zugriff über Nachfolger und/oder Vorgänger s[0]: e0 s[1] s[2] s[3] s[4] s[5] …. e0 e1 Nachf. Vorg. e2 e3 …. s

Doppelt verkettete Liste Type Handle=Pointer to Item Class Item of Element e: Element next: Handle prev: Handle Class List of Item h: Handle …weitere Variablen und Operationen… Invariante: (this: Zeiger auf aktuelles Element) next! prev = prev! next = this e e e … …

Doppelt verkettete Liste Einfache Verwaltung: durch „Dummy“-Element mit Inhalt ?: Anfangs: ? e1 e2 en … ?

Doppelt verkettete Liste Zentrale Operation: splice splice entfernt <a,…,b> aus Sequenz und fügt sie hinter einem t an. Bedingung: <a,…,b> muss eine Teilse-quenz sein, b ist nicht vor a, und t darf nicht in <a,…,b> sein. Splice (<e1,…,a´,a,…,b,b´,…,t,t‘…,en>, a, b, t) = <e1,…,a´,b´,…,t,a,…,b,t´,…,en>

Doppelt verkettete Liste Procedure splice(a,b,t: Handle) // schneide <a,…,b> heraus a´ := a!prev b´ := b!next a´!next := b´ b´!prev := a´ // füge <a,…,b> hinter t ein t´ := t!next b!next := t´ a!prev := t t!next := a t´!prev := b a´ a b b´ … … … … t a b t´ … … … …

Doppelt verkettete Liste h: Handle auf ?-Item in List Function head(): Handle return h Function isEmpty: {0,1} return h.next = h Function first(): Handle return h.next Function last(): Handle return h.prev ? e1 en … ? Kann evtl. auf ?-Element zeigen! Kann evtl. auf ?-Element zeigen!

Doppelt verkettete Liste h: Handle to ?-Item of List Procedure moveAfter(b,a: Handle) splice(b,b,a) // schiebe b nach a Procedure moveToFront(b: Handle) moveAfter(b,head()) // schiebe b nach vorne Procudure moveToBack(b: Handle) moveAfter(b,last()) // schiebe b nach hinten ? e1 en …

Doppelt verkettete Liste Löschen und Einfügen von Elementen: mittels extra Liste freeList Procedure remove(b:Handle) moveAfter(b, freeList.head()) Procedure popFront() remove(first()) Procedure popBack() remove(last()) h b … … … freeList … … freeList: gut für Lauf- zeit, da Speicher- allokation teuer

Doppelt verkettete Liste Function insertAfter(x: Element, a: Handle): Handle checkFreeList a´ := freeList.first() moveAfter(a´, a) a´!e := x return a´ Function insertBefore(x: Element, b: Handle): Handle return insertAfter(e, pred(b)) Procedure pushFront(x: Element) insertAfter(x, head()) Procedure pushBack(x: Element) insertAfter(x, last()) h a a´ … x … …

Doppelt verkettete Liste Manipulation ganzer Listen: Procedure concat(L: List) // L darf nicht leer sein! splice(L.first(), L.last(), last()) Procedure makeEmpty() freeList.concat(this) h last … … L … …

Doppelt verkettete Liste Suche nach einem Element: Trick: verwende „Dummy“-Element Function findNext(x:Element, from: Handle): Handle h.e := x while from! e <> x do from := from!next return from x e1 en …

Einfach verkettete Liste Type SHandle=Pointer to SItem Class SItem of Element e: Element next: Handle Class SList of SItem h: SHandle …weitere Variablen und Operationen… e e e … …

Einfach verkettete Liste Procedure splice(a´, b, t: SHandle) a´!next := b!next t!next := a´!next b!next := t!next a´ a … b b´ t t´

Stacks und Queues Grundlegende Datenstrukturen für Sequenzen: Stack FIFO-Queue:

Stack Operationen: pushBack: <e0,…,en>.pushBack(e) = <e0,…,en,e> popBack: <e0,…,en>.popBack = <e0,…,en-1> last: last(<e0,…,en>) = en Implementierungen auf vorherigen Folien.

FIFO-Queue Operationen: pushBack: <e0,…,en>.pushBack(e) = <e0,…,en,e> popFront: <e0,…,en>.popFront = <e1,…,en> first: first(<e0,…,en>) = e0 Implementierungen auf vorherigen Folien

Beschränkte FIFO-Queue Class BoundedFIFO(n: IN) of Element b: Array[0..n] of Element h=0: IN // Index des ersten Elements t=0: IN // Index des ersten freien Eintrags Function isEmpty(): {0,1} return h=t Function first(): Element return b[h] Function size(): IN return (t-h+n+1) mod (n+1) b n 1 h t 2 3 pop push . . .

Beschränkte FIFO-Queue Class BoundedFIFO(n: IN) of Element b: Array[0..n] of Element h=0: IN // Index des ersten Elements t=0: IN // Index des ersten freien Eintrags Procedure pushBack(x: Element) assert size<n b[t] := x t := (t+1) mod (n+1) Procedure popFront() assert (not isEmpty()) h := (h+1) mode (n+1) b n 1 h t 2 3 pop push . . .

Fazit Listen sind sehr flexibel, wenn es darum geht, Elemente in der Mitte einzufügen Felder können in konstanter Zeit auf jedes Element zugreifen Listen haben kein Reallokationsproblem bei unbeschränkten Größen ! beide Datenstrukturen einfach, aber oft nicht wirklich zufriedenstellend

Beispiel: Sortierte Sequenz Problem: bewahre nach jeder Einfügung und Löschung eine sortierte Sequenz 1 3 10 14 19 insert(5) 1 3 5 10 14 19 remove(14) 1 3 5 10 19

Beispiel: Sortierte Sequenz S: sortierte Sequenz Jedes Element e identifiziert über Key(e). Operationen: <e0,…,en>.insert(e) = <e0,…,ei,e,ei+1,…,en> für das i mit Key(ei) < Key(e) < Key(ei+1) <e0,…,en>.remove(k) = <e0,…,ei-1,ei+1,…,en> für das i mit Key(ei)=k <e0,…,en>.find(k) = ei für das i mit Key(ei)=k

Beispiel: Sortierte Sequenz Realisierung als Liste: insert, remove und find auf Sequenz der Länge n kosten im worst case (n) Zeit Realisierung als Feld: insert und remove kosten im worst case (n) Zeit find kann so realisiert werden, dass es im worst case nur O(log n) Zeit benötigt (! binäre Suche!)

Beispiel: Sortierte Sequenz Kann man insert und remove besser mit einem Feld realisieren? folge Beispiel der Bibliothek! verwende Hashtabellen (Kapitel 4)

Beispiel: Sortierte Sequenz Bibliotheksprinzip: lass Lücken! Angewandt auf sortiertes Feld: 1 3 10 14 19 insert(5) 1 3 5 10 14 19 remove(14) 1 3 5 10 19

Beispiel: Sortierte Sequenz Durch geschickte Verteilung der Lücken: amortierte Kosten für insert und remove (log2 n) 1 3 10 14 19 insert(5) 1 3 5 10 14 19 remove(14) 1 3 5 10 19

Nächste Woche Weiter mit Kapitel 4: Hashtabellen Midterm am 29. Mai! Anmeldung über Grundstudiumstool