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

Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Parallel Systems: Introduction

Informatica

Deel II&III: les 8

Software & binaire bomen

Jan Lemeire

Informatica deel II&III

februari – mei 2015

Page 2: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 2Pag. / 67

Leibniz’ droom

Informatica II: les 8

De “Calculus ratiocinator”

Een logisch denkend apparaat

Om met de regels van de logica ondubbelzinnig te kunnen

vaststellen of een statement waar of vals is

Deductief systeem waarin alle regels afgeleid zijn van een

kleine verzameling axiomas

1646 – 1716

Leibniz was één van de eerste die begreep dat als je filosoferen, denken, redeneren, … in formele regels kunt gieten, je dit ook door een apparaat kuntlaten doen

Page 3: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Vandaag

1. Theoretische informatica

2. Software

3. Java GUIs

4. Binaire bomen

Page 4: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

(1) Digitaal & binair

(4) Hardware architectuur

(5) Efficiënt productieproces

(6) Computatietheorie & Software

Elektronica: (2) ‘relais’-schakeling,

(3)geheugen

(7) Operating system

(8) Communicatie &

internet

(9) Artificiële

intelligentie

Informatica deel III: technologie, historiek en economische aspecten

Waarmaken van Leibniz’s droom

(0) Het idee

Page 5: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 5Pag. / 67

Hoofdstuk 6: Software

Page 6: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 6Pag. / 67

George Boole

Logica herleid tot Booleaanse algebra

Informatica II: les 8

1815 – 1864

Boole zette een belangrijke stap met het ontwikkelen van een algebra voor het ‘rekenen’ met statements over waar/onwaar.

Page 7: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 7Pag. / 67

Gottlob FregeBeschrijft hoe wiskundigen en

logici denken

1879: de universele taal van de logica

1903: brief van Betrand Russel die hem op een onvolledigheid wijst

Extra-ordinaire verzameling = verzameling dat eenelement is van zijn eigen

– Vb: “verzameling van alle dingen die geen spreeuw zijn”

Maar: de verzameling E van alle ordinaireverzamelingen

– En wat is E? Ordinair of extra-ordinair

Informatica II: les 8

1848 – 1925

Page 8: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 8Pag. / 67

David Hilbert

“Wir mussen wissen; wir werden wissen”

We moeten weten; we zullen weten

Elke logische of mathematische vraag is oplosbaar(en zal opgelost worden)

Nodig: een expliciete procedure om vanuit premises na te gaan of een conclusie volgt of niet (Hilbert’s beslissingsprobleem)

Informatica II: les 8

1862 – 1943

Hilbert’s beslissingsprobleem zou leiden tot een doorbraak in de theoretischeinformatica.

Page 9: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 9Pag. / 67

Alan Turing

Hilbert’s procedure: algoritme!

Als we een ‘mechanische’ lijst van regels hebben om de oplossing van een mathematisch probleem op te lossen, zoudenwiskundigen geen werk meer hebben…

Bestaat er zo’n algoritme?

Om tegendeel te bewijzen moest hij een ding makendat een/elk algoritme kan uitvoeren

Informatica II: les 8

Alan Turing wierp zich op Hilbert’s probleem. Hij bedacht dat er hiervoor eenalgoritme gemaakt moet worden (die nagaat of een statement klopt of niet), en vervolgens een machine die het algoritme kan uitvoeren. De ‘Turing machine’ werd geboren, een theoretisch model van een computer.

Page 10: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 10Pag. / 67

De Turing machine

Informatica II: les 8

Staat Gelezenbit

Nieuwestaat

Te schrij-ven bit

Bewegen

0 0 0 0 >

0 1 1 1 <

1 0 1 _ >

1 1 HALT

Data: oneindige lange tape voor het lezen of schrijven van 0/1/spatie

Kan 1 vakje naar links of rechts bewogen worden

Staat (toestand): een aantal binaire variabelen

