Mengen und Multimengen

Ähnliche Dokumente
JAVA KURS COLLECTION

Einstieg in die Informatik mit Java

19 Collections Framework

Was ist ein assoziativer Speicher?

Teil V. Generics und Kollektionen in Java

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

ALP II Dynamische Datenmengen Datenabstraktion

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

Übung Algorithmen und Datenstrukturen

Java Einführung Collections

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

Abstrakte Datentypen und Java

Grundlagen der Informatik 0

Programmierkurs Java

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

Dynamische Datenstrukturen

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

Teil VII. Hashverfahren

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

Datenstrukturen. Ziele

Übung Algorithmen und Datenstrukturen

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

Programmieren I. Kapitel 13. Listen

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

Anwendungsbeispiel MinHeap

Informatik II Prüfungsvorbereitungskurs

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

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

Datenstrukturen und Algorithmen. Vorlesung 5

Kapitel 12: Java Collection Teil II

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

Übung Algorithmen und Datenstrukturen

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

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen & Datenstrukturen Midterm Test 2

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

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

Konkatenation zweier Listen mit concat

16. Dynamische Datenstrukturen

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

Prof. Dr. Uwe Schmidt. 30. Januar 2017

13. Dynamische Datenstrukturen

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

Bäume, Suchbäume und Hash-Tabellen

Bäume und der Sequence ADT

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Abschnitt 10: Datenstrukturen

Grundlagen der Informatik Generische Klassen

Hashmap: Video Erklärung

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

Programmiertechnik II SS Fakultät Informatik Bachelor Angewandte Informatik

Programmieren in Java

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Transkript:

Überblick 17. Datenstrukturen 17.1 Einleitung 17.2 Listen 17.3 Assoziative Speicher 17.4 Bäume 17.5 Mengen 17.6 Das Collections-Framework in Java 17.7 Zusammenfassung 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 706 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. 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 707

Grundlegende Operationen auf Mengen Leere Menge: : Set(T) Elementbeziehung: : T Set(T) Teilmengenbeziehung: : Set(T) Set(T) 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) Æ 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 708 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. 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 709

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 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 710 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);... 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 711

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); 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 712 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; 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 713

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 MethodehashCode() für die Objekte der Menge verwendet. Achtung: Die Laufzeit dieser Klasse degeneriert, falls die Hashfunktion (die auf der MethodehashCode() basiert), nicht optimal ist! 17 Datenstrukturen 5 Mengen Informatik 2 (SS 07) 714 Überblick 17. Datenstrukturen 17.1 Einleitung 17.2 Listen 17.3 Assoziative Speicher 17.4 Bäume 17.5 Mengen 17.6 Das Collections-Framework in Java 17.7 Zusammenfassung 17 Datenstrukturen 6 Das Collections-Framework in Java Informatik 2 (SS 07) 715

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. 17 Datenstrukturen 6 Das Collections-Framework in Java Informatik 2 (SS 07) 716 Das Collections-Framework Alle Klassen mengenartiger, assoziativer Datenstrukturen implementieren das Interfacejava.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 Interfacejava.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. 17 Datenstrukturen 6 Das Collections-Framework in Java Informatik 2 (SS 07) 717

Hierarchie Collection List Set LinkedList ArrayList Stack Vector HashSet LinkedHashSet TreeSet Map HashMap Hashtable TreeMap 17 Datenstrukturen 6 Das Collections-Framework in Java Informatik 2 (SS 07) 718 Überblick 17. Datenstrukturen 17.1 Einleitung 17.2 Listen 17.3 Assoziative Speicher 17.4 Bäume 17.5 Mengen 17.6 Das Collections-Framework in Java 17.7 Zusammenfassung 17 Datenstrukturen 7 Zusammenfassung Informatik 2 (SS 07) 719

Zusammenfassung Sie kennen jetzt verschiedene Datenstrukturen, die Mengen von Objekten modellieren: normale Arrays, Listen (Array-basierte, einfach verkettete, doppelt verankerte und doppelt verkettete), assoziative Speicher (Hashverfahren), binäre Bäume und Suchbäume und deren Vor- und Nachteile, das Java Collections-Framework mit den wichtigsten Interfaces, die mengenartige Datenstrukturen implementieren sollten, sowie einige konkrete, vordefinierte Java-Klassen für assoziative und nicht assoziative Mengen und Multimengen. 17 Datenstrukturen 7 Zusammenfassung Informatik 2 (SS 07) 720