Mengen und Multimengen

Ähnliche Dokumente
Mengen und Multimengen

Kapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java

Spiegeln einer Liste mit Keller

19 Collections Framework

19 Collections Framework

12 Collections Framework. Interfaces Maps and Collections. Collection Interface. Überblick. Collection = Containterklasse, die andere Objekte enthält.

JAVA KURS COLLECTION

Einstieg in die Informatik mit Java

Programmierkurs Java

OCP Java SE 8. Collections

Objektorientierte Implementierung

Schein-/Bachelorklausur Teil 2 am Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock.

Programmierkurs Java

Teil V. Generics und Kollektionen in Java

Teil II) Objektorientierte Implementierung 10) Verfeinern von UML-Assoziationen mit dem Java-2 Collection Framework

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Collections. Arthur Zaczek. Nov 2015

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Abstrakte Datentypen und Java

Programmiertechnik II

Wo sind wir? Rudolf Berrendorf FH Bonn-Rhein-Sieg Programmiersprache Java 338

Objektorientierte Programmierung. Kapitel 21: Einführung in die Collection Klassen

Java Einführung Collections

12.3 Ein Datenmodell für Listen

Collections. Arthur Zaczek

Software Entwicklung 1

Programmiertechnik II

Was ist ein assoziativer Speicher?

Übung Algorithmen und Datenstrukturen

Info B VL 14: Java Collections/Reflections

java.util. Sebastian Draack Department Informations- und Elektrotechnik Department Informations- und Elektrotechnik JAVA Collection-API

II.4.6 Collections - 1 -

ALP II Dynamische Datenmengen Datenabstraktion

Abschnitt 17: Datenstrukturen

Teil VII. Hashverfahren

Programmieren in Java

Programmieren in Java

Vorlesung Programmieren

Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper

Programmiertechnik II

17. Java Collections. Daten Organisieren. Generische Liste in Java: java.util.list. Typ Parameter (,,Parametrischer Polymorphisums )

Software Entwicklung 1

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Programmieren I. Kapitel 13. Listen

Propädeutikum Programmierung in der Bioinformatik

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Algorithmen & Datenstrukturen Midterm Test 2

Kapitel 12: Java Collection Teil II

Kapitel 12: Java Collection Teil II

Enterprise Java, Services und Systemintegration. Wie gut kennst Du das Collections Framework? Historie

Übung Algorithmen und Datenstrukturen

ADT: Java Collections und ArrayList

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Dynamische Datenstrukturen

Programmieren in Java

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Datenstrukturen. Ziele

ALP II Dynamische Datenmengen

Nützliche Utility-Klassen des JDK

Prof. Dr. Uwe Schmidt. 30. Januar 2017

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Datenstrukturen und Algorithmen. Vorlesung 5

Software Entwicklung 1

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Einführung. B6.2 Symboltabellen. B6.3 Einfache Implementationen

Konkatenation zweier Listen mit concat

Kapitel 6: Java Collection Teil I

Javakurs für Fortgeschrittene

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / Vorlesung 10, Donnerstag 9.

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Grundlagen der Informatik 0

public interface Stack<E> { public void push(e e); public E pop();

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T]

Einführung in die Programmierung mit Java

4.4.9 Das Java Collection Framework

Java I Vorlesung Collections

Hashmap: Video Erklärung

1. Welches Interface ist nicht von Collection abgeleitet? A. B. C. D. List Set Map SortedSet. 2. Welche Aussagen sind richtig?

Grundlagen der Informatik Generische Klassen

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Vorlesung 07: Collections. Peter Thiemann SS 2010

Mocking Libraries Shootout

Algorithmen und Datenstrukturen CS1017

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 10, Donnerstag 8.

Bäume und der Sequence ADT

Programmieren in Java

Kapitel 14. Das Java Collection Interface. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)

Transkript:

Überblick 21. Datenstrukturen 21.1 Einleitung 21.2 Listen 21.3 Assoziative Speicher 21.4 Bäume 21.5 Mengen 21.6 Das Collections-Framework in Java 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 870 Mengen und Multimengen Eine Menge ist eine (ungeordnete) Zusammenfassung verschiedener Objekte. Insbesondere enthält eine Menge keine Duplikate. Eine Multimenge ist eine Menge, die Duplikate enthalten kann. Mengen und Multimengen sind wichtige Konzepte, u.a. um Assoziationen zwischen Objekten verschiedener Klassen umzusetzen. Im folgenden wiederholen wir grundlegende Funktionalitäten von Mengen. Eine Implementierung sollte entsprechende Methoden für diese Funktionalitäten anbieten. Diese gelten natürlich genauso für Multimengen. 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 871

Grundlegende Operationen auf Mengen Leere Menge: : Set(T) Elementbeziehung: : T Set(T) B Teilmengenbeziehung: : Set(T) Set(T) B Vereinigung: : Set(T) Set(T) Set(T) Durchschnitt: : Set(T) Set(T) Set(T) Differenz: \ : Set(T) Set(T) Set(T) Kardinalität:. : Set(T) N 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 872 Realisierung von Mengen Zur effizienten Realisierung von Mengen spielen folgende Gedanken eine Rolle: Die grundlegenden Operationen sollten effizient sein. Das Einfügen eines neuen Elementes sollte effizient sein. Insbesondere ist darauf zu achten, dass keine Duplikate eingefügt werden. Das Löschen eines Elementes sollte effizient sein. Die Suche nach einem Element sollte effizient sein. Für die Realisierung von Multimengen spielen natürlich die selben Gedanken eine Rolle. Allerdings muss nun auf Duplikate keine Rücksicht genommen werden. 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 873

