Elementary Data Structures 3

Vergelijkbare documenten
Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011

Tree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen

Java Programma structuur

Datastructuren; (Zoek)bomen

Datastructuren en Algoritmen voor CKI

Hoofdstuk 2. Week 4: Datastructuren. 2.1 Leesopdracht. 2.2 Bomen. 2.3 Definitie

Modelleren en Programmeren

Tentamen Programmeren in C (EE1400)

Algoritmiek. 15 februari Grafen en bomen

Hoofdstuk 6. Geordende binaire bomen

Hoofdstuk 3. Week 5: Sorteren. 3.1 Inleiding

Tentamen Programmeren in C (EE1400)

Modelleren en Programmeren

Datastructuren: stapels, rijen en binaire bomen

EE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college

Modulewijzer Tirdat01

Java Generics: een introductie

Tweede college algoritmiek. 12 februari Grafen en bomen

Modelleren en Programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Een gelinkte lijst in C#

Kleine cursus PHP5. Auteur: Raymond Moesker

IMP Uitwerking week 13

Inleiding. Revolutie Functioneel Programmeren Java 8. Van$java$8$alleen$functioneel$programmeren. \begin{programma}

Modelleren en Programmeren

Tentamen in2705 Software Engineering

Tweede Toets Datastructuren 29 juni 2016, , Educ-Γ.

NHibernate als ORM oplossing

NAAM: Programmeren 1 Examen 29/08/2012

Datastructuren: stapels, rijen en binaire bomen

Algoritmen, Datastructuren en Complexiteit ( en ) Uitwerkingen

Addendum bij hoofdstuk 5 Generieke implementatie van de zoekalgoritmen

Datastructuren en algoritmen voor CKI

Opgaven Zoekbomen Datastructuren, 20 juni 2018, Werkgroep.

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Programmeren in C++ Efficiënte zoekfunctie in een boek

Abstracte klassen & Interfaces

Overerving & Polymorfisme

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Ingebouwde klassen & methodes

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

definities recursieve datastructuren college 13 plaatjes soorten Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten

Modelleren en Programmeren

Tentamen Imperatief Programmeren

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Datastructures. Opdracht 3

Zelftest Programmeren in Java

Stacks and queues. Hoofdstuk 6

Lineaire data structuren. Doorlopen van een lijst

Ontwerp van Informatiesystemen

Tentamen Programmeren in C (EE1400)

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep.

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Inleiding. Het probleem 二 零 十 五 年 三 月 二 十 四 日. \begin{programma} Inleiding Revolutie Functioneel Programmeren Java 8

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

DATASTRUCTUREN VOOR GESORTEERDE DATA

Datastructuren en algoritmen voor CKI

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeren (1) Examen NAAM:

Dynamische gebruikersbeslissingen in SAP Workflow

Knowledgeable Referenceable Personable Accountable Scalable

Java. Basissyllabus. Egon Pas

Datastructuren en algoritmen

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Lessen Java: Reeks pag. 1

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Inleiding tot Func.oneel Programmeren les 3

Javascript oefenblad 1

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Transcriptie:

Elementary Data Structures 3 Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 september 2014 ODE/FHTBM Elementary Data Structures 3 29 september 2014 1/14

Meer elementaire datastrukturen Symbol tables Binary Trees ODE/FHTBM Elementary Data Structures 3 29 september 2014 2/14

Symbol Tables geordende symbool-tabel Symbol Table Definition Een symbol table is een datastructuur voor key-value paren die twee operaties ondersteunt: insert (put) een nieuw paar in de tabel, en search (get) de waarde die aan een gegeven key is gekoppeld. Veel talen hebben een datastructuur van deze vorm. ODE/FHTBM Elementary Data Structures 3 29 september 2014 3/14

