Java Programma structuur

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

Elementary Data Structures 3

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

Datastructuren; (Zoek)bomen

Hoofdstuk 6. Geordende binaire bomen

Modelleren en Programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Ingebouwde klassen & methodes

Algoritmiek. 15 februari Grafen en bomen

Overerving & Polymorfisme

Tentamen Imperatief Programmeren

Modelleren en Programmeren

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

Hoofdstuk 3. Week 5: Sorteren. 3.1 Inleiding

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

Modelleren en Programmeren

Javascript oefenblad 1

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

Tweede college algoritmiek. 12 februari Grafen en bomen

Modelleren en Programmeren

Datastructuren en Algoritmen voor CKI

NAAM: Programmeren 1 Examen 29/08/2012

Datastructuren: stapels, rijen en binaire bomen

Modelleren en Programmeren

Opgaven Zoekbomen Datastructuren, 20 juni 2018, Werkgroep.

Kleine cursus PHP5. Auteur: Raymond Moesker

Addendum bij hoofdstuk 5 Generieke implementatie van de zoekalgoritmen

Programmeren in Java les 3

IMP Uitwerking week 13

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

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

Modelleren en Programmeren

In BlueJ. Doe onderstaande met muis/menu s:

Algoritmen, Datastructuren en Complexiteit ( en ) Uitwerkingen

Inleiding Programmeren 2

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Tentamen Programmeren in C (EE1400)

Datastructuren: stapels, rijen en binaire bomen

Een gelinkte lijst in C#

Zelftest Programmeren in Java

Datastructuren en algoritmen voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Informatica. Deel II & III: les 5. Basis- & slimme algoritmen. Jan Lemeire Informatica deel II & III februari mei Parallel Systems: Introduction

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

Tentamen Programmeren in C (EE1400)

Inleiding Programmeren 2

Tentamen in2705 Software Engineering

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

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep.

Scala. Korte introductie. Sylvia Stuurman

Objectgericht programmeren 1.

Lineaire data structuren. Doorlopen van een lijst

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Java Generics: een introductie

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


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

Lessen Java: Reeks pag. 1

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Een fragment wordt afgeleid van de basis klasse "Fragment".

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

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

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Tentamen Programmeren in C (EE1400)

Datastructuren en algoritmen

Objectgeoriënteerd programmeren in Java 1

Datastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46

INFITT01 - Internettechnologie WEEK 8

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Game of Life in Java

Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Tentamen Inleiding Programmeren in Java

Abstracte klassen & Interfaces

Transcriptie:

Java Programma structuur public class Bla // div. statements public static void main(string argv[]) // meer spul Voortgezet Prog. voor KI, week 4:11 november 2002 1

Lijsten Voorbeelden 2, 3, 5, 7, 13 Jan, Piet, Klaas (Jan, 8), (Piet, 1), (Klaas, 7) Jan 8 Piet 1 Klaas 7 Voortgezet Prog. voor KI, week 4:11 november 2002 2

Class-structuur Probleem: lege lijst moet kunnen, maar een null object heeft geen methods. Oplossing: public class List private class ListNode // Data fields public Object info; public ListNode next; // Methods... private ListNode head; Voortgezet Prog. voor KI, week 4:11 november 2002 3

Constructors voor ListNode private class ListNode // Data fields public Object info; public ListNode next; // Methods public ListNode(Object obj) info = obj; next = null; public ListNode( Object obj, ListNode nextnode) info = obj; next = nextnode; Voortgezet Prog. voor KI, week 4:11 november 2002 4

Methods add : object clone : List append : List first : Object tail : List isempty : boolean tostring : String Voortgezet Prog. voor KI, week 4:11 november 2002 5

Method add Voegt een element vooraan de lijst toe public void add( Object e ) // Voegt een element vooraan de lijst toe ListNode temp = new ListNode(e); temp.next = head; head = temp; Een alternatief is: public void add( Object e ) // Voegt een element vooraan de lijst toe head = new ListNode(e, head); Voortgezet Prog. voor KI, week 4:11 november 2002 6

