Informatica. Deel II: les 9 OS & AVL. Jan Lemeire. Informatica deel II. februari mei Informatica II: les 9

Vergelijkbare documenten
Waarmaken van Leibniz s droom

Informatica. 2 e semester: les 9. OS & Sorteren. Jan Lemeire Informatica 2 e semester februari mei Informatica II: les 9

Informatica. Deel II: les 10. Bomen. Jan Lemeire Informatica deel II februari mei Informatica II: les 9

Hoofdstuk 6. Geordende binaire bomen

Informatica 2e semester

Informatica 2e semester

Informatica. Deel II&III: les 9. OS, Hashing & Mappen. Jan Lemeire. Informatica deel II&III. februari mei Informatica II: les 9

Informatica. Deel II: les 8. Software & binaire bomen. Jan Lemeire Informatica deel II&III februari mei Parallel Systems: Introduction

Hoofdstuk 3. Besturingssystemen

Informatica 2e semester

Informatica. Deel II&III: les 8. Software & binaire bomen. Jan Lemeire Informatica deel II&III februari mei Parallel Systems: Introduction

Informatica 2e semester

Informatica. 2 e semester: les 8. Software & binaire bomen. Jan Lemeire Informatica 2 e semester februari mei Parallel Systems: Introduction

HET BESTURINGSSYSTEEM

Informatica 2e semester

Erik Poll Martijn Warnier.

Informatica 2e semester

Zelftest Informatica-terminologie

6,7. Werkstuk door een scholier 2286 woorden 24 januari keer beoordeeld. Informatica. Algemeen

Programmeren in Java 3


Het besturingssysteem of operating system, vaak afgekort tot OS is verantwoordelijk voor de communicatie van de software met de hardware.

Software hoofdstuk Wat is de functie van een besturingssysteem? 2. Welke hoofdtaken heeft het besturingssysteem?

Java Programma structuur

ICT Infrastructuren: Processen en Threads. 18 november 2013 David N. Jansen

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces?

Vakgroep CW KAHO Sint-Lieven

Tim Mallezie Architectuur van besturingssystemen: Vraag A2.

Belangrijkste ideeën/concepten uit OS, incl. proces

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Informatica. Deel II&III: les 7. AI linked lists - chips. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Vakinhoudelijke uitwerking Keuzevak Applicatieontwikkeling van het profiel MVI vmbo beroepsgericht

1 Client/Server. 2 Geschiedenis. 3 Toekomst

Windows Training voor 50-plussers. PC50plus trainingen Eikbosserweg AK Hilversum tel:

Hoofdstuk 2. - is verantwoordelijk voor de communicatie van de software met de hardware.

Overerving & Polymorfisme

SBO Nilda Pinto BASISKENNIS BESTURINGSSYTEMEN (MBI 1) PERIODE MATERIAAL BOEK SOFTWARE VOOR ICT SUPPORT 2 EN 3 (HANS VAN RHEENEN)

Zelftest Java concepten

Elementary Data Structures 3

WORKSHOP ORANGE PI & PYTHON v september 2017

IMP Uitwerking week 13

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

Module I - Informatica

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Besturingssystemen Opdracht 1

Applications & Clients

eerste voorbeelden in Java

Inleiding.

Er zijn verschillende OS bv: Microsoft Windows Apple Macintosh Linux-versies/distributies zoals Ubuntu en Knoppix

Handleiding gebruik VMware Horizon Client

Een stoomcursus door Edgar de Graaf, november 2006

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Android Development CCSS2011

Windows Basis - Herman Van den Borre 1

Verslag: Computer. Naam: Tyrone Ste Luce. Klas: M4B

Applications & Clients

Windows XP Migratie opties. Bart van Dijk

Een.NET-besturingssysteemtoolkit. Discovering Cosmos. Sijmen J. Mulder

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

Tentamen Imperatief Programmeren

Windows Basics. yvan vander sanden. 22 februari 2015

Sima. Programmeren. 2e graad

in Operating System Concepten

in Operating System Concepten Doel van een Operating System Interrupts 3-Lagen model spooling (Simultaneous Peripheral Operation On Line)

IN1805 I - Operating System Concepten