Gedragsregels

Deze machine is alleen maar van theoretisch nut. Ze is bijvoorbeeld niet echtgemakkelijk programmeerbaar.

Page 11: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 11Pag. / 67

Voorbeeld

Applet van studenten 2012

http://parallel.vub.ac.be/education/java/studentenprojecten/Turing Machine.html

• “5-state B.B.”: met input ‘_11’ stopt machine, voorandere inputs niet

Java applet:

http://ironphoenix.org/tril/tm/

Informatica II: les 8

Page 12: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 12Pag. / 67

Oplossing van Hilbert’s beslissingsprobleem?

Met de machine nagaan of een logisch statement waar of valsis:

Programma runnen

Als de machine stopt is statement bewezen (waar).

‘Halting problem’ (tegelijkertijd ontdekt door Alonzo Church en Alan Turing)

Gegeven een Turing machine en programma, ga na of ditprogramma zal stoppen.

Hier bestaat geen algoritme voor die dit kan nagaan

Hilbert’s beslissingsprobleem is onoplosbaar

Turing’s resultaten ook belangrijk voor informatica

Informatica II: les 8

Het resultaat van Turing was weer een knak in het optimisme van de wetenschap. Je kan niet voor alles bewijzen of het waar of niet waar is. Hieruit onstond mede de moderne relativistische kijk op de wereld. De wetenschap kan niet allesoplossen/verklaren… De VUB blijft echter geloven dat wetenschap veel kan oplossen. Scienta Vincere Tenebras.

Page 13: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 13Pag. / 67

De universele computer

Elke computatie kan er op uitgevoerd worden = Turing Machine

Kan alles berekenen wat berekenbaar is

rekenen

ook om logisch te denken…

universeel

Informatica II: les 8

Misschien wel het belangrijkste resultaat van Turing is echter het idee van eenuniversele computer. Eén computer (hardware) die alles kan berekenen watmaar te berekenen valt. Dit was revolutionair, omdat velen in die tijd nietkonden geloven dat je met 1 machine totaal verschillende berekeningen kandoen. Alsof je met een wasmachine ook kan autorijden.

Page 14: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 14Pag. / 67

Misvattingen omtrent computers

Informatica II: les 8

Howard Aiken, bouwde de eerste computer

voor IBM in 1944 en zei in 1956:

“If it should turn out that the basic logics of a machine designed for the numerical solution of differential equations coincide with the logics of a machine intended to make bills for a department store, I would regards this as the most amazing coincidence I have ever encountered”

Studie van 1947:

“slechts zes elektronische digitale computers zullen voldoende zijn om al het rekenwerk van de gehele Verenigde Staten te kunnen doen."

Page 15: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 15Pag. / 67

Basisprincipe

1 universele computer kan elke andere computer simuleren

Zo is je programma ook maar data die zegt wat de computer moet doen. Voor dat programma heb je geenaparte machine nodig, toch?

Nogal logisch, niet?

Dit kan je ook toepassen op programmeertalen: je wilt een taal waarmee je alle mogelijke algoritmes kanprogrammeren, een universele programmeertaal.

Informatica II: les 8

Page 16: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 16Pag. / 67

Computatietheorie: bewijzen dat eenprogramma correct is?

Heel omslachtig!

Enkel mogelijk voor eenvoudige algoritmes.

Dus: ad-hoc testen noodzakelijk, zorgvuldigprogrammeren, goed structureren van de code, …

Informatica II: les 8

Anderzijds zijn er nog vele gaten in de theoretische informatica. Zo zou het toch handig zijn om te bewijzen dat je programma correct is. Dit blijkt heel omslachtig te zijn, zelfs voor simple programma’s. Informatica blijft dan ookgedeeltelijk een ‘praktische’ wetenschap. Maar wij ingenieurs malen daar tochniet om, he? Als het maar nuttig is, die computer.

Page 17: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 17Pag. / 67