Verwijderen nodes Method in private class ListNode: public ListNode tail( ) // Verwijder een element vooraan de lijst return next; Method in class List: public boolean remove( Object e ) // Verwijder een element met inhoud \texttte if (!isempty()) if (((Comparable)root.info).compareTo(e) == 0 ) root = root.tail(); return true; else boolean found = false; ListNode temp = root; while ( (temp.next!= null) && (! found )) if (((Comparable)temp.next.info).compareTo(e)==0) found=true; else temp=temp.next; if (found) temp.next=temp.next.tail(); return found; else return true; Voortgezet Prog. voor KI, week 4:11 november 2002 7

tostring Method in private class ListNode: public String tostring() if (next!= null) return info.tostring() + "\n" + next.tostring(); else return info.tostring() + "\n"; OF: public String tostring() return info.tostring() + "\n" + ( next == null? "" : next.tostring()); Method in class List: public String tostring() if (!isempty()) return root.tostring(); else return ""; Voortgezet Prog. voor KI, week 4:11 november 2002 8

Gebruik... maak een lege lijst List list = new List(); maak het lijstje 1, 2, 3 list.add( (Integer(3) ); list.add( (Integer(2) ); list.add( (Integer(1) ); Voortgezet Prog. voor KI, week 4:11 november 2002 9

Bomen root node / * + a b c - leaf d e Voortgezet Prog. voor KI, week 4:11 november 2002 10

Bomen Terminologie? Boom, Tree Knoop, Node Blad, Leaf Wortel, Root Diepte, Depth Linker Subboom, Left Subtree Rechter Subboom, Right Subtree Soorten bomen: Binaire boom N-aire boom Geordende of zoekbomen Gebalanceerde bomen Gebalanceede binaire zoekbomen Voortgezet Prog. voor KI, week 4:11 november 2002 11

Toepassingen Binaire expressies: binaire bomen Database: gebalanceede binaire zoekbomen Woordenboek: N-aire zoekbomen Statement: boom Decoder prefix code: binaire boom Statement block: woud Woud = Lijst van Bomen Voortgezet Prog. voor KI, week 4:11 november 2002 12

Hufman code symbool code A 0 B 10 C 1100 D 1101 E 1110 F 1111 A 0 0 B 10 1 0 0 C 1100 1 1 0 0 1 E D 1101 1110 1 F 1111 Voortgezet Prog. voor KI, week 4:11 november 2002 13

Binaire boom private class TreeNode // Data fields private Object info; private TreeNode left; private TreeNode right; // Methods // Constructors public TreeNode(Object obj) info = (Comparable) obj; left = null; right = null; public TreeNode( Object obj, TreeNode leftnode, TreeNode rightnode) info = (Comparable) obj; left = leftnode; right = rightnode; Voortgezet Prog. voor KI, week 4:11 november 2002 14

Binaire ZOEKboom public class SearchTree private class TreeNode // Data fields private Comparable info; private TreeNode left; private TreeNode right; // Methods within TreeNode... // Data fields public TreeNode root; // Methods within SearchTree Voortgezet Prog. voor KI, week 4:11 november 2002 15

Alternatieve binaire boom private class TreeNode // Data fields private Object info; private TreeNode[] children; // Methods // Constructors public TreeNode(Object obj) info = (Comparable) obj; children = new TreeNode[2];... Voortgezet Prog. voor KI, week 4:11 november 2002 16

Simpele extensie naar N-aire boom private class TreeNode // Data fields private Object info; private TreeNode[] children; // Methods // Constructors public TreeNode(Object obj, int numchildren) info = (Comparable) obj; children = new TreeNode[numchildren];... Voortgezet Prog. voor KI, week 4:11 november 2002 17

Creatie expressieboom root = new TreeNode ( "/", new TreeNode ( "*", new TreeNode( "a"), new TreeNode( "b" ) ), new TreeNode ( +, new TreeNode( "c" ), new TreeNode ( -, new TreeNode( "d" ), new TreeNode( "e" ) ) ) ); Voortgezet Prog. voor KI, week 4:11 november 2002 18

Doorlopen boom preorder - wortel, linker subboom, rechter subboom inorder - linker subboom, wortel, rechter subboom postorder - linker subboom, rechter subboom, wortel public preorderdosomething ( ) info.dosomething(); if ( left!= null ) left.preorderdosomething( ); if ( right!= null ) right.preorderdosomething( ); public inorderdosomething ( ) if ( left!= null ) left.inorderdosomething( ); info.dosomething(); if ( right!= null ) right.inorderdosomething( ); Voortgezet Prog. voor KI, week 4:11 november 2002 19

Geordende lijsten Geordend: 0, 1, 2, 2, 4, 5, 7, 9 Ongeordend: 5, 9, 2, 7, 4, 0, 2, 1 public void insertordered( Comparable e ) ListIterator iter = this.listiterator(); while (iter.hasnext()) if ( e.compareto((comparable) iter.next()) < 0 ) if (iter.hasprevious()) iter.previous(); break; iter.add(e); Voortgezet Prog. voor KI, week 4:11 november 2002 20

Geordende bomen Toepassing: databases Waarom? : sneller zoeken O log N i.p.v. O N public boolean addnode(object item) // Voegt een element aan de binaire zoekboom toe if ( info.compareto(item) == 0 ) return false; else if ( info.compareto(item) > 0 ) // item.key < root.key if ( left == null ) left = new TreeNode(item); return true; // new item added else return left.addnode(item); // insert in left tree else // item.key >= root.key if ( right == null ) right = new TreeNode(item); return true; // new item added else return right.addnode(item); // insert in left tree Voortgezet Prog. voor KI, week 4:11 november 2002 21

Geordende Bomen Het schema resulteert in de method add voor SearchTree: public boolean add( Object item ) if ( isempty() ) else root = new TreeNode( item ); return true; return root.addnode( item ); Voortgezet Prog. voor KI, week 4:11 november 2002 22

join Deze method volgt ook het voorgaande patroon. In SearchTree hebben we public void join( SearchTree t ) // Combineer twee binaire zoekbomen if (!isempty() ) root.join(t); En in TreeNode: public void join( SearchTree t ) // Combineer twee binaire zoekbomen t.insert( (Comparable) info); if ( left!= null ) left.join(t); if ( right!= null ) right.join(t); Voortgezet Prog. voor KI, week 4:11 november 2002 23

Verwijderen wortel Gevalsonderscheid: Het te verwijderen element heeft geen opvolgers: (left == null) && (right == null) Het te verwijderen element heeft precies één opvolger: (left == null)!= (right == null) Het te verwijderen element heeft twee opvolgers: (left!= null) && (right!= null) Voortgezet Prog. voor KI, week 4:11 november 2002 24

Verwijderen wortel public TreeNode removeroot() // Verwijder het root element uit een boom TreeNode p; if (left == null) if (right == null) return null; else return tree^.right; else if (right == null) return left; else p = left; while (p.right!= null ) p=p.right; p.right := right; return left; Voortgezet Prog. voor KI, week 4:11 november 2002 25

Verwijderen knoop met bepaalde inhoud public boolean removenode(object item) if ( info.compareto(item) > 0 ) // item.key < root.key if ( left == null ) return false; // no item removed else if (left.info.compareto(item) == 0) left = left.removeroot(); return true; else return left.removenode(item); // remove from left tree else // item.key >= root.key if ( right == null ) return false; // no item removed else if (right.info.compareto(item) == 0) right = right.removeroot(); return true; else return right.removenode(item); // remove from left tree Voortgezet Prog. voor KI, week 4:11 november 2002 26

Verwijderen knoop met bepaalde inhoud Tot slot moet binnen de class SearchTree een method remove gemaakt worden die drie situaties aan moet kunnen: de boom is leeg: dan geven we als returnwaarde false. het root-element is het gezochte element: dan roep je de removeroot method van root aan. in alle overige gevallen moet de removenode method van root aangeroepen worden We krijgen dan: public boolean remove(object target) if (isempty()) return false; else if (root.info.compareto(target)==0) root = root.removeroot(); return false; else return root.removenode(target); Voortgezet Prog. voor KI, week 4:11 november 2002 27

Som der elementen In TreeNode hebben we: public int sumint() int sum = ((Number)info).intValue(); if (left!= null) sum += left.sumint(); if (right!= null) sum += right.sumint(); return sum; Let op dat we eerst info casten naar een Number. En alternatief is: public int sumint() return (left!= null? left.sumint() : 0 ) + (right!= null? right.sumint() : 0 ) + ((Number)info).intValue(); In SearchTree hebben we dan de method: public int sumint() if (isempty()) return 0; else return root.sumint(); Voortgezet Prog. voor KI, week 4:11 november 2002 28