29 november 2012 Hashing. Een tijd-ruimte afweging Hashfuncties
|
|
- Wouter van der Berg
- 8 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Hashing Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 november 2012 ODE/FHTBM Hashing 29 november /30 Hashing Een typisch gebruik van de implementatie van hashing zijn dictionairs. Elke dictionair bestaat uit een lijst van sleutel die aan een of meerdere (!) objecten gerelateerd zijn. Hashing is een uitbreiding van zoeken op index-sleutel en gaat verder dan de standaard zoektoepassingen. Het resultaat is wezenlijk verschillend voor de manier waarop gezocht wordt [en kan daarom onafhankelijk daarvan bekeken worden]. ODE/FHTBM Hashing 29 november /30 Hashing 2 Hashing is: direct naar elementen verwijzen via rekenkundige operaties. Se zullen diverse technieken beschouwen: Separate Chaining Double Hashing Deze rekenkundige bewerkingen worden door zogenaamde hashfuncties geïmplementeerd. ODE/FHTBM Hashing 29 november /30 1
2 Basis idee Zoekalgoritmen, die hashing gebruiken bestaan uit twee gescheiden delen. 1 Berekenen van een hashfunctie die de zoeksleutel omzet in een tabeladres, en een 2 Methode om botsingen te verwerken voor deze sleutel. De hashfunctie beeldt de sleutel af op een positie in een hashtabel. In het ideale geval: a Direct Access Table: (An array!?) 1 Als item i een sleutel k heeft en h(x) een hashfunctie is, wordt i op positie h(k) van de tabel afgebeeld. 2 Hier geen collisions. 3 Om te zoeken naar i berekenen we h(k) waarmee de positie gevonden kan worden. Als er geen element bestaat, zit die ook niet in de dictionary. ODE/FHTBM Hashing 29 november /30 Voorbeeld: dictionair met studentgegevens De sleutels zijn de studentnummers (ID s) ( ) niet meer dan 1001 studenten Hashfunctie: h(k) = k beeldt de ID s van de studenten af op een bepaalde tabelpositie in het bereik array table[1000] [0] [1] [2] [3] [1000] buckets ODE/FHTBM Hashing 29 november /30 Voorbeeld: Dictionair met studentgegevens (2) In het gegeven voorbeeld zien we dat we O(N) tijd nodig hebben om de hashtabel te initialiseren (N is het aantal posities of buckets in de hashtabel) en O(1) tijd om toevoegen en zoeken uit te voeren. Het ideale geval is onrealistisch. Voor de implementering van een dictionair werkt het, maar een sleutelbereik kan te groot zijn voor een 1-1 afbeelding op de buckets! Voorbeeld: neem aan dat een sleutel een waarde kan hebben in (2-byte unsigned integer) Accepteer ongeveer 1000 records op een willekeurig moment. Een hashtabel met (>> 1000) posities is erg onhandig. ODE/FHTBM Hashing 29 november /30 2
3 Een tijd-ruimte(opslag) afweging Hashing is een goed voorbeeld van een afweging tussen looptijd en opslagruimte. Bekijken we eens de volgende extrema aan: 1 Als er onbeperkt geheugencapaciteit was, konden we elke willekeurige zoekopdracht met een enkele geheugenbewerking doen. De benodigde hoeveelheid geheugen kan ontoereikend zijn als de sleutels te lang zijn. 2 Als er geen tijdslimiet was, konden we met een minimum aan geheugenruimte werken, door een sequentiële zoekmethode te gebruiken. ODE/FHTBM Hashing 29 november /30 Een tijd-ruimte(opslag) afweging (2) Hashing maakt een balancering tussen geheugen en tijd mogelijk doordat van beide een bepaalde hoeveelheid nodig is. We kunnen een evenwicht bereiken doordat we de tabelgrootte aanpassen zonder de code te herschrijven of andere algoritmne toe te passen. We ondersteunen de belangrijke operaties search en insert. Gemiddeld verbruiken beide operaties search en insert constante tijd. In worst case is de tijd evenredig aan de verzameling operaties, die door de datastructuur (bijv. arrays) wordt vastgelegd. Hashing biedt geen efficiente implementaties voor andere symbooltabel-operaties zoals select of sort ODE/FHTBM Hashing 29 november /30 Keren we naar ons voorbeeld terug. Als het sleutelbereik te groot is, moeten we een hashtabel nemen met minder posities (buckets) en een hashfunctie die meerdere sleutels op dezelfde positie afbeeldt. h(k 1 ) = β = h(k 2 ) : voor k 1 en k 2 is er een collision bij positie β. Populaire hash-functies gebruiken: hashing by division (hashing door deling) h(k) = k%m; waarin M het aantal posities in de Hash-Tabelle is. ODE/FHTBM Hashing 29 november /30 3
4 Voorbeeld Voorbeeld: hashtabel met 11 posities h(k) = k% (80% 11 = 3) collision! ODE/FHTBM Hashing 29 november /30 String sleutels Tot nu toe hebben we met numerieke sleutels gewerkt. Java implementaties worden gerealiseerd via hashfuncties voor string sleutels. De sleutel wordt berekend via vermenigvuldigingen en optellingen per karakter in de sleutel. Methode von Horner mit umgesetzt in Array-Index: int hash ( String s, int M) { int h = 0, R = 127; for ( int i = 0; i < s. length (); i ++) h = (R*h + s. charat (i)) % M; return h; ODE/FHTBM Hashing 29 november /30 Voorbeeld We kunnen de hashfunctie berekenen voor: averylongkey Een 7-bit ASCII-code levert voor deze tekst: Een 84-bit getal! Het programma gebruikt 127 inplaats van 128 voor betere randomverdeelde sleutelwaarden. Als bijvoorbeeld M = 64, zou meermaals 128 erbij optellen leiden tot veel identieke sleutelwaarden. Als men pseudo-random coëfficiënten gebruikt heet de methode Universal Hashing. Zie hashu methode on next slide. ODE/FHTBM Hashing 29 november /30 4
5 Universal hash function (for string keys) static int hashu ( String s, int M) { int h = 0, r1 = 31415, r2 = 27183; for ( int i =0; i < s. length (); i ++) { h = (r1*h + s. charat (i)) % M; r1 = r1*r2 % (M -1); return h; Deze aanpak zorget er voor dat de kans op een collison tussen twee identieke sleutels gelijk aan 1 M is. ODE/FHTBM Hashing 29 november /30 Universal hash function (for string keys) (2) In de hashu methode is een effectievere benadering geimplementeerd, gebruik (pseudo) random waarden voor de coefficienten in de berekening, en een andere random waarde voor elke positie in de sleutel. Deze procedure geeft een random-algoritme dat universal hashing wordt genoemd. ODE/FHTBM Hashing 29 november /30 Implementatie voor zelfgedifieerd type public class Transaction { private final String who ; private final Date when ; private final double amount ; public int hashcode () { int hash = 17; hash = 31+ hash + who. hashcode (); hash = 31* hash + when. hashcode (); hash = 31* hash + (( Double ) amount ). hashcode (); return hash ; ODE/FHTBM Hashing 29 november /30 5
6 Drie primaire voorwaarden voor een goede hash Ze moet consistent zijn: gelijke sluetels moeten dezelfde hashwaarde krijgen. Het moet efficient te berekenen zijn. De sleutels moeten uniform verdeeld zijn. Een slechte hash-functie is een klassiek voorbeeld van een performance bug. ODE/FHTBM Hashing 29 november /30 De collison-afhandeling beinvloedt de keuze voor de hashfunctie. We onderscheiden twee verschillende hashing-typen 1 Open hashing, (separate chaining) 2 Gesloten hashing (closed hashing) De verschillen zijn collisions opgeslagen worden buiten de tabel (open hashing) of dat collisions ervoor zorgen dat een deel van de data op een andere positie in de tabel opgeslagen wordt (gesloten hashing). ODE/FHTBM Hashing 29 november /30 Rehash-strategie: Linear-probing Finde ein leeres bucket Aanname J: De hashfuncties die we gebruiken verdelen de sleutels uniform en onafhankelijk. Bij closed-hashing hoort een rehash-strategie: als we proberen x in positie h(x) onder te brengen die reeds bezet is, zoeken we alternatieve plaatsen h1(x), h2(x), enz. Als er geen lege plaats gevonden wordt is de tabel vol. h(x) heet home bucket. De eenvoudigste Rehash-strategie heet Linear Hashing of (lineair proberen) h i (x) = (h(x) + i)%m Onze collison oplossings-strategie is zodanig dat we een reeks van posities (probe sequence) in de hashtabel genereren die de data kan opnemen. Dan testen we elke bucket totdat we een lege vinden (probing). ODE/FHTBM Hashing 29 november /30 6
7 Voorbeeld: M = 8, de sleutels a, b, c, d hebben de hashwaarden: h(a) = 3, h(b) = 0, h(c) = 4 en werden al toegevoegd. Waar voegen we d met h(d) = 3 in? Bucket 3 is al gevuld. Die Probeer-reeks bij lineair hashing is h 1 (d) = (h(d) + 1)%8 = 4%8 = 4 h 2 (d) = (h(d) + 2)%8 = 5%8 = 5 h 3 (d) = (h(d) + 3)%8 = 6%8 = 6 etc. 7, 0, 1, 2 Loopt over naar begin van de tabel! ODE/FHTBM Hashing 29 november /30 Resultaat van linair probing in voorbeeld lineair hashing [0] [1] [2] [3] [4] [5] [6] [7] b a c d ODE/FHTBM Hashing 29 november /30 Nog een voorbeeld: Linear probing Wat gebeurt als het volgende item home-bucket 0 heeft? Er zijn enkele elementen met home-bucket 1 of 2. Het record komt op positie 3. Netzo worden records op 7 of 8 of 9 hashen uiteindelijk in 10 terecht komen. Records met hashing op 4 worden in 4 geplaatst; datzelfde geldt voor 5 en bij home-bucket 7 invoegen (1052%11 = 7) Het volgende element wordt op positie 3 geplaatst. ODE/FHTBM Hashing 29 november /30 7
8 Nog een voorbeeld: Linear probing (2) [0] [0] [1] 9537 [1] [2] 3016 [2] [3] [3] [4] [4] [5] [5] [6] [6] [7] 9874 [7] [8] 2009 [8] [9] 9875 [9] [10] [10] ODE/FHTBM Hashing 29 november /30 Voorbeeld items : A S E R C H I N G X M P hashcode : A S A S A E S A E R S A C E R S H A C E R S H A C E R I S H A C E R I N G S H A C E R I N G X S H A C E R I N G X M S H A C E R I N G X M S H P A C E R I N ODE/FHTBM Hashing 29 november /30 Implementatie voor Lineair Probing Algorithm 3.6 public class LinearProbingHashST <Key, Value > { private int N; // number of key - value pairs in the symbol table private int M = 16; // size of linear probing table private Key [] keys ; // the keys private Value [] vals ; // the values public LinearProbingHashST () { keys = ( Key []) new Object [M]; vals = ( Value []) new Object [M]; private int hash ( Key key ) { return ( key. hashcode () & 0 x7fffffff ) % M; public void put ( Key key, Value val ) { if ( val == null ) delete ( key ); if (N >= M /2) resize (2* M); int i; for (i = hash ( key ); keys [i]!= null ; i = (i + 1) % M) { if ( keys [i]. equals ( key )) { vals [i] = val ; return ; keys [i] = key ; vals [i] = val ; N ++; public Value get ( Key key ) { for ( int i = hash ( key ); keys [i]!= null ; i = (i + 1) % M) if ( keys [i]. equals ( key )) return vals [i]; return null ; ODE/FHTBM Hashing 29 november /30 8
9 Operaties en lineaire probing: verwijderen Bekijk zoeken van een item: test h(k), h 1 (k), h 2 (k),..., totdat k of een lege positie of een home bucket vinden Als niets kan worden verwijderd functioneert de strategie! Wat gebeurt er als er moet worden verwijderd? Als we een lege bucket bereiken, kunnen we er niet zeker van zijn dat k niet ergens anders is en de lege bucket bezet was toen k ingevoegd werd. We hebben een speciale plaatshouder gewist nodig, om een bucket dat nooit werd gebruikt te kunnen onderscheiden van een die ooit een waarde bevatte. We moeten de hashtabel waarschijnlijk reorganiseren nadat er veel verwijderingen hebben plaatsgevonden. ODE/FHTBM Hashing 29 november /30 Verwijderen bij linear probing (LinearProbingHashST.java) public void delete ( Key key ) { if (! contains (key )) return ; int i = hash ( key ); while (! key. equals ( keys [i ])) { i = (i + 1) % M; keys [i] = null ; vals [i] = null ; i = (i + 1) % M; while ( keys [i]!= null ) { Key keytorehash = keys [i]; Value valtorehash = vals [i]; keys [i] = null ; vals [i] = null ; N - -; put ( keytorehash, valtorehash ); i = (i + 1) % M; N - -; if (N > 0 && N <= M /8) resize (M /2); ODE/FHTBM Hashing 29 november /30 Analyse voor linear probing Inititalisatie: O(M), waar M het aantal buckets is Invoegen en zoeken: O(N), waarbij N het aantal elementen (of items) in de tabel is; alle N sleutelwaarden hebben dezelfde home bucket Voor het onderhoud van een woordenboek is er niets beter dan een lineaire lijst! ODE/FHTBM Hashing 29 november /30 9
10 Prestatieanalyse voor het gemiddelde geval De gemiddelde kosten van linear probing hangt af van de wijze waarop items clusteren in samenhangende groepen van bezette tablecellen bij het invoegen. We verwachten dat de kosten voor hashing een functie is van de mate waarin de tabel gevuld is: DEF: lastfactor α = N/M GHemiddelde kosten met aanname J van linear-probing: Definition (Propostion M.) Aantal probes voor geslaagde zoekactie: 1 2 ( α ) Aantal probes voor gefaalde zoekactie: 1 2 (1 + 1 (1 α) 2 ) Ondezoek de grenswaarden α = 0 en α = 1. ODE/FHTBM Hashing 29 november /30 Meerdere probing benaderingen Lineare Probing h i (x) = (h(x) + i)%m Alle buckets in de tabel zijn kandidaten voor invoegen van een nieuw record voordat de probe sequence naar de home positie terugkeert. Clustering van records leidt tot lange probeerreeksen Lineaire probing met overslaan h i (x) = (h(x) + i c)%m c is een constante ( 1) Records met dezelfde home-bucket volgen niet dezelfde probeerreeks (Pseudo-)random probing h i (x) = (h(x) + r i )%M r i is de i-de waarde in een toevals-permutatie van getallen 1 tot M 1; zie Universal Hashing. Invoegen en zoeken gebruiken dezelfde reeks van random getallen. ODE/FHTBM Hashing 29 november /30 Een ander soort verbetering: double hashing We gebruiken twee hashing-methoden: dubbele hashing (double hashing). Om clustering te vermijden: groepsvorming van gevulde cellen. void insert ( Item x) { Key key = x. getkey (); int i = hash (key, M); int k = hashtwo ( key ); while ( storage [i]!= null ) { i = (i+k) % M; storage [i] = x; N ++; // item stored Item search ( Key key ) { int i = hash (key, M); int k = hashtwo ( key ); while ( storage [i]!= null ) if ( equals (key, storage [i]. getkey ())) { return storage [i]; // item found else { i = (i+k) % M; return null ; ODE/FHTBM Hashing 29 november /30 10
Datastructuren en algoritmen voor CKI
Datastructuren en algoritmen voor CKI Jeroen Bransen 1 2 oktober 2015 1 met dank aan Hans Bodlaender en Gerard Tel Priority queue Priority queue ADT insert(q, x): voeg element x toe aan de queue maximum(q):
Nadere informatieElementary Data Structures 3
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
Nadere informatieOpgaven Hash Tabellen Datastructuren, 15 juni 2018, Werkgroep.
Opgaven Hash Tabellen Datastructuren, 15 juni 2018, Werkgroep. Gebruik deze opgaven, naast die uit het boek, om de stof te oefenen op het werkcollege. Cijfer: Op een toets krijg je meestal zes tot acht
Nadere informatieHutscodering. De techniek: illustratie. een tabel met 7 plaatsen, genummerd van 0 tot en met 6.
Hutscodering die leeg kunnen zijn, tabel T: abstract stockage middel met plaatsen elementen vd. vorm (K, I) K is de sleutel (of key) en I bijhorende informatie creatie van een lege tabel; een nieuw element
Nadere informatieDatastructures. Opdracht 3
Datastructures Opdracht 3 Naam Jeffrey van der Lingen Kevin Huijzendveld Joshua Turpijn Klas IS205 Vak Datastructures Datum 06/11/2016 Inhoudsopgave Inleiding... 3 1. Hashfunctie... 4 1.1 Inleiding...
Nadere informatieHoofdstuk 9. Hashing
Hoofdstuk 9 Hashing Het zoeken in een verzameling van één object is in deze cursus al verschillende malen aan bod gekomen. In hoofdstuk 2 werd uitgelegd hoe men een object kan zoeken in een array die veel
Nadere informatieExamen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief
Nadere informatieUniversiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren
Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int
Nadere informatieTree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011
15 november 2011 Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree
Nadere informatieTweede Toets Datastructuren 26 juni 2019, , Educ-β.
Tweede Toets Datastructuren 26 juni 2019, 17.00 19.00, Educ-β. Motiveer je antwoorden kort! Stel geen vragen over deze toets; als je een vraag niet duidelijk vindt, schrijf dan op hoe je de vraag interpreteert
Nadere informatieDatastructuren Uitwerking jan
Datastructuren Uitwerking jan 2015 1 1a. Een abstracte datastructuur is een beschrijving van een datastructuur, met de specificatie van wat er opgeslagen wordt (de data en hun structuur) en welke operaties
Nadere informatieTree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen
Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree traversal 15 november
Nadere informatieLessen Java: Reeks pag. 1
Lessen Java: Reeks 2 1-3-2016 pag. 1 Primitieve types type grootte waardes byte 8 bits 128, 127 short 16 bits 32768, 32767 int 32 bits 2 31, 2 31 1 long 64 bits 2 63, 2 63 1 type grootte waardes float
Nadere informatieLineaire data structuren. Doorlopen van een lijst
Lineaire data structuren array: vast aantal data items die aaneensluitend gestockeerd zijn de elementen zijn bereikbaar via een index lijst: een aantal individuele elementen die met elkaar gelinkt zijn
Nadere informatieExamen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2010-2011 21 juni 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief
Nadere informatieProgrammeren in C++ Efficiënte zoekfunctie in een boek
Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in
Nadere informatieO(1) ZOEKMETHODEN: HASH TECHNIEKEN. Dr. D.P. Huijsmans 24 okt 2012 Universiteit Leiden LIACS
O(1) ZOEKMETHODEN: HASH TECHNIEKEN 1 Dr. D.P. Huijsmans 24 okt 2012 Universiteit Leiden LIACS SNEL ZOEKEN IN ONGESORTEERDE DATA Vroege computer toepassingen waren vaak gebaseerd op grote gesorteerde bestanden;
Nadere informatieVakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be
Nadere informatieO(1) ZOEKMETHODEN: HASH TECHNIEKEN. Dr. D.P. Huijsmans College 7 16 okt 2013 Universiteit Leiden LIACS
O(1) ZOEKMETHODEN: HASH TECHNIEKEN 1 Dr. D.P. Huijsmans College 7 16 okt 2013 Universiteit Leiden LIACS SNEL ZOEKEN IN ONGESORTEERDE DATA Vroege computer toepassingen waren vaak gebaseerd op grote gesorteerde
Nadere informatieGenetische algoritmen in Java met JGAP
Genetische algoritmen in Java met JGAP Inleiding JGAP, uitgesproken als "jee-gep", is een framework voor het implementeren van genetische algoritmen en het gebruik ervan in Java. Genetische algoritmen
Nadere informatiepublic boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber
Tentamen TI1310 Datastructuren en Algoritmen, 15 april 2011, 9.00-12.00 TU Delft, Faculteit EWI, Basiseenheid Software Engineering Bij het tentamen mag alleen de boeken van Goodrich en Tamassia worden
Nadere informatieStacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49
Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen
Nadere informatieKwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();
Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static
Nadere informatieDergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.
Indexers in C#.Net In deze tutorial ga ik het hebben over indexers. Bij het gebruik van bijvoorbeeld een ArrayList object, kan je de gegevens uit deze collectie opvragen als ware het een array. // ArrayList
Nadere informatie12 september 2012 Complexiteit. Analyse van algoritmen (doelen) Empirische analyse : Voorbeeld Gevolgen
Complexiteit van Algoritmen Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 12 september 2012 ODE/FHTBM Complexiteit van Algoritmen 12 september 2012 1/41 Efficientie-analyse
Nadere informatieCS 202 Fundamental Structures of Computer Science II Bilkent University Computer Engineering Department
Hashing CS 202 Fundamental Structures of Computer Science II Bilkent University Computer Engineering Department Bilkent University 1 Hashing We will now see a data structure that will allow the following
Nadere informatieIngebouwde klassen & methodes
Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private
Nadere informatieSyntax- (compile), runtime- en logische fouten Binaire operatoren
Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle
Nadere informatieDatastructuren en Algoritmen
Datastructuren en Algoritmen Tentamen Vrijdag 6 november 2015 13.30-16.30 Toelichting Bij dit tentamen mag je gebruik maken van een spiekbriefje van maximaal 2 kantjes. Verder mogen er geen hulpmiddelen
Nadere informatieVoortgezet Prog. voor KI
Voortgezet Prog. voor KI Docent: Michael Wilkinson IWI 142 tel. 050-3638140 (secr. 3633939) Frank Brokken RC 352 tel. 050-3633688 Voorkennis: Inleiding Programmeren voor KI (nieuwe stijl) Stof: Practicum
Nadere informatieZevende college algoritmiek. 24 maart Verdeel en Heers
Zevende college algoritmiek 24 maart 2016 Verdeel en Heers 1 Verdeel en heers 1 Divide and Conquer 1. Verdeel een instantie van het probleem in twee (of meer) kleinere instanties 2. Los de kleinere instanties
Nadere informatieDatastructuren: stapels, rijen en binaire bomen
Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)
Nadere informatiehttp://www.liacs.nl/home/kosters/java/
sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/
Nadere informatieProgrammeren 1 20 januari 2012 Prof. T. Schrijvers
Programmeren 1 20 januari 2012 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet
Nadere informatieDivide & Conquer: Verdeel en Heers vervolg. Algoritmiek
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek Algoritmische technieken Vorige keer: Divide and conquer techniek Aantal toepassingen van de techniek Analyse met Master theorem en substitutie Vandaag:
Nadere informatieProgrammeermethoden NA. Week 6: Lijsten
Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal
Nadere informatieZevende college algoritmiek. 23/24 maart Verdeel en Heers
Zevende college algoritmiek 23/24 maart 2017 Verdeel en Heers 1 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht 0 1 2 3 0 1 2 3 4 1 2 3 4 5 2 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht
Nadere informatie4EE11 Project Programmeren voor W. College 3, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e
4EE11 Project Programmeren voor W College 3, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 1 Onderwerpen Grotere programma s ontwerpen/maken Datastructuren en algoritmes 2 Evolutie,
Nadere informatieProgrammeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/
Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun
Nadere informatieZoek- en sorteeralgoritmen en hashing
Zoek- en sorteeralgoritmen en hashing Femke Berendsen (3689301) en Merel van Schieveen (3510190) 9 april 2013 1 Inhoudsopgave 1 Inleiding 3 2 Zoek- en sorteeralgoritmen 3 2.1 Grote O notatie..........................
Nadere informatieZevende college Algoritmiek. 6 april Verdeel en Heers
Zevende college Algoritmiek 6 april 2018 Verdeel en Heers 1 Algoritmiek 2018/Backtracking Programmeeropdracht 2 Puzzel 2: D O N A L D G E R A L D + R O B E R T Elke letter stelt een cijfer voor (0,1,...,9)
Nadere informatieInleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Nadere informatieDynamisch Programmeren. Het Rugzakprobleem
INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding................................................. 1 1 Oplossing................................................ 2 2 Subprobleem.............................................
Nadere informatieZelftest Inleiding Programmeren
Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze
Nadere informatieKleine cursus PHP5. Auteur: Raymond Moesker
Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven
Nadere informatieDatatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
Nadere informatieIMP Uitwerking week 13
IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het
Nadere informatieVoorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten
Nadere informatieUitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf
Nadere informatieProgrammeermethoden NA
Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder
Nadere informatieVerslag Opdracht 4: Magische Vierkanten
Verslag Opdracht 4: Magische Vierkanten Stefan Schrama, Evert Mouw, Universiteit Leiden 2007-08-14 Inhoudsopgave 1 Inleiding 2 2 Uitleg probleem 2 3 Theorie 2 4 Aanpak 2 5 Implementatie 4 6 Experimenten
Nadere informatieInleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Nadere informatieExamen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.
Nadere informatieRecursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40
Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N
Nadere informatieTentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Nadere informatieJava Programma structuur
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,
Nadere informatieTentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft
I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan
Nadere informatieProgrammeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/
Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,
Nadere informatieDatastructuren en algoritmen voor CKI
Datastructuren en algoritmen voor CKI Jeroen Bransen 1 30 september 2015 1 met dank aan Hans Bodlaender en Gerard Tel Dynamische verzamelingen Stack implementaties Array met maximale grootte Linked List
Nadere informatieTweede Toets Datastructuren 27 juni 2018, , Olympos Hal 2.
Tweede Toets Datastructuren 27 juni 2018, 13.30 15.30, Olympos Hal 2. Motiveer je antwoorden kort! Stel geen vragen over deze toets; als je een vraag niet duidelijk vindt, schrijf dan op hoe je de vraag
Nadere informatieis eigenlijk overbodig!
Array Declaratie Creatie Opvragen Wijzigen Lengte is eigenlijk overbodig! array: oject dat een rij waarden bevat, met speciale notaties Invoegen Achtervoegen String [ ] a; a = new String[10]; a[5] a[5]
Nadere informatieSQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database.
SQL manipulatietaal We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database. Basiscommando's: INSERT : toevoegen van gegevens DELETE : verwijderen van gegevens UPDATE : wijzigen van gegevens
Nadere informatieTentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.
Nadere informatieAchtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren
Achtste college algoritmiek 12 april 2019 Verdeel en Heers Dynamisch Programmeren 1 Uit college 7: Partitie Partitie Partitie(A[l r]) :: // partitioneert een (sub)array, met A[l] als spil (pivot) p :=
Nadere informatieStacks and queues. Hoofdstuk 6
Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked
Nadere informatieVAN HET PROGRAMMEREN. Inleiding
OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,
Nadere informatieJavascript oefenblad 1
Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de
Nadere informatieInleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord, Leonie Bosveld 12 december 2016 Zelle hoofdstuk 10 Stof Overzicht - theorie 1. Zelle hoofdstuk 4 en 5 2. Zelle hoofdstuk 7 en 8, recursie, Brookshear hoofdstuk
Nadere informatieTentamen Imperatief Programmeren
Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven
Nadere informatieTentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale
Nadere informatieBouwstenen voor PSE. Datatypes en Datastructuren
Bouwstenen voor PSE Datatypes en Datastructuren Definitie Datatype Klasse van dataobjecten tesamen met operaties om ze te construeren, te manipuleren en te verwijderen. Een datatype omvat een specificatie
Nadere informatieSparse columns in SQL server 2008
Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG
Nadere informatieREEKS I. Zaterdag 6 november 2010, 9u
TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS I Zaterdag 6 november 2010, 9u NAAM :... VRAAG 1: MINSTENS [5 PUNTEN] Schrijf een methode minstens(), met twee
Nadere informatieProgrammeermethoden. Recursie. week 11: november kosterswa/pm/
Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,
Nadere informatieOefeningen Java Oplossingen
Oefeningen Java en Opgave 1 Is de uitvoer van het volgende code-fragment (a), (b) of (c)? System.out.print("A"); System.out.println("B"); System.out.print("C\n"); System.out.print("D" + "E"); System.out.print("F");
Nadere informatieOpgaven Abstracte Datastructuren Datastructuren, Werkgroep, 31 mei 2017.
Opgaven Abstracte Datastructuren Datastructuren, Werkgroep, 31 mei 2017. Gebruik deze opgaven, naast die uit het boek, om de stof te oefenen op het werkcollege. Cijfer: Op een toets krijg je meestal zes
Nadere informatieProgrammeren met Arduino-software
Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en
Nadere informatieDeel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,
Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt
Nadere informatievoegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is
PROEF-Tentamen Inleiding programmeren (IN1608WI), X januari 2010, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Open boek tentamen: bij het tentamen mag alleen gebruik worden gemaakt
Nadere informatieTentamen Objectgeorienteerd Programmeren
Tentamen Objectgeorienteerd Programmeren 5082IMOP6Y maandag 16 november 2015 13:00 15:00 Schrijf je naam en studentnummer op de regel hieronder. Sla deze pagina niet om tot de surveillant vertelt dat het
Nadere informatieOm te kijken of x, y, z samen een driehoek specificeren hoeven we alleen nog maar de driehoeksongelijkheid te controleren: x, y, z moeten voldoen
Feedback Software Testing, Opdrachten Week 1 Driehoek-test Deze opdracht is in het algemeen zeer goed uitgevoerd. Algemeen valt in vergelijking met vorig jaar op dat de ingeleverde oplossingen veel minder
Nadere informatieNHibernate als ORM oplossing
NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een
Nadere informatieOvererving & Polymorfisme
Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit
Nadere informatieTentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Gesloten boek examen: er mag geen gebruik worden gemaakt van het studieboek.
Nadere informatieElfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort
Algoritmiek 018/Algoritme van Dijkstra Elfde college algoritmiek 18 mei 018 Algoritme van Dijkstra, Heap, Heapify & Heapsort 1 Algoritmiek 018/Algoritme van Dijkstra Uit college 10: Voorb. -1- A B C D
Nadere informatieSPOJ oplossingen Gilles Callebaut 7 augustus 2015
SPOJ oplossingen 2012-2013 Gilles Callebaut 7 augustus 2015 DISCLAIMER Oefeningen zijn niet altijd correct of optimaal. Gelieve de oefeningen enkel te gebruiken ter ondersteuning. Van kopiëren leer je
Nadere informatieDe volgende opgave gaat over de B-bomen van het college, waar sleutels zowel in de bladeren als ook in de interne knopen opgeslagen worden.
. a) Een Fibonacci boom (niet te verwarren met een Fibonacci queue) van hoogte h is een AVL-boom van hoogte h met zo weinig mogelijk knopen. i. Geefvoorh =,,,,eenfibonacciboomvanhoogteh(eenboombestaande
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));
Nadere informatieJava spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld
Java spiekbrief Commentaar Dient enkel voor de menselijke lezer. // tot het einde van de lijn /* Dit type commentaar kan gerust meerdere lijnen beslaan. */ /** En deze speciale vorm wordt gebruikt voor
Nadere informatieTweede Toets Datastructuren 29 juni 2016, , Educ-Γ.
Tweede Toets Datastructuren 29 juni 2016, 13.30 15.30, Educ-Γ. Motiveer je antwoorden kort! Zet je mobiel uit. Stel geen vragen over deze toets; als je een vraag niet duidelijk vindt, schrijf dan op hoe
Nadere informatieEen typisch programma in C en C++ bestaat uit een aantal onderdelen:
Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde
Nadere informatieEen topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:
Java Les 2 Theorie Beslissingen Algemeen Net als in het dagelijks leven worden in software programma s beslissingen genomen, naast het toekennen van waarden aan variabelen zijn beslissingen één van de
Nadere informatieDatastructuren. Analyse van algoritmen. José Lagerberg. FNWI, UvA. José Lagerberg (FNWI, UvA) Datastructuren 1 / 46
Datastructuren Analyse van algoritmen José Lagerberg FNWI, UvA José Lagerberg (FNWI, UvA) Datastructuren 1 / 46 Datastructuren en Algoritmen Datastructuren, 6 ECTS eerstejaars Bachelor INF Datastructuren,
Nadere informatiepublic boolean egualdates() post: returns true i f f there i f the l i s t contains at least two BirthDay objects with the same daynumber
Tentamen TI1310 Datastructuren en Algoritmen, 15 april 2011, 9.00-12.00 TU Delft, Faculteit EWI, Basiseenheid Software Engineering Bij het tentamen mag alleen de boeken van Goodrich en Tamassia worden
Nadere informatierecursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie
Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk
Nadere informatieTentamen in2705 Software Engineering
Tentamen in2705 Software Engineering Voorbeeld (bijna tweemaal te groot) U mag meenemen naar dit tentamen: Lethbridge, afdrukken PPT slides, afdrukken handouts. 1. De TU wil een nieuw systeem ontwikkelen
Nadere informatie