Hoofdstuk 6: Software

Page 18: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Informatica II: les 8

software: weg met de kabeltjes

Page 19: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 19Pag. / 67

Programmeertalen

Informatica II: les 8

softw

are

Een processor biedt een aantal instructies aan die hij begrijpt en kan uitvoeren. Deze instructies zijn binair en noemt men machinecode. Voor de leesbaarheid biedt assembler mnemonische afkortingen aan voor binaire instructies, variabelen en labels van codelijnen. De assembler maakt de vertaling en zet alle afkortingen om naar binaire machinecode die dan uitgevoerd kan worden.

Page 20: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 20Pag. / 67

Machinetaal - assembler

Instructies op machineniveau:STO (store): sla waarde op in geheugenvakje met naam x

EQ/NE (equal): als gelijk aan/is niet gelijk, spring naar xxx (label)

MUL/ADD (multiply/add): vermenigvuldig/voeg toe aan x

JMP (jump): spring naar xxxInformatica II: les 8

Page 21: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 21Pag. / 67

Assembler-instructieformaat

Informatica II: les 8

OPC OP1 OP2 RES

OPC OP1 OP2 NEXT

Informatieverwerkende instructie

Stuurinstructies (control instructions)

OPeration Code: de aard van de bewerking

OPerand addresses: de adressen van de twee

gegevens waarop operatie zal worden uitgevoerd

RESult address: het adres van het resultaat

NEXT instruction: het adres in het programmageheugen

van de volgende instructie

Page 22: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 22Pag. / 67

3e generatietaal

Onafhankelijk van de hardware

≈ beschrijving van het algoritmeGebruik van variabelen ipv geheugenadressen

Geen JUMP, enkel for/while/if/switch – Jumps leidt tot spagetticode, je mag van overal naar overal springen

Functies/methodes mogelijk

Omzetting naar assembler: compilerenCheckt je code op syntaxfouten!

Informatica II: les 8

Programmeren in assembler is niet produktief. Het is redelijk omslachtig, je maakt snel fouten en de code is heel onleesbaar. Daarom heeft men programmeertalen ontwikkeld die minder code vergen, meer aansluiten bij algoritmes, meer gestructureerd, leesbaarder en minder foutgevoelig. De Nederlander Edgser Dijkstra was het voornaamste genie achter de 3e

generatietalen.

Page 23: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 23Pag. / 67

Edsger Dijkstra (NL)

Welke constructies moet een programmeertaalminimaal bevatten?

While/for

– Goto is onnodig. In oude talen kon je zeggen ‘spring naar lijn 111’, een willekeurige lijn van je programma. Dit leidde echter tot onoverzichtelijke ‘spaghetti’-code. Dijkstra toonde aan dat een while voldoende is

Functies

– In het begin waren er om praktische redenen veelbeperkingen op het gebruik van functies.

Recursie

– Hier was veel tegenkanting tegen, omdat het praktischtamelijk ‘duur’ is (vergt veel van processor)

Informatica II: les 8

1930 – 2002

Page 24: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 24Pag. / 67

Programma => computer

Informatica II: les 8

broncode

Applicatie(executable .exe)

compileren

uitvoeren

Nieuwe compilatie nodig voor

elk systeem (operating

system + hardware)!

Operating System (Windows, Linux, Mac, …)

Hardware(Intel of AMD processor)

Hogere taal

Machinetaal

Page 25: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 25Pag. / 67

Java: via virtuele machine

Informatica II: les 8

Java code (.java file)

Java applicatie(.class of jar-file)

compileren

uitvoeren

Javacode werkt op elk

operating system!

Je moet wel virtual machine

installeren

Tijdens het uitvoeren wordt

instructies van de class-files

omgezet naar machinetaalOperating System

(Windows, Linux, Mac, …)

Hardware(Intel of AMD processor)

Java Virtual Machine

Specifieke tussentaal die iets