Realisierung von Mengen: Beispiel Als Beispiel schauen wir uns eine Implementierung einer Menge auf Basis einer typisierten (einfach) verketteten Liste an. Zur Erinnerung: - size : int SimpleList3 T 0 head 1 - element : T SimpleEntry T 1 0 next 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 874 Realisierung von Mengen: Beispiel public class Menge<T> private SimpleList3<T> elemente; public int cardinalitaet() return this.elemente.length(); public T[] getelemente() return this.elemente.asarray(); public void einfuegen(t element) if(!this.enthaelt(element)) this.elemente.add(element);... 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 875

Realisierung von Mengen: Beispiel (, ) public boolean enthaelt(t t) return this.elemente.contains(t); public void vereinigung(menge<t> anderemenge) T[] neueelemente = anderemenge.getelemente(); for(t t : neueelemente) this.einfuegen(t); 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 876 Realisierung von Mengen: Beispiel ( ) public boolean teilmengevon(menge<t> supermenge) boolean istteilmenge = true; T[] elemente = this.getelemente(); for(t t : elemente) istteilmenge = istteilmenge && supermenge.enthaelt(t); return istteilmenge; 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 877

Zusammenfassung Vergleich der durchschnittlichen Laufzeiten doppelt doppelt perfekte einfaches einfache verankerte verkettete Hashverfahren binärer Array Liste Liste Liste (assoz. Array) Suchbaum dynamisch nein ja ja ja nein ja Einfügen (Schlüssel) O(1) O(n) O(n) O(n) O(1) bzw. O(n) O(log n) Löschen (Schlüssel) O(1) O(n) O(n) O(n) O(1) O(log n) Suchen (Schlüssel) O(n) O(n) O(n) O(n) O(1) O(log n) Eine Standard-Implementierung einer Menge in Java ist z.b. die Klasse java.util.hashset, die auf einem assoziativen Speicher beruht. Dabei wird intern die Methode hashcode() für die Objekte der Menge verwendet. Achtung: Die Laufzeit dieser Klasse degeneriert, falls die Hashfunktion (die auf der Methode hashcode() basiert), nicht optimal ist! 21 Datenstrukturen 5 Mengen Einf. Progr. (WS 08/09) 878 Überblick 21. Datenstrukturen 21.1 Einleitung 21.2 Listen 21.3 Assoziative Speicher 21.4 Bäume 21.5 Mengen 21.6 Das Collections-Framework in Java 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 879

Collections in Java In Java gibt es eine große Menge an vordefinierten Klassen für mengenartige Datenstrukturen. Im folgenden geben wir einen kurzen Überblick über das Collections-Framework von Java. Zur Vertiefung empfehlen wir das intensive Studium der Dokumentationen der entsprechenden Klassen. 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 880 Das Collections-Framework Alle Klassen mengenartiger, assoziativer Datenstrukturen implementieren das Interface java.util.map. Das Interface stellt Basis-Funktionalitäten wie Einfügen (put), Löschen (remove) und verschiedene Formen der Suche (get, containskey, containsvalue) zur Verfügung. Alle Klassen mengenartiger, nicht-assoziativer Datenstrukturen implementieren das Interface java.util.collection. Das Interface stellt Basis-Funktionalitäten wie Einfügen (add), Löschen (remove) und Suchen (contains) zur Verfügung. Vom Interface java.util.collection abgeleitete Interfaces sind u.a.: java.util.set: Klassen, die Mengen ohne Duplikate modellieren, implementieren dieses Interface. java.util.list: Klassen, die Multimengen modellieren, implementieren dieses Interface. 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 881

Hierarchie Collection List Set LinkedList ArrayList Stack Vector HashSet LinkedHashSet TreeSet Map HashMap Hashtable TreeMap 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 882 Wiederholung: Iteration über Arrays public static void accessfor(integer[] intarray) Integer currentinteger; for(int i = 0; i < intarray.length; i++) currentinteger = intarray[i]; Laufzeit? 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 883

Iteration über Collections Um iterative Aktionen auf allen Elementen einer Collection (oder einer bestimmten Teilmenge davon) durchzuführen, sind nicht alle Schleifenkonstrukte gleichwertig. Beispiel: public static void accessfor(list<integer> list) Integer currentinteger; for(int i = 0; i < list.size(); i++) currentinteger = list.get(i); Laufzeit? 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 884 Die Iterator- und Iterable-Interfaces und enhanced for Eine Collection implementiert das Interface Iterable, das nur vorschreibt, dass ein Iterator zurückgegeben werden kann, der es ermöglicht, die Collection zu durchwandern. Dieser Iterator wird auch implizit im sogenannten enhanced for verwendet: public static void accessiterable( Iterable<Integer> intiterable) Integer currentinteger; for(integer currentint : intiterable) currentinteger = currentint; Laufzeit für eine verkettete Liste? 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 885

Test für die verschiedenen Iterationen auf verschiedenen Listen und einem Array Test-Klasse: http://www.dbs.ifi.lmu.de/lehre/eip/ws_2008/skript/programmbeispiele/datenstrukturen/iterationtest.java 21 Datenstrukturen 6 Das Collections-Framework in Java Einf. Progr. (WS 08/09) 886