ADT voor een symbol table geordende symbool-tabel De put en get operaties moeten natuurlijk aanwezig zijn! De rest op de constructor na is optioneel. ADT ST { // Symbol Table ST () void put (key, value ) value get ( key ) void delete ( key ) boolean contains ( key ) boolean isempty () int size () ODE/FHTBM Elementary Data Structures 3 29 september 2014 4/14

Aspecten van symbol tables geordende symbool-tabel Generics In Java aanwezig sinds jdk5. Duplicate keys Algemene afspraak is geen duplcate sleutels. Zoals bekend van associated arrays. Null keys Niet toegestaan! Null values Zijn toegestaan, maar de bijbehorende sleutels worden verondersteld niet aanwezig te zijn. Deletion Twee mogelijke startegiën kunnen worden gevolgd: lazy of eager. Iteration Een keys() methode zou een Iterator of een Set kunnen teruggeven. Key equality Overschrijven van de equals-methode in de klasse van het key-type moet gebeuren. De equals-methode wordt gebruikt om te controleren of een key aanwezig is. ODE/FHTBM Elementary Data Structures 3 29 september 2014 5/14

Geordende Symbol Tables geordende symbool-tabel Het zou vreemd zijn als de keys niet met elkaar te vergelijken zijn. In Java zal de klasse van het type van de key het Comparable interface implementeren. Dat betekent dat de methode compareto(key) deel uitmaakt van de interface. In plaats van de keys van het type Comparable te maken kan men ook een comparator aan de symbol table geven. Zie bijvoorbeeld de klasse java.util.treeset die als optie een constructor heeft met een Comparator als argument. Keys kunnen als volgt vergeleken worden: comparator.compare(key1, key2). Sommige methoden in de ADT uit het boek staan niet op de volgende sheet. Deze methoden zijn alleen voor het gemak gemaakt: deletemin(), deletemax(), size(lowkey,highkey). ODE/FHTBM Elementary Data Structures 3 29 september 2014 6/14

geordende symbool-tabel ADT voor een geordende symbol table De min, max, select, rank operaties moeten natuurlijk aanwezig zijn. ADT OST { // Ordered Symbol Table OST () void put (key, value ) value get ( key ) void delete ( key ) boolean contains ( key ) boolean isempty () int size () key min () key max () key ceiling () key floor () int rank ( key ) key select ( rank ) void deletemax () void deletemin () ODE/FHTBM Elementary Data Structures 3 29 september 2014 7/14

geordende symbool-tabel : interne datastructuur en constructor class SortedSTList { private int size ; private Node list ; private class Node { Key key ; Value val ; Node next ; Node ( Key key, Value val, Node nxt ) { this. key = key ; this. val = val ; next = nxt ; public SortedSTList () { this. list = new Node (null, null, null ); ODE/FHTBM Elementary Data Structures 3 29 september 2014 8/14

: put en get methoden geordende symbool-tabel public void put ( Key key, Value val ) { Node x = list ; while (x. next!= null && x. next. key. compareto ( key ) < 0) { x = x. next ; if (x. next!= null && x. next. key. equals ( key )) { x. next. val = val ; else { x. next = new Node (key, val, x. next ); size ++; public Value get ( Key key ) throws STException { for ( Node t = list. next ; t!= null ; t = t. next ) { if (t. key. equals ( key )) return t. val ; throw new STException (" Key not in this symbol table!"); public int size () { return size ; ODE/FHTBM Elementary Data Structures 3 29 september 2014 9/14

binaire boom Anatomie van een binaire boom In datastructuren 1&2 zagen we reeds een binaire boom. root node left child right child subtree root......... leaf node......... ODE/FHTBM Elementary Data Structures 3 29 september 2014 10/14

BST definitie Symbol Tables binaire boom Binary Search Tree Definition Een binary search tree is een binaire boom waarin elke node een Comparable key heeft (met geasocieerde waarde), met de afspraak dat de key in elke node groter is dan alle keys in alle nodes van de linker subtree en kleiner is dan de key in alle nodes van de rechter subtree. ODE/FHTBM Elementary Data Structures 3 29 september 2014 11/14

binaire boom : interne datastructuur en constructor public class BinarySearchTree { private class Node { Key key ; Value value ; Node left, right ; public Node ( Key key, Value value ) { this. key = key ; this. value = value ; private int N; private Node bst ; public BinarySearchTree () { N = 0; public int size () { return N; ODE/FHTBM Elementary Data Structures 3 29 september 2014 12/14

binaire boom : recursieve get methode public Value get ( Key key ) { return get (bst, key ); private Value get ( Node x, Key key ) { if ( x == null ) { return null ; int cmp = key. compareto (x. key ); if ( cmp < 0) return get ( x. left, key ); else if ( cmp > 0) return get ( x. right, key ); else return x. value ; ODE/FHTBM Elementary Data Structures 3 29 september 2014 13/14

binaire boom : recursieve put methode public void put ( Key key, Value val ) { bst = put (bst, key, val ); private Node put ( Node x, Key key, Value val ) { if (x == null ) { N ++; return new Node ( key, val ); int cmp = key. compareto (x. key ); if ( cmp < 0) x. left = put (x.left, key, val ); else if ( cmp > 0) x. right = put ( x. right, key, val ); else x. value = val ; return x; ODE/FHTBM Elementary Data Structures 3 29 september 2014 14/14