Theorie Informatica. Inhoud: 1. Systeem 2. Programmeren 3. Informatiesystemen 4. Internet 5. Besturingssystemen 6. Theorie bij praktijk

Tentamen Programmeren in C (EE1400)

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

Modelleren en Programmeren

APPLICATIEBOUW 1E COLLEGE: INTRODUCTIE. Onderdeel van SmartProducts

WINDOWS 8. Windows Training voor 50-plussers

Voor op afstand os installatie moeten de volgende onderdelen geïnstalleerd zijn op de Windows 2000 server.

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

Installatie Handleiding voor Modelit Applicatieprogrammatuur

Hardware. Robert Groen. Jim van Dijk. 13 september 2013 M44 ITTL

Multi user Setup. Firebird database op een windows (server)

Modelleren en Programmeren

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

Systeemeisen Exact Compact product update 406

De computer, software

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Technische Specificaties nieuwe Unix Applikaties

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: , Appendix A.

1. Uw computer leren kennen

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

Wat is een grafische gebruikersinterface (GUI)?

1e college Introductie Applicatiebouw. Applicatiebouw{ } Onderdeel van SmartProducts

Externe Toegang installeren en gebruiken onder Mac OS X

Design principes.

SOFTLOK 12.5x. Update met behoudt van gegevens en het instellen van het EMS geheugen bereik

Zelftest Programmeren in Java

Linux Wat is Linux? UNIX Mainframes UNIX

Deze handleiding geeft uitleg over de installatie van hard- en software van HTvision V.O.F.

A2: Bedrijfssystemen. A2 en PC. Boek. Voorkennis

Handleiding installatie en gebruik. Ahsay OBM. Windows server Apple OS X Linux en UNIX-varianten

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Windows Xp professional op de werkstations en Windows 2000 op de Server

Naam: Oumaima Bekour Klas: M4b ICT De Lange. Hardware

Albert-Jan de Croes & Stefan Willemink V4C Docent: Mevrouw van Uden

Transcriptie:

Informatica Deel II: les 9 OS & AVL Jan Lemeire Informatica deel II februari mei 2014

Hoofdstuk 8: Operating Systems Jan Lemeire Pag. 2 / 64

Bedrijfscomputers Initieel waren er voornamelijk bedrijfscomputers Centrale computer mainframe systemen Voornaamste fabrikant: IBM Jan Lemeire Pag. 3 / 64

Interactiviteit via Terminal Scherm van 24 lijnen van 80 tekens groot Gebruikers Informatica II: werken les 9 op de centrale computer via domme terminals die enkel het scherm tonen en de input van de gebruiker (via toetsenbord) doorgeven. Jan Lemeire Pag. 4 / 64

Toepassingen mainframe Gegevens (bvb boekhouding) van banken, bedrijven, winkels etc Gegevens worden bijgehouden in database Database = gestructureerd bijhouden van gegevens Eigenschappen mainframe: Betrouwbaarheid (heel belangrijk) Robuust (crasht bijna nooit) Veiligheid (security) van gegevens (bvb bankgegevens) Jan Lemeire Pag. 5 / 64

IBM gaat voor Personal Computer Computer voor thuis Kan op eigen kracht werken (niet geconnecteerd met centrale computer) De PC is geboren! IBM: op dat moment het grootste informaticabedrijf Concentreert zich op hardware De PC ontketent een nieuwe revolutie in de informatica 1981 Jan Lemeire Pag. 6 / 64

IBM gaat langs bij Bill Gates en vrienden Zitten thuis te programmeren Steken DOS in elkaar MicroSoft is geboren Nog steeds terug te vinden in Windows Cmd-window Programma s start je met commando (en eventueel argumenten)

IBM heeft Operating System nodig IBM gaat langs bij Bill Gates en zijn hippie -vrienden Zitten thuis te programmeren MicroSoft is geboren Steken DOS (Disc Operating System) in elkaar Nog steeds terug te vinden in Windows Cmd-window Programma s start je met commando (en eventueel argumenten dit zijn de String[] args van de main) Jan Lemeire Pag. 8 / 64

Commando-based: Je geeft commando s In de terminal of shell Jan Lemeire Pag. 9 / 64