hoger is dan assembler

Page 26: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 26Pag. / 67

Ideaal voor internet

Informatica II: les 8

Jou code staat op

webserver

Via virtuele machine runt

hij op elke lokale machine

(‘client’)

Java applicatie(.class of jar-file)

Operating System (Windows, Linux, Mac, …)

Hardware(Intel of AMD processor)

Java Virtual Machine

INTERNET

Doordat Java via een virtuele machine (die wel specifiek is voor elk system) tijdens het uitvoeren wordt omgezet naar machinetaal, kan je programmaoveral uitgevoerd worden.

Page 27: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 27Pag. / 67

Python & Mathlab

Geïnterpreteerde talen

Je code wordt tijdens het uitvoeren omgezet naarmachinetaal.

Je moet Python/Mathlab dus geïnstalleerd hebben

Javacode wordt wèl gecompileerd, java-files wordenomgezet naar class-files.

Javacode wordt dus gecontroleerd op fouten

Informatica II: les 8

Niet in cursus

Page 28: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 28Pag. / 67

4e generatietaal

High-level specification languages: programmerenwat je wilt, niet hoe het moet gebeuren

Vb: GUI aanmaken met een toolTe integreren in Eclipse

– Google Windowbuilder Pro

– Visual Editor

(Nog) niet echt succesvol

Enkel voor specifieke applicaties (zoals GUIs)

Mijn mening: nog geen artificiële intelligentie

=> computer kan nog niet begrijpen wat je wilt

Informatica II: les 8

Een GUI aanmaken kan via een tool waarbij je niets moet programmeren. Je bouwt als het ware je applicatie door aan te geven hoe deze er uit moet zien. Dit werkt echter nog niet voor algemene applicaties…

Page 29: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 29Pag. / 67

Tool om GUIs te maken

Informatica II: les 8

Kan je toevoegen aan Eclipse!

Page 30: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 30Pag. / 67

Object-georiënteerde talen

Worden als 3e generatietalen aanzien

Toch is de code-organisatie fundamenteelverschillend

De code is opgesplitst in klasses ipv functies.

Vergt een andere manier van denken

Is dè uitdaging van dit semester, zowel voor jullie alsvoor ons (lesgevers)

Informatica II: les 8

Page 31: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 31Pag. / 67

Voor ingenieur: welke taal?

moet handig en efficiënt zijn, geschikt voor de taak

Informatica II: les 8

High-level (doet veel voor u)

Low-level (kort bij de hardware)

Grote projectenKleine projecten

Java

Python Matlab

C/C++

Zonder al te diep in te gaan over wat nu de beste taal is (een eeuwige steeds-hoog-oplopende discussie onder informatici), een kleine poging tot conclusies. C/C++ zullen velen later nog zien, het is de meest-gebruikte taal die kort bij de hardware staat, daarvoor uitermate geschikt voor het programmeren van systemen (chips, robots, kritische applicaties, …)

Page 32: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Graphical User

Interface (GUI)

Page 33: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 33Pag. / 67

GUI

GUI = Graphical User Interface

Gebruiken van de java klasses van Swing

Online documentatie

Toont de kracht van object-georiënteerde talen

Encapsulatie

Overerving (Inheritance)

Abstractie/polymorphisme

Zie

Informatica II: les 8

Page 34: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 34Pag. / 67

Swing’s klassehiërarchie

Informatica II: les 8

Page 35: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Informatica II: les 1

Boek p. 38, 39, 43

Page 36: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Informatica II: les 3

Page 37: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Boek p. 35

Page 38: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Boek p. 45-46

Page 39: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level
Page 40: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 40Pag. / 67

Tekenvoorbeeld

Informatica II: les 8

public class TekenVoorbeeld extends JFrame {

public TekenVoorbeeld(){

setSize( 400, 200 );

setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

setTitle( "Voorbeeld 0301" );

setContentPane( new Paneel() );

setVisible( true );

}

public static void main( String args[] ) {

JFrame frame = new TekenVoorbeeld();

}

}

