De doorsnede van twee verzamelingen vinden

Save this PDF as:
 WORD  PNG  TXT  JPG

Maat: px
Weergave met pagina beginnen:

Download "De doorsnede van twee verzamelingen vinden"

Transcriptie

1 De doorsnede van twee verzamelingen vinden Daniel von Asmuth Inleiding Dit artikel probeert enkele algoritmen te vergelijken om de doorsnede van twee verzamelingen of rijen van getallen te vinden. In een rij kunnen elementen meerdere keren voorkomen; we spreken in plaats van sets over bags of multisets de Nederlandse term is me niet bekend die zonder extra moeite verwerkt kunnen worden. I. Naïef: exhaustive search Zet beide verzamelingen in twee rijen (arrays of lists). Loop elk element van verzameling B af om te zien of het eerste element van A daarin voorkomt, doe hetzelfde met het tweede element van A, etc. De meeste besproken algoritmen werken ook voor rijen getallen waarin elementen meer dan eens kunnen voorkomen. Het probleem wordt opgelost in O(n^2) stappen. Vanwege de eenvoud gebruiken we deze methode soms voor kleine verzamelingen. II. Vectoren van bits In de programmeertaal Pascal is het berekenen van de doorsnede of vereniging van twee verzamelingen een ingebouwde bewerking. Deelverzamelingen van een domein worden gerepresenteerd door vectoren van bits: als het i e bit hoog is dan bevat de verzameling dat element. Sorteren is hiermee niet nodig. Voor deelverzamelingen van grote domeinen kost deze methode veel tijd en geheugen, namelijk O(#D), waarin #D de grootte van het domein is. Als we overstappen op vectoren van gehele van gehele getallen dan kunnen we daarmee een eenvoudig sorteeralgoritme vormen. Initialiseer een array A ter grootte van #D met nullen en lees de getallen in: als je een waarde i vindt, dan hoog je A[i] op. Daarna loop je het array af en als A[i] == c dan druk je c keer het getal i af. De rekentijd is in de orde van O(#D + n) stappen, het benodigde geheugen kan onpraktisch zijn als D bijvoorbeeld uit de 32 bits egers bestaat. III. Sorteren Het probleem is gemakkelijker op te lossen wanneer beide verzamelingen gesorteerd zijn; als dat niet het geval is, kunnen we het quicksort sorteeralgoritme aanpassen zodat de doorsnede al tijdens het sorteren wordt gevonden. De programmacode in C is te vinden als listing 1 in de bijlagen. Het belangrijkste onderdeel is de functie partition(), die een deelerval van rij A van index s tot en met m verdeelt in drie delen: van s t/m j komen getallen die kleiner zijn dan de pivot, tussen j en i staan waarden gelijk aan de pivot en van i t/m m waarden groter dan de pivot, waarvoor we een willekeurig element van rij A kiezen.

2 begin i = s j = m eind s Figuur 1 < pivot = pivot j i > pivot m De functie werkt door eerst de delen van het array links van index i en rechts van j af te zoeken naar getallen groter of gelijk aan de pivot en omgekeerd en telkens paren getallen te verwisselen. Daarna worden de linker en rechter delen nog eens afgezocht naar waarden die gelijk zijn aan de pivot. De functie retourneert de grenzen i en j; de gevonden segmenten kunnen leeg zijn. De hoofdfunctie ersect() kiest het midden van rij A als pivot en roept de functie partition() aan voor rij A en B, tenzij de te sorteren deelrij slechts één element lang is. Daarna roept de functie zich recursief aan op de deelrijen kleiner dan respectievelijk groter dan de pivot. De functies report() en report2() drukken de gevonden waarden af. Dit lost het probleem op in O(n.log(n)) stappen; een goede keus als de invoergegevens ongesorteerd zijn. Een nadeel van de aanpassing is dat de rijen na afloop niet volledig gesorteerd zijn, maar daarvoor besparen we iets tijd door af en toe getallen over te slaan. IV. Hashing en radix sort Hashing kan sneller zijn dan sorteren. Daarvoor kiezen het aantal hash buckets bijvoorbeeld op de wortel van #B (als #A > #B) en verdelen de rij A daarover en verdelen de rij B over een even grote hash tabel. Daarna moet je de doorsneden bepalen tussen de inhoud van corresponderende paren buckets, bijvoorbeeld met algoritme III. Als tenminste één van de buckets leeg is, kun je die overslaan. Dit algoritme zal Ω(n) rekenstappen nodig hebben, maar de output is ongesorteerd. Een verwante techniek heet radix sort. Hierin begin je met de invoer te verdelen over een (zes)tiental buckets aan hand van het meest significante (hexadecimale) cijfer. De buckets verdeel je dan één voor één over kleinere buckets aan hand van het tweede cijfer. Na het laatste cijfer houd je groepen over waarin alle getallen gelijk zijn. Hiermee kun je gehele getallen sorteren in O(#D + n) rekentijd. Om doorsneden van twee verzamelingen te vinden, verdelen we ze simultaan over de buckets. Als een bucket A i leeg is, dan kunnen we de bucket B i overslaan. Aan het eind hoeven we alleen van de aantallen getallen in corresponderende buckets telkens de kleinste te nemen. Hiermee is de output netjes gesorteerd. V. Klassiek: twee rijen mergen Als de rijen A en B al gesorteerd zijn, dan kan de doorsnede eenvoudig worden gevonden door telkens de kleinste elementen van beide rijen te vergelijken: als ze gelijk zijn rapporteer je het getal en verwijdert beide elementen, anders verwijder je het kleinste en vergelijkt weer de twee kleinste, enzovoorts. Dit lost het probleem eenvoudig op in O(n) stappen. Voor multisets kan het algoritme iets worden versneld met een array waarin per positie de waarde van het element plus het aantal malen dat ze voorkomt worden opgeslagen. VI. Binaire zoekbomen De representatie met vectoren van bits verspilt geheugen wanneer het domein groot is en de verzamelingen kleiner; in zo'n geval zijn gelinkte lijsten beter, maar binaire bomen zijn sneller

3 te doorzoeken. Omdat het domein bekend is, is het niet nodig om de zoeksleutels expliciet op te slaan; een waarde correspondeert met een vaste positie in de boom. Daardoor zijn wel extra erne knopen benodigd voor getallen die niet in de verzameling voorkomen. In plaats van een bit, gebruiken we een eger veld om te tellen hoe vaak een getal in de verzameling voorkomt. De broncode is te vinden in listing 2. Stelling I. De functie ersect() drukt alle elementen van de doorsnede van boom A en boom B éénmaal af in stijgende volgorde. We geven een synopsis van het bewijs. De functie ersect() bestaat uit niets meer dan een aanroep van ersect_r( tree_a, tree_b, 0, M 1) voor het domein [0..M 1]. A. Als één (deel)verzameling leeg is, dan is de doorsnede van A en B ook leeg. Het if statement zorgt in dat geval dat de functie geen uitvoer produceert. if( node1 == NULL node2 == NULL) B. De bomen zijn zo opgezet dat knopen steeds corresponderen met dezelfde zoeksleutel. De node1 en node2 parameters verwijzen bij de eerste aanroep naar de beide wortels, bij de eerste recursieve aanroep naar diens linker zoon, de tweede recursieve aanroep naar diens rechter zoon. Dus verwijzen de parameters altijd naar de zelfde positie in de bomen. C. Als de doorsnede van de deelbomen, waarvan node1 en node2 de wortels zijn, niet leeg is, dan zorgt het for statement dat de functie de juiste uitvoer produceert als het om twee bladen gaat en geen uitvoer als een erne knoop bij is. for( i = 0; i < min( node1 >count, node2 >count); i++) prf( "Gevonden: \t%05d \n", node_key); D. De ersect_r() functie vergelijkt eerst de linker zonen, dan de knopen node1 en node2 zelf en vervolgens de rechter zonen. ersect_r( node1 >left, node2 >left, lo, node_key 1); for( i = 0; i < min( node1 >count, node2 >count); i++) prf( "Gevonden: \t%05d \n", node_key); ersect_r( node1 >right, node2 >right, node_key + 1, hi E. De ersect_r() functie drukt eerst de doorsnede van de linker deelbomen af, dan van de wortels van de deelbomen en vervolgens van de rechter deelbomen. Dit volgt met structurele inductie op bewering D, samen met de beweringen A, B, en C, die ervoor zorgen dat elk element van de doorsnede precies één keer wordt afgedrukt. F. De ersect_r() functie drukt elementen van de doorsnede op volgorde af. De parameters lo en hi zijn de onder en bovengrenzen van de deelbomen en de wortel deelt dat erval in drie delen, waarvan eerst het erval [0..node_key 1] wordt verwerkt, dan node_key zelf, gevolgd door [node_key+1, hi]. Dit volgt uit de code onder bewering D. node_key = min(max(hi / 2 + lo / 2 + 1, lo), hi); G. Het domein [0..M] wordt zodanig onderverdeeld dat elk element correspondeert met precies één knoop in de zoekboom. Voor erval [0..0] is de sleutel 0 en wordt ersect_r() aangeroepen op de delen [0.. 1] en [2..0]. Dat zijn ongeldige waarden en de NULL test zal die afvangen. Voor erval [0..1] is de sleutel 1 en wordt ersect_r() aangeroepen op de delen [0..0] en [2..0]. Het laatste is ongeldig en wordt door de NULL test afgevangen. Voor erval [0..2] is de sleutel 2 en wordt ersect_r() aangeroepen op de delen [0..1] en [3..2]. Het laatste is ongeldig en wordt door de NULL test afgevangen.

4 Voor erval [3..3] is de sleutel 3 en wordt ersect_r() aangeroepen op de delen [3..2] en [4..3]. Die zijn ongeldig en worden door de NULL test afgevangen. Voor erval [0..3] is de sleutel 2 en wordt ersect_r() aangeroepen op de delen [0..1] en [3..3]. De bewering G klopt dus voor M = 0, 1, 2 en 3; inductie bewijst ze voor alle waarden van M. Stelling II. Een deelverzameling van domein D met e elementen kan worden gerepresenteerd door een binaire boom met ten hoogste 2 e knopen. Als er e bladen zijn en e is een macht van 2, dan heeft de zoekboom e/2 = e 1 erne knopen nodig. In ons geval kunnen erne knopen eveneens elementen van de verzameling representeren. Voor multisets worden alle elementen met dezelfde waarde in 1 knoop opgeslagen en in één rekenstap verwerkt. Stelling III. Algoritme VIII bepaalt de doorsnede van twee verzamelingen in O(A B) rekentijd. Voor stelling I hebben we laten zien dat elk blad en elke erne knoop die nodig is voor een binaire boom van het resultaat één keer verwerkt wordt en in stelling II dat er minder erne knopen dan bladen nodig zijn. Voor elk blad in het resultaat zal ersect_r() tweemaal worden aangeroepen met een NULL parameter. De kosten van de if test vergroten de tijd voor de verwerking van het blad maar weinig, dus is de stelling geldig. Het opbouwen van de zoekboom kost in O(n.log(n)) stappen, maar als de invoer gesorteerd is reduceert dat tot O(n). Eventueel is het mogelijk om het sorteren en opbouwen te combineren. VII. Gesorteerde rijen Hierboven gebruikten we een boom waarin de getalswaarden impliciet uit de locatie volgen, als we daarentegen de locatie van de elementen vastleggen, krijgen we een array; als beide impliciet zijn, komen we uit op de bit vectoren van paragraaf I. De broncode is te vinden in listing 3. Dit algoritme is generieker dan het vorige. De zoeksleutels zijn niet van te voren vastgelegd, zodat geen geheugenruimte aan lege knopen verspild wordt. Het voornaamste verschil met algoritme V is dat de rij niet sequentieel wordt doorlopen, maar telkens wordt opgedeeld in twee delen van gelijke lengte. Als de zoeksleutel voor rij A kleiner is dan die voor rij B, dan kunnen we kleinere waarden dan a key vinden in de linker deelbomen van A en B, maar voor grotere waarden moeten we de rechter deelboom van A vergelijken met de gehele boom B; alleen als beide sleutels aan elkaar gelijk zijn kunnen beide bomen worden opgesplitst. De parameters xmin en xmax worden gebruikt om de zoektocht op tijd te beëindigen. De manier waarop dit erval recursief wordt gesplitst garandeert dat elke sleutelwaarde één keer wordt verwerkt; aanroepen van ersect() met overlappende array indices worden afgevangen door de if statements aan het begin. Die zorgen er tevens voor dat een deelboom van A niet verder wordt afgelopen als de deelboom van B al leeg is en omgekeerd, zodat de rekentijd van dit algoritme eveneens lineair toeneemt met de grootte van de uitvoer. We kunnen beredeneren dat wanneer de sleutels homogeen verdeeld zijn over het domein, de kans dat een deelboom geen deel uitmaakt van de doorsnede wordt gegeven door p g = m n! m n g! 1 m g

5 Hierin is g het aantal sleutels in de deelboom, ongeveer gelijk aan 2 h waarin in h de hoogte is; een blad bevindt zich op hoogte 0, m = #D is de grootte van het sleutel domein en n de grootte van de verzameling. Voor bladen is de kans om te worden overgeslagen groot, maar hoger in de boom wordt ze al snel verwaarloosbaar. Tests met algoritme VI geven aan dat het aantal recursieve aanroepen ongeveer 150 % van de grootte van de verzameling bedraagt, tegen 500 % voor algoritme VII, terwijl ze ongeveer evenveel rekentijd kosten. Een oorzaak ligt in de malloc() functie om geheugen voor de boom te reserveren. Conclusies Met de algoritmen VI en VII uit dit artikel is het mogelijk is het mogelijk om de doorsnede van twee verzamelingen te bepalen zonder alle elementen te testen. Als we zowel het domein als de cardinaliteit van de verzamelingen laten toenemen, neemt de rekentijd recht evenredig toe: de overgeslagen elementen vormen een constante fractie van het totaal. Voor non uniform verdeelde zoeksleutels zal het iets sneller gaan. Bovengenoemde methoden vereisen dat de invoer gesorteerd is; als dat niet het geval is zorgen de algoritmen III en IV en passant voor die sortering. Veel hogere snelheden zijn mogelijk door de algoritmen VI en VII zodanig aan te passen dat de twee recursieve functieaanroepen parallel worden uitgevoerd; door de resultaten tijdelijk op te slaan kunnen ze zonder weer te sorteren op volgorde worden afgedrukt.

6 Bijlagen Listing 1. Rij sorteren en doorsnede bepalen #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 40 #define M 60 #define min(a,b) (((a) < (b))? (a) : (b)) #define max(a,b) (((a) > (b))? (a) : (b)) a[ N]; b[ N]; /* vul rij met willekeurige waarden */ fill_arrays( void) i; srand( time( 0)); a[i] = rand() % M; srand( time( 0) + 1); b[i] = rand() % M; /* druk de rijen af */ pr_arrays() i; for( i = 0; i <= N 1; i++) prf( "\t%05d\t%05d\n", a[i], b[i]); prf( "\n"); /* druk gemeenschappelijke elementen af */ report( pivot, amin, amax, bmin, bmax) i; for( i = 0; i <= min( amax amin, bmax bmin); i++) prf( "%05d\n", pivot); /* tel gemeenschappelijke elementen */ report2( pivot, amin, amax, bmin, bmax) ac = 0; bc = 0; i; for( i = amin; i <= amax; i++) if( a[i] == pivot) ac++; for( i = bmin; i <= bmax; i++) if( b[i] == pivot) bc++; report( pivot, 1, ac, 1, bc);

7 /* verwissel twee getallen */ swap( *a, *b) c; c = *a; *a = *b; *b = c; /* rangschik de waarden tussen s en m door de waarde te vergelijken met pivot*/ partition( *a, pivot, s, m, *i, *j) g; /* eerst verwisselen we elementen groter en kleiner dan of gelijk aan de pivot */ *i = s; *j = m; while( *i < *j) for( ; *i <= m; (*i)++) if( a[*i] >= pivot) break; *i = min( *i, m); for( ; *j >= s; (*j) ) if( a[*j] <= pivot) break; *j = max( *j, s); if( *i < *j) swap( a + *i, a + *j); (*i)++; (*j) ; swap( i, j); while( *j >= *i && a[*j] >= pivot) (*j) ; while( *i <= *j && a[*i] <= pivot) (*i)++; /* daarna zoeken we elementen gelijk aan de pivot */ for( g = *j; g >= s; g ) if( a[g] == pivot) swap( a + g, a + *j); (*j) ; for( g = *i; g <= m; g++) if( a[g] == pivot) swap( a + g, a + *i); (*i)++; /* corrigeer de grenzen nog eens, bijv. voor lege ervallen */ while( *j >= s && a[*j] >= pivot) (*j) ; while( *i <= m && a[*i] <= pivot) (*i)++; /* Bepaal de doorsnede van deelrijen A en B tussen Amin en Amax, Bmin en Bmax */ ersect( *a, amin, amax, *b, bmin, bmax) f, ai, aj, bi, bj; pivot; /* test of de deelrijen nul of een elementen bevatten */ if (amin > amax bmin > bmax) if (amin == amax) report2( a[amin], amin, amax, bmin, bmax); else

8 if( bmin == bmax) report2( b[bmin], amin, amax, bmin, bmax); /* bepaal de pivot en partitioneer de arrays */ f = (amin + amax) / 2; pivot = a[f]; if( amin < amax) partition( a, pivot, amin, amax, &ai, &aj); else ai = aj = amin; if( bmin < bmax) partition( b, pivot, bmin, bmax, &bi, &bj); else bi = bj = bmin; /* druk gevonden waarden af en doorzoek deelrijen kleiner en groter dan pivot */ ersect( a, amin, aj, b, bmin, bj); report( pivot, aj+1, ai 1, bj+1, bi 1); ersect( a, ai, amax, b, bi, bmax); main( argc, char **argv) fill_arrays(); pr_arrays(); ersect( a, 0, N 1, b, 0, N 1); exit( 0); Listing 2. Doorsnede van twee binaire bomen #include <stdio.h> #include <stdlib.h> #include <std.h> #include <time.h> #define min(a,b) (((a) < (b))? (a) : (b)) #define max(a,b) (((a) > (b))? (a) : (b)) #define N 30 /* aantal elementen in verzameling */ #define M 100 /* maximum waarde van een element */ a[ N]; /* tijdelijke opslag voor getalswaarden */ b[ N]; typedef struct node count; /* hoevaak de waarde voorkomt */ struct node *left; /* wijzer naar kleinere elementen */ struct node *right; /* wijzer naar grotere elementen */ NODE, *NODE_P; /* maak een nieuw element voor in de boom */ static NODE_P create_node( void) NODE_P result; if((result = (NODE_P) malloc( sizeof( NODE))) == NULL) fprf( stderr, "Malloc() failed \n"); exit( 1); else result > count = 0; result >left = result >right = NULL; return result; /* recursief deel van opbouwfunctie */

9 build_tree_r( NODE_P *node_p, *keys, *i, lo, hi) node_key = min(max(hi / 2 + lo / 2 + 1, lo), hi); if( *i >= N keys[*i] < lo keys[*i] > hi) /* test om recursie te termineren */ if( *node_p == NULL) *node_p = create_node(); /* voeg nieuwe knoop toe aan boom */ if( keys[*i] == node_key) (*node_p) >count++; /* tel het element mee */ ++*i; if( keys[*i] < node_key) /* getal te klein; zoek verder */ build_tree_r( &(*node_p) >left, keys, i, lo, node_key 1); else if( keys[*i] > node_key) /* getal te groot; zoek verder */ build_tree_r( &(*node_p) >right, keys, i, node_key + 1, hi); build_tree_r( node_p, keys, i, lo, hi); /* ga verder met volgende getal */ /* Bouw een zoekboom van de elementen van een gesorteerde rij */ void build_tree( NODE_P *root, *keys) i = 0; build_tree_r( root, keys, &i, 0, M 1); /* Recursief deel van de bepaling van de doorsnede */ ersect_r( NODE_P node1, NODE_P node2, lo, hi) node_key = min(max(hi / 2 + lo / 2 + 1, lo), hi); i; if( node1 == NULL node2 == NULL) /* controleer of we al klaar zijn */ ersect_r( node1 >left, node2 >left, lo, node_key 1); /* het kleinste aantal malen dat element voorkomt bepaalt de doorsnede */ for( i = 0; i < min( node1 >count, node2 >count); i++) prf( "Gevonden: \t%05d \n", node_key); ersect_r( node1 >right, node2 >right, node_key + 1, hi); /* Druk de gemeenschappelijke elementen in twee bomen af */ void ersect( NODE_P tree1, NODE_P tree2) prf( "\nde doorsnede bestaat uit: \n"); ersect_r( tree1, tree2, 0, M 1); /* Vul rijen met willekeurige getallen */ fill_arrays( void) i; srand( time( 0)); a[i] = rand() % M; srand( time( 0) + 1); b[i] = rand() % M; /* een hulpfunctie voor quicksort */ static compare( const void *a, const void *b) return *( *)a *( *)b;

10 /* het hoofdprogramma */ main( argc, char **argv) NODE_P tree_a = NULL; NODE_P tree_b = NULL; fill_arrays(); /* vul geheugen met de getallen */ qsort( a, N, sizeof( ), compare); qsort( b, N, sizeof( ), compare); /* sorteer de waarden eerst */ build_tree( &tree_a, a); /* om de bomen snel op te bouwen */ build_tree( &tree_b, b); ersect( tree_a, tree_b); /* bepaal de doorsnede */ return 0; Listing 3. Doorsnede van twee rijen #include <stdio.h> #include <stdlib.h> #include <std.h> #include <time.h> #define N 30 #define M 60 #define min(a,b) (((a) < (b))? (a) : (b)) #define max(a,b) (((a) > (b))? (a) : (b)) a[ N]; b[ N]; /* there a standard sign functionsignum sgn in c c */ sgn( val) return (val > 0) (val < 0); /* vul rijen met willekeurige getallen */ void fill_arrays( void) i; srand( time( 0)); a[i] = rand() % M; srand( time( 0) + 1); b[i] = rand() % M; /* hulpfunctie voor sorteren */ static compare( const void *a, const void *b) return *( *)a *( *)b; void pr_arrays( void) i; prf( "%d:\t%05d\t%05d\n", i, a[i], b[i]); prf( "\n"); /* druk resultaat af */ void found( x) if( x >= 0) prf( "Found value\t%05d \n", x);

11 /* bepaal de doorsnede van twee (deel)rijen A en B */ ersect( a[], amin, amax, b[], bmin, bmax, xmin, xmax) ai = min(max(amin / 2 + amax / 2 + 1, amin), amax); bi = min(max(bmin / 2 + bmax / 2 + 1, bmin), bmax); aj = ai; bj = bi; akey = a[ai]; /* de zoeksleutels */ bkey = b[bi]; i; /* controleer of de deelrijen leeg zijn */ if((amin > amax) (bmin > bmax)) /* controleer of de waarden binnen de grenzen vallen */ if((a[amin] > xmax) (a[amax] < xmin) (b[bmin] > xmax) (b[bmax] < xmin)) /* zoek getallen gelijk aan de sleutels */ while((ai > amin) && (a[ai 1] == akey)) ai ; while((aj < amax) && (a[aj+1] == akey)) aj++; while((bi > bmin) && (b[bi 1] == bkey)) bi ; while((bj < bmax) && (b[bj+1] == bkey)) bj++; /* pas het algoritme recursief toe op de rest van het array */ switch( sgn( akey bkey)) case 1: ersect( a, amin, aj, b, bmin, bi 1, xmin, akey); ersect( a, aj+1, amax, b, bmin, bmax, akey+1, xmax); break; case 1: ersect( a, amin, ai 1, b, bmin, bj, xmin, bkey); ersect( a, amin, amax, b, bj+1, bmax, bkey+1, xmax); break; case 0: ersect( a, amin, ai 1, b, bmin, bi 1, xmin, akey 1); for( i = 0; i <= min( aj ai, bj bi); i++) found( akey); ersect( a, aj+1, amax, b, bj+1, bmax, akey+1, xmax); break; main( argc, char **argv) fill_arrays(); qsort( a, N, sizeof( ), compare); /* standaard quicksort functie */ qsort( b, N, sizeof( ), compare); pr_arrays(); ersect(a, 0, N 1, b, 0, N 1, max(a[0],b[0]), min(a[n 1],b[N 1])); exit( 0);

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: 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 informatie

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep.

Opgaven Zoekbomen Datastructuren, 15 juni 2016, Werkgroep. Opgaven Zoekbomen Datastructuren, 15 juni 2016, 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 opgaven.

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie 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 informatie

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

Tree 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 informatie

4EE11 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 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 informatie

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 ) OI 2010 Finale 12 Mei 2010 Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub VOORNAAM :....................................................... NAAM :..............................................................

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

2 Recurrente betrekkingen

2 Recurrente betrekkingen WIS2 1 2 Recurrente betrekkingen 2.1 Fibonacci De getallen van Fibonacci Fibonacci (= Leonardo van Pisa), 1202: Bereken het aantal paren konijnen na één jaar, als 1. er na 1 maand 1 paar pasgeboren konijnen

Nadere informatie

Verslag Opdracht 4: Magische Vierkanten

Verslag 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 informatie

extra oefening algoritmiek - antwoorden

extra oefening algoritmiek - antwoorden extra oefening algoritmiek - antwoorden opgave "Formule 1" Maak een programma dat de gebruiker drie getal A, B en C in laat voeren. De gebruiker zorgt ervoor dat er positieve gehele getallen worden ingevoerd.

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

Datastructuren. 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 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 informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (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 informatie

29 november 2012 Hashing. Een tijd-ruimte afweging Hashfuncties

29 november 2012 Hashing. Een tijd-ruimte afweging Hashfuncties Hashing Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 november 2012 ODE/FHTBM Hashing 29 november 2012 1/30 Hashing Een typisch gebruik van de implementatie

Nadere informatie

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

Hoofdstuk 2. Week 4: Datastructuren. 2.1 Leesopdracht. 2.2 Bomen. 2.3 Definitie Hoofdstuk 2 Week 4: Datastructuren 2.1 Leesopdracht In het hoorcollege komen lijsten en bomen aan de orde. De eerste datastructuur komt in het boek in bladzijden 317-333 aan de orde. In dit dictaat komt

Nadere informatie

Zoek- en sorteeralgoritmen en hashing

Zoek- 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 informatie

9. Strategieën en oplossingsmethoden

9. Strategieën en oplossingsmethoden 9. Strategieën en oplossingsmethoden In dit hoofdstuk wordt nog even terug gekeken naar alle voorgaande hoofdstukken. We herhalen globaal de structuren en geven enkele richtlijnen voor het ontwerpen van

Nadere informatie

Hoofdstuk 7: Werken met arrays

Hoofdstuk 7: Werken met arrays Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel

Nadere informatie

1 Inleiding in Functioneel Programmeren

1 Inleiding in Functioneel Programmeren 1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp

Nadere informatie

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd Inhoudsopgave 1 Inleiding... 1 2 Toekenning- en herhalingsopdrachten (for loop)... 2 2.1 De wet van Ohm... 3 2.2 De spaarrekening... 3 2.3 De transformator... 3 3 Keuze- en herhalingsopdrachten (if, switch,

Nadere informatie

Datastructuren college 10

Datastructuren college 10 we hadden Backtracking verbetering i i Datastructuren college 0 0: : : 0: : : P r r r r r b r b r P r r r b r b r backtracking we hoeven vaak de kandidaat niet helemaal af te maken om hem te kunnen verwerpen

Nadere informatie

Datastructuren; (Zoek)bomen

Datastructuren; (Zoek)bomen Datastructuren; (Zoek)bomen Bomen, zoekbomen, gebalanceerde zoekbomen José Lagerberg FNWI, UvA José Lagerberg (FNWI, UvA) Datastructuren; (Zoek)bomen 1 / 50 Bomen Traversal van bomen Datastructuur van

Nadere informatie

Oefeningen voor de oefeningenles. Oefening 1

Oefeningen voor de oefeningenles. Oefening 1 Oefeningen voor de oefeningenles Oefening 1 Gegeven een arbitraire binaire zoekboom T met n toppen en een (andere of gelijke) binaire zoekboom T die ook n sleutels bevat. Beschrijf een algoritme dat in

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep 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 informatie

Week 5 : Hoofdstuk 11+ extra stof: meer over functies. Hoofdstuk 11:

Week 5 : Hoofdstuk 11+ extra stof: meer over functies. Hoofdstuk 11: Week 5 : Hoofdstuk 11+ extra stof: meer over functies Hoofdstuk 11: Functies Functies in C lijken heel erg op functies in Java. Maar er is één groot veschil: Java ken uitsluitend invoer-parameters, terwijl

Nadere informatie

Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur)

Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur) Planning 1. Mini College 2. Introductiecursus Imperatief Programmeren 3. Crash and Compile (vanaf 17:00 uur) Geschiedinis van de Codemonkeys imperatief programmeren voor beginners Geschiedenis van de Codemonkey

Nadere informatie

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een 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 informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

Project Paper: Tiling problem

Project Paper: Tiling problem Project Paper: Tiling problem Groep 11: Said Hattachi, Ismael el Hadad Hakim, Muttalip Küçük Januari 015 Abstract Dit artikel beschrijft een heuristiek waarmee een veld op een systematische wijze gevuld

Nadere informatie

Javascript oefenblad 1

Javascript 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 informatie

slides12.pdf December 14, 2001 1

slides12.pdf December 14, 2001 1 Onderwerpen Inleiding Algemeen 12 Getallen Getallen Representaties Rekenen Problemen Piet van Oostrum 12 dec 2001 INL/Alg-12 1 X INL/Alg-12 1 X Getallen Soorten getallen Wat is een getal? Experiment: met

Nadere informatie

Hoofdstuk 5. Extra basisscherm-onderwerpen

Hoofdstuk 5. Extra basisscherm-onderwerpen Hoofdstuk 5. Extra basisscherm-onderwerpen 5 De basisschermgegevens als een Text Editor-script opslaan... 82 Informatie knippen, kopiëren en plakken... 83 Door de gebruiker gedefinieerde functies creëren

Nadere informatie

Matrixalgebra (het rekenen met matrices)

Matrixalgebra (het rekenen met matrices) Matrixalgebra (het rek met matrices Definitie A a a n a a n a m a mn is e (m n-matrix Hierbij is m het aantal rij van A n het aantal kolomm (m n noemt m de afmeting( van de matrix A We noter vaak kortweg

Nadere informatie

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd. BASISINSTRUCTIES SQL SQL : Structured Query Language is een taal gericht op het ondervragen van een relationele database en die aan veel klassieke databasemanagementsystemen kan worden gekoppeld. SQL is

Nadere informatie

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen 08-04-2005

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen 08-04-2005 Transport-, Routing- en Schedulingproblemen Wi4062TU / Wi487TU / a86g Uitwerkingen 08-04-2005 1 Transportprobleem Onderdeel a Fabriek 1 kan 120 ton staal fabriceren in 40 uur. Voor fabriek 2 is dit 150

Nadere informatie

Uitleg. Welkom bij de Beverwedstrijd 2006. Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden.

Uitleg. Welkom bij de Beverwedstrijd 2006. Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden. Uitleg Welkom bij de Beverwedstrijd 2006 Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden. Je krijgt 5 vragen van niveau A, 5 vragen van niveau B en 5 vragen van niveau C. Wij denken

Nadere informatie

Geheugenbeheer. ICT Infrastructuren 2 december 2013

Geheugenbeheer. ICT Infrastructuren 2 december 2013 Geheugenbeheer ICT Infrastructuren 2 december 2013 Doelen van geheugenbeheer Reloca>e (flexibel gebruik van geheugen) Bescherming Gedeeld/gemeenschappelijk geheugen Logische indeling van procesonderdelen

Nadere informatie

Programmeren met Arduino-software

Programmeren 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 informatie

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester.

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester. In onderstaande oefeningen zijn kleuren gebruikt. Deze dienen aleen om de structuren makkelijker terug te kunnen herkennen. Ze worden niet standaard zo gebruikt. De dunne rood/roze balken zijn ook geen

Nadere informatie

Branch-and-Bound en Cutting Planes

Branch-and-Bound en Cutting Planes Branch-and-Bound en Cutting Planes Vandaag: Er is nog geen algoritme om ILP s in polynomiale tijd op te lossen. Twee opties: 1 Exponentiëel algoritme dat optimale oplossing geeft 2 Polynomiaal algoritme

Nadere informatie

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10 CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel

Nadere informatie

ALGORITMIEK. Keuzemodule Wiskunde B/D. Mark de Berg TU Eindhoven

ALGORITMIEK. Keuzemodule Wiskunde B/D. Mark de Berg TU Eindhoven ALGORITMIEK Keuzemodule Wiskunde B/D Mark de Berg TU Eindhoven Voorwoord Algoritmiek is het gebied binnen de informatica dat zich bezig houdt met het ontwerpen en analyseren van algoritmen en datastructuren.

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN 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 informatie

Uitwerkingen Sum of Us

Uitwerkingen Sum of Us Instant Insanity Uitwerkingen Sum of Us Opgave A: - Opgave B: Voor elk van de vier kubussen kun je een graaf maken die correspondeert met de desbetreffende kubus. Elk van deze grafen bevat drie lijnen.

Nadere informatie

Twaalfde college complexiteit. 11 mei 2012. Overzicht, MST

Twaalfde college complexiteit. 11 mei 2012. Overzicht, MST College 12 Twaalfde college complexiteit 11 mei 2012 Overzicht, MST 1 Agenda voor vandaag Minimum Opspannende Boom (minimum spanning tree) als voorbeeld van greedy algoritmen Overzicht: wat voor technieken

Nadere informatie

Tentamen in2705 Software Engineering

Tentamen 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

12 Meer over pointers

12 Meer over pointers 12 Meer over pointers 12.1 Arrays van pointers Omdat pointers zelf variabelen zijn, is het mogelijk arrays van pointers te maken. Elk arrayelement is een pointer naar een of ander object. In de declaratie

Nadere informatie

Warehousing. Richard Both, Tom Slenders 22 oktober 2009

Warehousing. Richard Both, Tom Slenders 22 oktober 2009 Warehousing Richard Both, Tom Slenders 22 oktober 2009 1 Inhoudsopgave 1 Inleiding 2 2 Probleemstelling 2 3 Aannames 2 4 Strategieën en hypotheses 3 4.1 Unity picking.......................................

Nadere informatie

Uitwerking 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 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 informatie

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

definities recursieve datastructuren college 13 plaatjes soorten Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten recursieve datastructuren college graphs definities Graph = ( V, E ) V vertices, nodes, objecten, knopen, punten E edges, arcs, kanten, pijlen, lijnen verbinding tussen knopen Voorbeelden steden en verbindingswegen

Nadere informatie

8. Complexiteit van algoritmen:

8. Complexiteit van algoritmen: 8. Complexiteit van algoritmen: Voorbeeld: Een gevaarlijk spel 1 Spelboom voor het wespenspel 2 8.1 Complexiteit 4 8.2 NP-problemen 6 8.3 De oplossing 7 8.4 Een vuistregel 8 In dit hoofdstuk wordt het

Nadere informatie

Modelleren C Appels. Christian Vleugels Sander Verkerk Richard Both. 2 april 2010. 1 Inleiding 2. 3 Data 3. 4 Aanpak 3

Modelleren C Appels. Christian Vleugels Sander Verkerk Richard Both. 2 april 2010. 1 Inleiding 2. 3 Data 3. 4 Aanpak 3 Modelleren C Appels Christian Vleugels Sander Verkerk Richard Both 2 april 2010 Inhoudsopgave 1 Inleiding 2 2 Probleembeschrijving 2 3 Data 3 4 Aanpak 3 5 Data-analyse 4 5.1 Data-analyse: per product.............................

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Stage Ignatiuscollege, 17 mei 2010 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

De MySQL C API. Variabelen in C Functies in C Pointers in C

De MySQL C API. Variabelen in C Functies in C Pointers in C LinuxFocus article number 304 http://linuxfocus.org De MySQL C API door Özcan Güngör Over de auteur: Ik gebruik Linux sinds 1997. Vrijheid, flexibiliteit en opensource. Dat

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

1.0 Voorkennis. Voorbeeld 1: Los op: 6x + 28 = 30 10x.

1.0 Voorkennis. Voorbeeld 1: Los op: 6x + 28 = 30 10x. 1.0 Voorkennis Voorbeeld 1: Los op: 6x + 28 = 30 10x. 6x + 28 = 30 10x +10x +10x 16x + 28 = 30-28 -28 16x = 2 :16 :16 x = 2 1 16 8 Stappenplan: 1) Zorg dat alles met x links van het = teken komt te staan;

Nadere informatie

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een

Nadere informatie

2 Fourier analyse en de Fast Fourier Transform

2 Fourier analyse en de Fast Fourier Transform 2 FOURIER ANALYSE EN DE FAST FOURIER TRANSFORM 21 2 Fourier analyse en de Fast Fourier Transform Zij f een continue 2π-periodieke funktie op IR (eventueel met complexe waarden), dan kunnen we f ontwikkelen

Nadere informatie

Oplossingen Datamining 2II15 Juni 2008

Oplossingen Datamining 2II15 Juni 2008 Oplossingen Datamining II1 Juni 008 1. (Associatieregels) (a) Zijn de volgende beweringen juist of fout? Geef een korte verklaring voor alle juiste beweringen en een tegenvoorbeeld voor alle foute be-weringen:

Nadere informatie

Projectieve Vlakken en Codes

Projectieve Vlakken en Codes Projectieve Vlakken en Codes 1. De Fanocode Foutdetecterende en foutverbeterende codes. Anna en Bart doen mee aan een spelprogramma voor koppels. De ene helft van de deelnemers krijgt elk een kaart waarop

Nadere informatie

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN voorbeeldexamen NAAM :... OPMERKINGEN VOORAF Je krijgt 3 uur de tijd om de opdrachten voor dit examen uit te voeren. Verder werken aan je oplossing

Nadere informatie

Getaltheorie I. c = c 1 = 1 c (1)

Getaltheorie I. c = c 1 = 1 c (1) Lesbrief 1 Getaltheorie I De getaltheorie houdt zich bezig met het onderzoek van eigenschappen van gehele getallen, en meer in het bijzonder, van natuurlijke getallen. In de getaltheorie is het gebruikelijk

Nadere informatie

Practicumopdracht 8 : Recursief bomen tekenen en complexiteit van algoritmen

Practicumopdracht 8 : Recursief bomen tekenen en complexiteit van algoritmen Cursus Algoritmiek - - - najaar 2005 Practicumopdracht 8 : Recursief bomen tekenen en complexiteit van algoritmen Ook deze opdracht is bedoeld voor 2 weken: 1 e week t/m deelopdracht 8.2 ; maak in de 2

Nadere informatie

Week 1 20-02-2013. Hier vind je uitwerkingen van enkele opgaven uit het dictaat Grafen: Kleuren en Routeren.

Week 1 20-02-2013. Hier vind je uitwerkingen van enkele opgaven uit het dictaat Grafen: Kleuren en Routeren. Combinatorische Optimalisatie, 2013 Week 1 20-02-2013 Hier vind je uitwerkingen van enkele opgaven uit het dictaat Grafen: Kleuren en Routeren. Opgave 1.16 Bewijs dat elke graaf een even aantal punten

Nadere informatie

Pascal uitgediept Data structuren

Pascal uitgediept Data structuren Pascal uitgediept Data structuren MSX Computer & Club Magazine nummer 68-juni/juli 1994 Herman Post Scanned, ocr ed and converted to PDF by HansO, 2001 In deze aflevering wordt bekeken hoe zelf een datastructuur

Nadere informatie

Small Basic Console Uitwerking opdrachten

Small Basic Console Uitwerking opdrachten Opdracht 1 3 getallen => inlezen Gemiddelde uitrekenen Resultaat afdrukken TextWindow.WriteLine("Dit programma berekend het gemiddelde van drie door U in te voeren getallen.") TextWindow.Write("Voer getal

Nadere informatie

Hoofdstuk 6. Geordende binaire bomen

Hoofdstuk 6. Geordende binaire bomen Hoofdstuk 6 Geordende binaire bomen Eerder bespraken we hoe gelinkte lijsten een zeer flexibele structuur geven. Het zoeken in een gelinkte lijst was echter niet optimaal, aangezien je enkel de lijst van

Nadere informatie

Het berekenen van coördinaten van bijzondere punten van een grafiek gaat met opties uit het CALC-menu.

Het berekenen van coördinaten van bijzondere punten van een grafiek gaat met opties uit het CALC-menu. Toppen en snijpunten We gaan uit van de formule y 0,08x 1,44x 6,48x 3. Voer deze formule in op het formule-invoerscherm (via!) en plot de grafiek met Xmin = 0, Xmax = 14, Ymin = 5 en Ymax = 14. In de figuur

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://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 informatie

Om te kijken of x, y, z samen een driehoek specificeren hoeven we alleen nog maar de driehoeksongelijkheid te controleren: x, y, z moeten voldoen

Om 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 informatie

1 Aanvulling cosy deeltijd

1 Aanvulling cosy deeltijd 1 Aanvulling cosy deeltijd 1.1 Multiprocessor versus multicomputer Het kenmerk van een multiprocessor is dat meer CPU hetzelfde geheugen delen. Voordeel van deze aanpak is het relatief eenvoudige programmeermodel.

Nadere informatie

Tentamen 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 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 informatie

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur Tentamen Discrete Wiskunde 0 april 0, :00 7:00 uur Schrijf je naam op ieder blad dat je inlevert. Onderbouw je antwoorden, met een goede argumentatie zijn ook punten te verdienen. Veel succes! Opgave.

Nadere informatie

Praktisch bestaan er enkele eenvoudige methoden om een decimaal getal om te zetten naar een binair getal. We bespreken hier de twee technieken.

Praktisch bestaan er enkele eenvoudige methoden om een decimaal getal om te zetten naar een binair getal. We bespreken hier de twee technieken. Talstelsels 1 Algemeenheden Digitale systemen werken met nullen en enen omdat dit elektronisch gemakkelijke te verwezenlijken is. De transistor kent enkel twee toestanden (geleiden of sperren) Hierdoor

Nadere informatie

U ziet de progressie van de download aan de groene blokjes in het balkje helemaal onder aan de pagina.

U ziet de progressie van de download aan de groene blokjes in het balkje helemaal onder aan de pagina. Gegevens exporteren en bewerken vanuit GRIEL Stap 1. Selecteer de juiste gegevens en download deze 1. Stel het datumfilter in op de gewenste periode. Druk op ververs. 2. Maak met behulp van het filter

Nadere informatie

Auteur 02-11-06. 1 Inleiding...3. 2 Namen in applicatie...4. 2.1 Opslag structuur... 4 2.2 Gedefinieerde structuren... 4

Auteur 02-11-06. 1 Inleiding...3. 2 Namen in applicatie...4. 2.1 Opslag structuur... 4 2.2 Gedefinieerde structuren... 4 MV-MODULE RWSC versie 3 Inhoudsopgave 1 Inleiding...3 2 Namen in applicatie...4 2.1 Opslag structuur... 4 2.2 Gedefinieerde structuren... 4 3 Signaalgroep informatie bij bijzondere ingrepen...6 4 Extra's...7

Nadere informatie

Grafisch programmeren met GTK

Grafisch programmeren met GTK LinuxFocus article number 295 http://linuxfocus.org Grafisch programmeren met GTK door Özcan Güngör Over de auteur: Sinds 1997 gebruik ik Linux. Vrijheid, flexibiliteit en

Nadere informatie

Sorteren, groeperen en totaliseren

Sorteren, groeperen en totaliseren 6 Sorteren, groeperen en totaliseren 6.1 Inleiding Een rapport maken begint met het selecteren van de tabellen en het plaatsen van de velden die u in uw rapport wilt afdrukken. Vervolgens sorteert, groepeert

Nadere informatie

1 Complexe getallen in de vorm a + bi

1 Complexe getallen in de vorm a + bi Paragraaf in de vorm a + bi XX Complex getal Instap Los de vergelijkingen op. a x + = 7 d x + 4 = 3 b 2x = 5 e x 2 = 6 c x 2 = 3 f x 2 = - Welke vergelijkingen hebben een natuurlijk getal als oplossing?...

Nadere informatie

WISKUNDE B -DAG 2002 1+ 1 = 2. maar en hoe nu verder? 29 november 2002

WISKUNDE B -DAG 2002 1+ 1 = 2. maar en hoe nu verder? 29 november 2002 - 0 - WISKUNDE B -DAG 2002 1+ 1 = 2 maar en hoe nu verder? 29 november 2002 De Wiskunde B-dag wordt gesponsord door Texas Instruments - 1 - Inleiding Snel machtverheffen Stel je voor dat je 7 25 moet uitrekenen.

Nadere informatie

WISKUNDE-ESTAFETTE RU 2006 Antwoorden

WISKUNDE-ESTAFETTE RU 2006 Antwoorden WISKUNDE-ESTAFETTE RU 2006 Antwoorden 1 V 1 8 en 12 V 2 7 en 11 V 3 6 en 10 V 4 5 en 9 2 5040 opstellingen 3 De zijde is 37 4 α = 100 5 10, 2 liter 6 De volgorde is 2, 5, 3, 4, 1 7 30 euro 8 De straal

Nadere informatie

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies software constructie recursieve datastructuren college 15 software engineering highlights 1 de software bestaat uiteindelijk uit datatypen functies verbindingen geven gebruik aan main is de top van het

Nadere informatie

Het duivenhokprincipe

Het duivenhokprincipe Tijdens de sneeuwstormen van 5 november j.l. hebben duizenden leerlingen zich gebogen over de opdracht in het kader van de wiskunde B-dag. Op het Jac P Thijsse College worden de werkstukken beoordeeld

Nadere informatie

1 Vlaamse Wiskunde Olympiade 1996 1997: Eerste Ronde.

1 Vlaamse Wiskunde Olympiade 1996 1997: Eerste Ronde. 1 Vlaamse Wiskunde Olympiade 1996 1997: Eerste Ronde De eerste ronde bestaat uit 0 meerkeuzevragen Het quoteringssysteem werkt als volgt : een deelnemer start met 0 punten Per goed antwoord krijgt hij

Nadere informatie

Opgaven bij Hoofdstuk 3 - Productiesystemen

Opgaven bij Hoofdstuk 3 - Productiesystemen Opgaven bij Hoofdstuk 3 - Productiesystemen Top-down inferentie In de opgaven in deze paragraaf over top-down inferentie wordt aangenomen dat de feitenverzameling alleen feiten bevat die als getraceerd

Nadere informatie

Groepen, ringen en velden

Groepen, ringen en velden Groepen, ringen en velden Groep Een groep G is een verzameling van elementen en een binaire operator met volgende eigenschappen: 1. closure (gesloten): als a en b tot G behoren, doet a b dat ook. 2. associativiteit:

Nadere informatie

opgaven formele structuren deterministische eindige automaten

opgaven formele structuren deterministische eindige automaten opgaven formele structuren deterministische eindige automaten Opgave. De taal L over het alfabet {a, b} bestaat uit alle strings die beginnen met aa en eindigen met ab. Geef een reguliere expressie voor

Nadere informatie

Samenvattingen 5HAVO Wiskunde A.

Samenvattingen 5HAVO Wiskunde A. Samenvattingen 5HAVO Wiskunde A. Boek 1 H7, Boek 2 H7&8 Martin@CH.TUdelft.NL Boek 2: H7. Verbanden (Recht) Evenredig Verband ( 1) Omgekeerd Evenredig Verband ( 1) Hyperbolisch Verband ( 2) Machtsverband

Nadere informatie

Vraag 1 (2 punten) (iii) Een lees-opdracht van virtueel adres 2148 seg 0, offset 2148 - idem

Vraag 1 (2 punten) (iii) Een lees-opdracht van virtueel adres 2148 seg 0, offset 2148 - idem Tentamen A2 (deel b) 24-06-2004 Geef (liefst beknopte en heldere) motivatie bij je antwoorden; dus niet enkel ja of nee antwoorden, maar ook waarom. Geef van berekeningen niet alleen het eindresultaat,

Nadere informatie

WISKUNDE-ESTAFETTE KUN 2003 60 Minuten voor 20 opgaven. Het totaal aantal te behalen punten is 500

WISKUNDE-ESTAFETTE KUN 2003 60 Minuten voor 20 opgaven. Het totaal aantal te behalen punten is 500 WISKUNDE-ESTAFETTE KUN 2003 60 Minuten voor 20 opgaven. Het totaal aantal te behalen punten is 500 1 (20 punten) Gekleurde sokken Op de planeet Swift B6 wonen de Houyhnhnms. Ze lijken sprekend op paarden;

Nadere informatie

Wiskunde klas 3. Vaardigheden. Inhoudsopgave. 1. Breuken 2. 2. Gelijksoortige termen samennemen 3. 3. Rekenen met machten 3. 4. Rekenen met wortels 4

Wiskunde klas 3. Vaardigheden. Inhoudsopgave. 1. Breuken 2. 2. Gelijksoortige termen samennemen 3. 3. Rekenen met machten 3. 4. Rekenen met wortels 4 Vaardigheden Wiskunde klas Inhoudsopgave. Breuken. Gelijksoortige termen samennemen. Rekenen met machten. Rekenen met wortels. Algebraïsche producten 6. Ontbinden in factoren 6 7. Eerstegraads vergelijkingen

Nadere informatie

Protocol Balance bord

Protocol Balance bord Protocol Balance bord Inleiding Het Balance board is een apparaat waarmee je nauwkeurig de balans kan testen en trainen met behulp van visuele feedback. Het is dan ook ideaal voor patiënten met neurologische

Nadere informatie

ANTWOORDEN blz. 1. d. 345 + 668 = 1013; 61 007 + 50 215 = 111 222; 102 240 30 628 = 71 612; 1 000 000 1 = 999 999

ANTWOORDEN blz. 1. d. 345 + 668 = 1013; 61 007 + 50 215 = 111 222; 102 240 30 628 = 71 612; 1 000 000 1 = 999 999 ANTWOORDEN blz. 3 a. Zeer onwaarschijnlijk Zeer onwaarschijnlijk a. Dan heb je ergens een schuld uitstaan 86 Dan hadden beide een kopie van de kerfstok; om fraude te voorkomen a. MMXII, MCCCXXVII, DLXXXVI,

Nadere informatie

1. Het getal 200 9 = 1800 is even. De andere antwoorden zijn oneven: 2009, 2 + 0 + 0 + 9 = 11, 200 9 = 191, 200 + 9 = 209.

1. Het getal 200 9 = 1800 is even. De andere antwoorden zijn oneven: 2009, 2 + 0 + 0 + 9 = 11, 200 9 = 191, 200 + 9 = 209. 1. Het getal 200 9 = 1800 is even. De andere antwoorden zijn oneven: 2009, 2 + 0 + 0 + 9 = 11, 200 9 = 191, 200 + 9 = 209. Kangoeroewedstrijd editie Wallabie: jaargang 2009, probleem 1; Kangoeroewedstrijd

Nadere informatie

In Katern 2 hebben we de volgende rekenregel bewezen, als onderdeel van rekenregel 4:

In Katern 2 hebben we de volgende rekenregel bewezen, als onderdeel van rekenregel 4: Katern 4 Bewijsmethoden Inhoudsopgave 1 Bewijs uit het ongerijmde 1 2 Extremenprincipe 4 3 Ladenprincipe 8 1 Bewijs uit het ongerijmde In Katern 2 hebben we de volgende rekenregel bewezen, als onderdeel

Nadere informatie

Activiteit 1. Tel de punten Binaire Getallen. Samenvatting. Kerndoelen. Vaardigheden. Leeftijd. Materiaal

Activiteit 1. Tel de punten Binaire Getallen. Samenvatting. Kerndoelen. Vaardigheden. Leeftijd. Materiaal Activiteit 1 Tel de punten Binaire Getallen Samenvatting Data in de computer worden opgeslagen als een serie van nullen en enen. Hoe kunnen we woorden en getallen weergeven met alleen deze twee symbolen?

Nadere informatie