Bill Gates wordt rijkste man ter wereld 0.1 Jan Lemeire Pag. 10 / 64

Macht ligt vanaf nu bij software en vooral het besturingsysteem 1984 IBM maakt historische vergissing door op hardware te blijven mikken Ze mist de softwareboot compleet Jan Lemeire Pag. 11 / 64

IBM Jan Lemeire Pag. 12 / 64

Besturingsysteem = Operating System (OS) OS regelt en organiseert de computer OS wordt van harde schijf gestart bij het booten BIOS zorgt hiervoor Een besturingssysteem (in het Engels operating system of afgekort OS) is een programma (meestal een geheel van samenwerkende programma's) dat na het opstarten van een computer in het geheugen geladen wordt en alle mogelijkheden van de computer aan de gebruiker. Het OS biedt ook de functionaliteiten aan om andere programma's - applicaties genoemd - uit te voeren. Jan Lemeire Pag. 13 / 64

Application Programming Interface (API) OS verstopt de details van de hardware voor de gebruiker en voor applicaties dmv een API Deze worden op een uniforme wijze aan de applicaties aangeboden. De API abstraheert de toegang tot de verschillende randapparatuur, zonder OS moet elk programma zelf instaan voor het aansturen van randapparatuur (zoals printer, beeldschermen, harde schijf). Gebruikersprogramma is enkel afhankelijk van het OS, niet van de randapparatuur. Het communiceren van het OS met het randapparaat gebeurt via een driver. Jan Lemeire Pag. 14 / 64

Hoofdtaken OS (vervolg) Verdelen van toegang tot systeembronnen (RAM-geheugen, opslag, printer etc.) tussen actieve programma's Elk programma krijgt een deel van het werkgeheugen toegewezen (java: standaard 64MB, je kan dit anders instellen) OS voorkomt dat programma buiten zijn deel gegevens kan lezen of schrijven (beveiliging!) Aanbieden gegevens (files) en applicaties aan gebruiker OS beheert het filesysteem (georganiseerd in een boomstructuur dmv folders) Verdelen van processortijd over de aktieve programma s Zie verder Jan Lemeire Pag. 15 / 64

Interactiviteit Geen interactiviteit = batch programma Programma en gegevens worden op voorhand klaargemaakt Tijdens de uitvoering kan je niet interageren met het programma Resultaten worden op het einde als geheel gepresenteerd Commando-gebaseerd Cf DOS, linux shell De commando s worden geïnterpreteerd en het programma gestart Je kan een lijst van commando s doorgeven ( batch ) Grafische User-Interface (GUI) Windows, muis, toetsenbord, touch screen Jan Lemeire Pag. 16 / 64

Task Manager Windows: start via Control-Alt-Delete Toont aktieve applicaties en processen, alsook processorgebruik Applicaties: van gebruiker Processen: naast processen van applicatie, ook processen en services van operating system, achtergrondprocessen van applicaties, Operating System verdeelt cycles van processor (CPU) over de verschillende processen (process scheduling) Op een modern OS kan je meerdere programma s tegelijk draaien. Het uitvoeren van een programma resulteert in een proces. Een achtergrondproces is in feite ook een gewoon programma, maar ze is niet zichtbaar voor de gebruiker. De achtergrondprocessen zorgen voor het beheer van het systeem of bieden Informatica services II: les 9 aan (zoals het sharen van je (muziek-)files en het checken Jan Lemeire Pag. 17 / 64 van je mailbox).

Threads van processen main(){ thread.start();...... Hoofdthread Process Zijthread run(){...... Eén programma kan bestaan uit meerdere threads. Elke thread voert een sequentie van instructies uit. Een sequentie kan je zien als een draad, vandaar de benaming. Vele moderne toepassingen zijn zelf opgebouwd uit een groot aantal onafhankelijke threads die simultaan uitgevoerd worden. Het tekstverwerkingsprogramma Word bv. gebruikt verschillende threads om teksten en figuren op het scherm te tonen, zodanig dat wanneer men snel door een tekst wenst te lopen men niet hoeft te wachten op het tekenen van alle figuren. Een andere thread zal tegelijkertijd je taalfouten opsporen (de spelling checker). Jan Lemeire Pag. 18 / 64

Processor kan maar 1 instructiesequentie tegelijk uitvoeren Jan Lemeire Pag. 19 / 64

Threads van je project Niet in cursus Hoofdthread Proces Thread voor afhandelen events Thread voor timer main(){ Jframe frame = new Jframe(); frame.show();... Hoofdthread doet niets meer Windows do{ Wacht op event Bepaal broncomponent Roep Listeners op actionperformed(){... timer.start();... Uw code while (frame is shown); Maar 1 GUI-thread: kan maar 1 actie/event tegelijk afhandelen!!! Windows For(elke x ms){ Jan Lemeire Pag. 20 / 64 Aparte thread voor spellus actionperformed(){......... Uw code

Process scheduler De process-scheduler is een deel van het besturingssysteem dat op elk ogenblik bepaalt aan welk van alle programma's die zich in werkgeheugen bevinden de centrale verwerkingseenheid zal werken. Het hart van de computer, de processor of CPU, kan immers maar 1 programma tegelijk uitvoeren. De processor is immers opgebouwd volgens de Von Neumann-architectuur. Karakteristiek voor deze architectuur is dat hij één programma stap-voor-stap uitvoert. Moderne computers hebben echter meerdere processorcores (dual core, quadcore, ). Dat zijn dan in feite 2, respectievelijk 4 onafhankelijke processoren die elk één proces tegelijkertijd kunnen uitvoeren. De process-scheduler zal per core de processortijd verdelen over de lopende processen en threads: elk proces/thread krijgt een periode ( time slice ) toegekend. Jan Lemeire Pag. 21 / 64

Toestanden van proces De lopende processen, kunnen zich, op elk ogenblik in drie toestanden bevinden: 1) actief: de centrale verwerkingseenheid (processor) is aan het proces aan het werken; dwz. dat instructies van dat programma opgehaald worden door de stuureenheid. 2) geblokkeerd: een in- of uitvoeroperatie (Input/Output of I/O) is aan de gang en het proces moet wachten tot het einde ervan; 3) wachtend: het proces zou kunnen uitgevoerd worden, maar de centrale verwerkingseenheid is niet beschikbaar, ze is instructies van een ander proces aan het uitvoeren. Het proces moet wachten tot de proces-scheduler Informatica II: 9 processorcycles ter beschikking stelt. Jan Lemeire Pag. 22 / 64

Overgang van 1 proces naar een ander Als het aktieve proces op I/O (input/output) moet wachten Dikwijls wordt bij I/O het OS geaktiveerd, omdat die de I/O beheert (bvb toegang tot files) Of als de toegekende time slice die een proces toegekend krijgt op is Timer wordt gestart en geeft een interrupt Interrupt geeft aan processor aan dat de scheduler van het OS weer geaktiveerd moet worden Overgang van 1 proces naar een ander: context switch de staat vh proces wordt opgeslagen en dat van het ander wordt geladen Jan Lemeire Pag. 23 / 64

Interrupts Met een Interrupt ( onderbreking ) wordt een lopend programma onderbroken. Deze is voorzien in de hardware van de processor! Je kan immers niet verwachten dat een lopend programma zelf zal checken of hij verder kan gaan. Ook kan het OS er niet van uitgaan dat elk programma in een redelijke tijd stopt. Het OS moet op elk moment een programma kunnen onderbreken. Anders zou een oneindige lus volledig beslag leggen op je processor zonder dat je er iets aan kan doen, behalve dan de computer herstarten. Let op: het OS is ook niets meer dan een programma. Er is geen big brother in je computer die toekijkt wat de processor doet. Controle over het aktieve proces wordt verkregen door interrupts. Om toe te laten op gelijk welk ogenblik sprongen tussen toepassingsprogramma en besturingssysteem te maken bevatten processoren een hardwareschakeling waardoor een programma kan onderbroken worden door middel van een interrupt. Vervolgens bepaalt de interrupt handler welk programma uitgevoerd moet worden. Aan de hand van de oorsprong van de interrupt veroorzaakt deze een sprong naar het gewenste programma. De interrupt handler speelt dus een centrale rol en vormt dan ook het hoofdbestanddeel van de kern van moderne besturingssystemen. Jan Lemeire Pag. 24 / 64

Unix & Linux UNIX operating system: zoals mainframe initieel bestemd voor bedrijfscomputers User moet inloggen Heeft eigen files op server (in zijn home) Enkel administrator kan dingen aan systeem veranderen Linux: Open Source-versie van UNIX Open Source volgt de GNU-regels: de code mag vrij (gratis) gebruikt worden zolang er geen geld voor gevraagd wordt Apple gebruikt nu ook Unix-versie Android van Google is java op Linux Conclusie: in de consumentenmarkt is het Windows of Linux. Jan Lemeire Pag. 25 / 64

Vandaag 1. Besturingssystemen 2. Operaties op binaire bomen (vervolg) 3. Java applets 4. AVL-bomen

Operaties op bomen (vervolg)

Elke node is een object class Node<T>{ T data; Node<T> left, right; Node(T data){ this.data = data; this.left = null; this.right = null; Jan Lemeire Pag. 28 / 64

Boom object public class BinaryTree<T> { Node<T> root; Comparator<T> comparator; public BinaryTree(Comparator<T> comparator){ this.comparator = comparator; root = null; Jan Lemeire Pag. 29 / 64

Belangrijke operaties 1. Toevoegen element 2. Zoeken element 3. Verwijderen element 4. Doorlopen van boom (bvb printen) 5. Balanceren van de boom Jan Lemeire Pag. 30 / 64

3. Verwijderen van element p. 71 4 mogelijkheden: Element is root Element is niet in boom Element heeft 0 of 1 subboom Element heeft 2 subbomen 5 Jan Lemeire Pag. 31 / 64 3 2 6 1 4 7 3 mogelijke situaties : a) 2 subbomen: 3, 6 b) 0 of 1 subboom: 1, 2, 4, 5, 7 c) niet aanwezig: 0, 8,

4 e geval: promoten van node 2 6 2 6 1 4 7 1 4 7 5 5 Meest linkse van rechtersubboom Meest rechtse van linkersubboom Jan Lemeire Pag. 32 / 64

public boolean remove(t object){ if (comparator.compare(root.data, object)== 0){ root = createsubtree(root); return true; else return findnodeandremove(root, object); p. 72 private boolean findnodeandremove(node<t> current, T object){ if (current == null) return false; if (current.left!= null && comparator.compare(current.left.data, object)== 0){ current.left = createsubtree(current.left); return true; else if (current.right!= null && comparator.compare(current.right.data, object)== 0){ current.left = createsubtree(current.right); return true; else if (comparator.compare(current.data, object) < 0) return findnodeandremove(current.left, object); else return findnodeandremove(current.right, object); Jan Lemeire Pag. 33 / 64

private Node<T> createsubtree(node<t> current){ if (current.left == null){ // current.right is the only subtree that we should consider return current.right; else if (current.right == null){ // current.left is the only subtree that we should consider return current.left; else { // promote rightmost node of left subtree if (current.left.right == null){ current.left.right = current.right; return current.left; else { Node<T> rightmostnode=pickrightmostnode(current.left); // he is new root of subtree rightmostnode.right = current.right; rightmostnode.left = current.left; return rightmostnode;

private Node<T> pickrightmostnode(node<t> current){ // we expect current.right not to be null if (current.right.right!= null){ return pickrightmostnode(current.right); else { Node<T> rightmostnode = current.right; current.right = rightmostnode.left; rightmostnode.left = null; return rightmostnode;

p. 74-75 4. Doorlopen van boom public void preorder(node<t> node){ if (node!= null){ System.out.print(node.data+", "); preorder(node.left); preorder(node.right); public void inorder(node<t> node){ if (node!= null){ inorder(node.left); System.out.print(node.data+", "); inorder(node.right); public void postorder(node<t> node){ if (node!= null){ postorder(node.left); postorder(node.right); System.out.print(node.data+", "); Zie boom van vorige les {k, g, a, e, c, f, i, l, x, q, r, z {a, c, e, f, g, i, k, l, q, r, x, z {c, f, e, a, i, g, r, q, z, x, l, k Jan Lemeire Pag. 36 / 64

= Boomrecursie Kan je niet op een eenvoudige manier met een while-lus Jan Lemeire Pag. 37 / 64

p. 75 Toepassing postorder public int aantalkinderen(node<t> node){ if (node == null) return 0; int n = aantalkinderen(node.left); n += aantalkinderen(node.right); System.out.println("Node "+node.data+" heeft "+n+" kinderen"); return n + 1; Jan Lemeire Pag. 38 / 64

Applets

Java applets Kan je toevoegen aan html-webpagina s <applet code="be.ac.vub.ir.util.jappletwithpanel archive="../causallearningwithkde.jar" height="360" width="900"> <param name="panel" value="be.ac.vub.ir.statistics.estimators.kde2dpanel" > </applet> Steek al je files in een jar-file In Eclipse: File menu -> export -> Java -> Jar file Je browser heeft een java-console waarin de System output komt (System.out & System.err) Jan Lemeire Pag. 42 / 64

Voorbeeld import javax.swing.japplet; public class CannonDemoApplet extends JApplet { public void init(){ String opt = getparameter("option"); if (opt!= null && opt.equals("ammo")) getcontentpane().add(new CannonPanel(true)); else getcontentpane().add(new CannonPanel(false)); Jan Lemeire Pag. 43 / 64

Opgelet Zorg dat beeldjes en audiofiles ook in de jar komen Zet ze bij je packages Laden van beeldjes: zie website Jan Lemeire Pag. 44 / 64

JApplet De browser communiceert met de applet via public void init( ) initializes variables and objects Voeg GUI componenten toe aan contentpane: getcontentpane().add() public void paint( Graphics g ) to draw screen public void start() called when the applet is visible. It is called after the init method and each time the applet is revisited in a Web page. public void stop() called when applet is no longer visible public void destroy() when hosting window is closed (exit). Overschrijf methodes als nodig Jan Lemeire Pag. 45 / 64

AVL-bomen

Waarom bomen? Linked lists: gemiddelde zoektijd = n/2 Perfect-gebalanceerde boom log 2 n 3/4 Niet (log 2 n)/2, de helft van de nodes ligt immers in diepste laag! Echter: tijdrovend gebalanceerd te houden bij het toevoegen/verwijderen van nodes Wat als niet-perfect gebalanceerd? Er tussen in AVL-bomen Logaritmisch of lineair? Jan Lemeire Pag. 47 / 64

p. 76 AVL-bomen Gedefinieerd door twee Russische mathematici, Adelson-Velskii & Landis Beschouwen enkel de hoogte van deze subbomen De hoogte van de linkersubboom mag niet meer dan een niveau verschillen van de hoogte van de rechtersubboom Jan Lemeire Pag. 48 / 64

Voorbeeld 3/4 2/2 3/3 1/1 1/0 2/2 2/0 0/0 0/0 0/0 1/0 1/0 1/1 Jan Lemeire Pag. 49 / 64

Herbalanceren 3/4 2/2 3/3 1/1 1/0 2/2 1/1 0/0 0/0 0/0 1/0 1/0 0/0 0/0 Jan Lemeire Pag. 50 / 64

p. 77 Hoogte van subboom class Node<T>{ T data; Node<T> left, right; int hoogte=0; Node(T data){ this.data = data; left = null; right = null; public String tostring(){ return data.tostring()+"("+hoogte+")"; Jan Lemeire Pag. 51 / 64

Hoogte berekenen protected void berekenhoogte(node<t> node){ int nrechts = node.right == null? 1 : 1 + node.right.hoogte; int nlinks = node.left == null? 1 : 1 + node.left.hoogte; node.hoogte = Math.max(nRechts, nlinks); Jan Lemeire Pag. 52 / 64

public void add(t object){ Node<T> newnode = new Node<T>(object); if (root == null) root = newnode; else add(root, newnode); berekenhoogte(root); private void add(node<t> current, Node<T> newnode){ if (comparator.compare(newnode.data, current.data) < 0){ // moet links komen if (current.left == null) current.left = newnode; else add(current.left, newnode); else { // rechts if (current.right == null) current.right = newnode; else add(current.right, newnode); // herbereken hoogte berekenhoogte(current);

p. 78 Consistent houden Hoogte moet steeds correct blijven Herberekenen wanneer nodig Encapsulatie kan dit waarborgen: Alle aanpassingen van boom gebeuren via methodes Cf getters en setters De methodes garanderen de consistentie van de gegevens Jan Lemeire Pag. 54 / 64

p. 79 Het opbouwen van een AVL-boom Nodes worden toegevoegd Indien niet aan de AVL-voorwaarde voldaan: herschikken van de boom 2 situaties + symmetrisch geval tov A: A A B B Buitenwaarts onevenwicht Binnenwaarts onevenwicht Jan Lemeire Pag. 55 / 64

Herschikking buitenaards onevenwicht A B B A Herschikking van een buitenwaarts onevenwicht Jan Lemeire Pag. 56 / 64

Herschikking binnenwaarts onevenwicht A C B C B A Herschikking van een binnenwaarts onevenwicht Jan Lemeire Pag. 57 / 64

p. 80 AVLTree klasse Subklasse van BinaryTree! Overschrijven van add om AVL-voorwaarde te bestendigen public class AVLTree<T> extends BinaryTree<T> { public AVLTree(Comparator<T> comparator) { super(comparator); Jan Lemeire Pag. 58 / 64

Imbalans berekenen // negatief is imbalans naar links private int imbalance(node<t> links, Node<T> rechts){ int nrechts = rechts == null? 0 : 1 + rechts.hoogte; int nlinks = links == null? 0 : 1 + links.hoogte; return nrechts - nlinks; Jan Lemeire Pag. 59 / 64

p. 82-83 Programmatie van de add @Override public void add(t object){ Node<T> newnode = new Node<T>(object); root = addavl(root, newnode); // Node wordt toegevoegd en nieuwe topnode wordt teruggegeven (deze kan veranderen) private Node<T> addavl(node<t> current, Node<T> newnode){ if (current == null) return newnode; if (comparator.compare(newnode.data, current.data) < 0){ // moet links komen Wat als current.left = addavl(current.left, newnode); we dit weglaten? // check for imbalance Node teruggeven is van belang else { // rechts current.right = addavl(current.right, newnode); // check for imbalance Jan Lemeire Pag. 60 / 64

Outer imbalance left // check for imbalance int imbalans = imbalance(current.left, current.right); if (imbalans < -1){ if (comparator.compare(newnode.data, current.left.data) < 0){ System.out.println("When adding "+newnode.data+" outer imbalance at left of "+current.data); // if added left: outer imbalance Node<T> A = current; // zie tekening van cursus Node<T> B = current.left; A.left = B.right; // in de goede volgorde!! B.right = A; current = B; // dit is de nieuwe topnode van subboom berekenhoogte(a); berekenhoogte(b); else { Jan Lemeire Pag. 61 / 64

Inner imbalance left else { System.out.println("When adding "+newnode.data+" inner imbalance at left of "+current.data); // if added right: inner imbalance Node<T> A = current; // zie tekening van cursus Node<T> B = current.left; Node<T> C = B.right; A.left = C.right; // in de goede volgorde!! B.right = C.left; C.right = A; C.left = B; current = C; // dit is de nieuwe topnode van subboom berekenhoogte(a); berekenhoogte(b); berekenhoogte(c); Jan Lemeire Pag. 62 / 64

else { // rechts toevoegen right: identiek current.right = addavl(current.right, newnode); // check for imbalance int imbalans = imbalance(current.left, current.right); if (imbalans > 1){ if (comparator.compare(newnode.data, current.right.data) > 0){ System.out.println("When adding "+newnode.data+" outer imbalance at right of "+current.data); // if added right: outer imbalance else { System.out.println("When adding "+newnode.data+" inner imbalance at right of "+current.data); // if added left: inner imbalance // spiegelbeeld van vorige berekenhoogte(current); return Informatica current; II: les 9 Jan Lemeire Pag. 63 / 64

p. 84 Zoektijd in AVL-bomen Meest-ongebalanceerde AVL-boom (worst case) Diepe boom met weinig nodes, maar toch AVL N(h) het minimum aantal nodes voor een hoogte h N(1)=1 en N(2) = 2 ( fibonacci) Er geldt: Dus: OK!! logaritmisch in n! Jan Lemeire Pag. 64 / 64