Boek p. 69

en volgende

Page 41: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

class Paneel extends JPanel {

private int a;

private int b;

private int antwoord;

public Paneel() {

setBackground( Color.WHITE );

a = 174;

b = 26;

antwoord = a + b;

}

public void paintComponent( Graphics g ) {

super.paintComponent( g );

// Zet de waarden van a, b en antwoord op het scherm:

g.drawString( "Overzicht van de berekening:", 40, 20 );

g.drawString( "a = " + a, 40, 40 );

g.drawString( "b = " + b, 40, 80 );

g.drawString( "De som is: " + antwoord, 40, 120 );

g.fillOval(40, 20, 10, 10);

g.drawOval(40, 40, 10, 10);

g.fillRect(40, 80, 10, 10);

g.drawRect(40, 120, 10, 10);

}

}

Page 42: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level
Page 43: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Binaire bomen

Page 44: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 45Pag. / 67

Elke node is een object

Informatica II: les 8

class Node<T>{

T data;

Node<T> left, right;

Node(T data){

this.data = data;

this.left = null;

this.right = null;

}

}

Page 45: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 46Pag. / 67

Boom object

Informatica II: les 8

public class BinaryTree<T> {

Node<T> root;

Comparator<T> comparator;

public BinaryTree(Comparator<T> comparator){

this.comparator = comparator;

root = null;

}

}

Page 46: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 47Pag. / 67

Operaties op bomen

7.2 Toevoegen element

7.3 Zoeken element

7.5 Verwijderen element

7.6 Doorlopen van boom (bvb printen)

7.7 ‘Balanceren’ van de boom

Informatica II: les 8

Page 47: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 48Pag. / 67

2. Zoeken element

Tijd ~ diepte boom

Idealiter: log2nBehalve als ongebalanceerd (zie verder)

Informatica II: les 8

public boolean contains(T object){

return find(root, object);

}

private boolean find(Node<T> current, T object){

if (current == null)

return false;

else if (comparator.compare(current.data, object) == 0)

return true;

else if (comparator.compare(object, current.data) < 0)

return find(current.left, object);

else

return find(current.right, object);

}

p. 99

Page 48: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 49Pag. / 67

Staartrecursie

Met while:

Informatica II: les 8

public boolean containsWithoutRecursion(T object){

Node<T> current = root;

while (current != null){

if (comparator.compare(current.data, object) == 0)

return true; // gevonden!

else if (comparator.compare(object, current.data) < 0)

current = current.left;

else

current = current.right;

}

return false; // niet gevonden

}

Page 49: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 50Pag. / 67

Zoektijd binaire boom

Als gebalanceerd

n => n/2 => n/4 => n/8 => … => 1

Of: 1.2x = n

𝑥 = 𝑎𝑎𝑛𝑡𝑎𝑙𝑍𝑜𝑒𝑘𝑠𝑡𝑎𝑝𝑝𝑒𝑛 = log2 𝑛

Informatica II: les 8

p. 100

Page 50: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 51Pag. / 67

Ongebalanceerde boom

Informatica II: les 8

𝑎𝑎𝑛𝑡𝑎𝑙𝑍𝑜𝑒𝑘𝑠𝑡𝑎𝑝𝑝𝑒𝑛 = log4 𝑛 𝑎𝑎𝑛𝑡𝑎𝑙𝑍𝑜𝑒𝑘𝑠𝑡𝑎𝑝𝑝𝑒𝑛 = log1.33 𝑛

Gemiddelde is slechter dan log2 𝑛!

Page 51: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 52Pag. / 67

Zoektijd

𝐥𝐨𝐠𝟐 𝒏 𝐥𝐨𝐠𝟒 𝒏 𝐥𝐨𝐠𝟏.𝟑𝟑 𝒏 𝒏/𝟐10 3,3 1,7 8,1 5

100 6,6 3,3 16,1 501000 10,0 5,0 24,2 500

10000 13,3 6,6 32,3 50001000000 19,9 10,0 48,4 5000001000000 19,9 10,0 48,4 500000

10000000 23,3 11,6 56,5 5000000100000000 26,6 13,3 64,6 50000000

1000000000 29,9 14,9 72,7 500000000

Informatica II: les 8

/2

*2,433

Page 52: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 53Pag. / 67

Verschil in zoektijd

Eigenschap logaritmes :

Verschil in aantal stappen:

Besluit: logaritmisch << lineair

𝑠𝑡𝑎𝑝𝑝𝑒𝑛𝑅𝑎𝑡𝑖𝑜 =log𝑑 𝑛

log2 𝑛=

1

log2 𝑑

𝑠𝑡𝑎𝑝𝑝𝑒𝑛𝑅𝑎𝑡𝑖𝑜 =1

log2 1.33=

1

0.411= 2.43

𝑠𝑡𝑎𝑝𝑝𝑒𝑛𝑅𝑎𝑡𝑖𝑜 =1

log2 4= 1/2

log𝑑 𝑛 =log2 𝑛

log2 𝑑

2 t.o.v. 1.333

2 t.o.v. 4

Verandering van basis

Informatica II: les 8

Page 53: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 54Pag. / 67

Ongebalanceerde boom 2

Vast aantal (k-1) nodes links, de rest rechts

Rechterboom heeft n/k => n/2k stappen

Totaal n/2k + log(k – 1) ≈ n/2k

Informatica II: les 8

lineair

k << n

p. 102

Page 54: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 55Pag. / 67

3. Verwijderen van element

Informatica II: les 8

4 mogelijkheden:

Element is root

Element is niet in boom

Element heeft 0 of 1 subboom

Element heeft 2 subbomen

p. 102

3

2 6

1 4

5

7

3 mogelijke situaties :a) 2 subbomen:

3, 6b) 0 of 1 subboom:

1, 2, 4, 5, 7c) niet aanwezig:

0, 8, …

Page 55: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 56Pag. / 67

4e geval: promoten van node

Informatica II: les 8

2 6

1 4

5

7

2 6

1 4

5

7

Meest linkse van rechtersubboom

Meest rechtse van linkersubboom

Page 56: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 57Pag. / 67Informatica II: les 8

public boolean remove(T object){

if (comparator.compare(root.data, object)== 0){

root = createSubtree(root);

return true;

} else

return findNodeAndRemove(root, object);

}

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.right = createSubtree(current.right);

return true;

} else if (comparator.compare(current.data, object) < 0)

return findNodeAndRemove(current.left, object);

else

return findNodeAndRemove(current.right, object);

}

Page 57: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Informatica II: les 8

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;

}

}

}

Page 58: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Informatica II: les 8

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;

}

}

Page 59: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 60Pag. / 67

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+", ");

}

} Informatica II: les 8

{a, c, e, f, g, i, k, l, q, r, x, z}

{k, g, a, e, c, f, i, l, x, q, r, z}

{c, f, e, a, i, g, r, q, z, x, l, k}

p. 105

Op boom van p.96

Page 60: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 61Pag. / 67

Boom van p.96

Informatica II: les 8

Page 61: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 62Pag. / 67

Toepassingen

preOrder: backtracking

Is de node de oplossing?

Indien niet, zoek eerst links en daarna rechts

inOrder: in volgorde afgaan van alle elementen

Informatica II: les 8

Page 62: Parallel Systems Introductionparallel.vub.ac.be/education/java/theorie/java HOC 8 - 2015.pdf · moet handig en efficiënt zijn, geschikt voor de taak Informatica II: les 8 High-level

Jan Lemeire 63Pag. / 67

Toepassing postorder

Informatica II: les 8

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;

}

p. 106