[{"data":1,"prerenderedAt":24689},["ShallowReactive",2],{"dsa-topics":3},[4,2400,6369,8451,11499,13928,16759,19950],{"id":5,"title":6,"body":7,"description":2391,"extension":2392,"icon":2393,"meta":2394,"navigation":1702,"order":387,"path":2395,"seo":2396,"stem":2397,"topic":2398,"__hash__":2399},"practicelyDsa\u002Fpracticely-dsa\u002Fcomplexiteit.md","Complexiteit en Big-O: zo schat je de looptijd van een algoritme",{"type":8,"value":9,"toc":2374},"minimark",[10,24,38,43,55,103,121,125,128,165,182,199,203,206,225,348,356,360,363,368,504,514,518,736,754,759,777,781,884,898,901,995,1051,1069,1073,1076,1302,1315,1319,1461,1473,1477,1495,1498,1596,1599,1857,1871,1875,1885,1890,1912,1984,1987,2125,2137,2143,2156,2160,2245,2249,2313,2317,2370],[11,12,13,14,18,19,23],"p",{},"Twee programma's kunnen precies hetzelfde antwoord geven en toch totaal verschillend presteren. Het\nene sorteert een miljoen getallen in een fractie van een seconde, het andere is na een uur nog bezig.\n",[15,16,17],"strong",{},"Complexiteit"," (",[20,21,22],"em",{},"complexity",") is de taal waarmee je dat verschil beschrijft zonder een stopwatch:\nje telt hoe het aantal stappen groeit als de invoer groter wordt.",[11,25,26,27,32,33,37],{},"Je hebt dit nodig op elk tentamen algoritmen, in vrijwel elk technisch sollicitatiegesprek (\"wat is\nde complexiteit van jouw oplossing?\") en in de praktijk, zodra je data groter wordt dan je testset.\nAlle andere onderwerpen hier, van ",[28,29,31],"a",{"href":30},"\u002Fpracticely\u002Fdsa\u002Fsorteren","sorteren"," tot\n",[28,34,36],{"href":35},"\u002Fpracticely\u002Fdsa\u002Fgrafen","grafen",", gebruiken deze notatie.",[39,40,42],"h2",{"id":41},"big-o-en-θ-het-idee","Big-O en Θ: het idee",[11,44,45,46,50,51,54],{},"Noem de grootte van de invoer ",[47,48,49],"code",{},"n"," (het aantal elementen in een lijst, het aantal knopen in een graaf).\nDe looptijd ",[47,52,53],{},"T(n)"," is het aantal basisstappen: een vergelijking, een toekenning, een optelling.",[56,57,58,86],"ul",{},[59,60,61,18,64,67,68,71,72,75,76,78,79,81,82,85],"li",{},[15,62,63],{},"Big-O",[47,65,66],{},"O",") is een ",[15,69,70],{},"bovengrens",": ",[47,73,74],{},"T(n) = O(f(n))"," betekent dat ",[47,77,53],{}," voor grote ",[47,80,49],{}," hooguit\neen constante keer ",[47,83,84],{},"f(n)"," is.",[59,87,88,18,91,67,94,71,97,99,100,102],{},[15,89,90],{},"Theta",[47,92,93],{},"Θ",[15,95,96],{},"strakke grens",[47,98,53],{}," groeit precies zo snel als ",[47,101,84],{},", op een\nconstante factor na. Zowel boven- als ondergrens.",[11,104,105,106,109,110,113,114,116,117,120],{},"Strikt genomen is een enkele lus ook ",[47,107,108],{},"O(n²)",", want ",[47,111,112],{},"n²"," is óók een bovengrens. Maar dat is een\nnutteloos antwoord. Op Practicely en op de meeste tentamens bedoelen we met Big-O de ",[15,115,96],{},":\neen enkele lus is ",[47,118,119],{},"O(n)",", punt.",[39,122,124],{"id":123},"rekenregels","Rekenregels",[11,126,127],{},"Je hoeft nooit precies te tellen. Twee regels doen het meeste werk:",[129,130,131,151],"ol",{},[59,132,133,136,137,140,141,143,144,147,148,150],{},[15,134,135],{},"Constanten vallen weg."," ",[47,138,139],{},"3n + 7"," is ",[47,142,119],{},". ",[47,145,146],{},"n\u002F2"," is ook ",[47,149,119],{},".",[59,152,153,136,156,140,159,161,162,164],{},[15,154,155],{},"Alleen de dominante term telt.",[47,157,158],{},"n² + 100n + 5000",[47,160,108],{},", want voor grote ",[47,163,49],{}," maakt de\nrest niets meer uit.",[11,166,167,168,140,171,173,174,177,178,181],{},"Zie het zo: bij ",[47,169,170],{},"n = 1000",[47,172,112],{}," een miljoen en ",[47,175,176],{},"100n"," maar honderdduizend. Bij ",[47,179,180],{},"n = 1.000.000"," is\nhet verschil een factor tienduizend.",[11,183,184,185,188,189,192,193,196,197,150],{},"Verder geldt: het grondtal van een logaritme maakt in Big-O niet uit, omdat ",[47,186,187],{},"log₁₀ n"," en ",[47,190,191],{},"log₂ n","\neen constante factor van elkaar verschillen. Staat er ",[47,194,195],{},"log n",", dan bedoelen we ",[47,198,191],{},[39,200,202],{"id":201},"de-veelvoorkomende-klassen","De veelvoorkomende klassen",[11,204,205],{},"Van snel naar traag:",[11,207,208,211,212,211,215,211,217,211,220,211,222],{},[47,209,210],{},"O(1)"," \u003C ",[47,213,214],{},"O(log n)",[47,216,119],{},[47,218,219],{},"O(n log n)",[47,221,108],{},[47,223,224],{},"O(2ⁿ)",[226,227,228,247],"table",{},[229,230,231],"thead",{},[232,233,234,238,241,244],"tr",{},[235,236,237],"th",{},"Klasse",[235,239,240],{},"Naam",[235,242,243],{},"Voorbeeld",[235,245,246],{},"Stappen bij n = 1000 (orde)",[248,249,250,270,288,303,318,333],"tbody",{},[232,251,252,257,260,267],{},[253,254,255],"td",{},[47,256,210],{},[253,258,259],{},"constant",[253,261,262,263,266],{},"element ",[47,264,265],{},"a[i]"," opvragen",[253,268,269],{},"1",[232,271,272,276,279,285],{},[253,273,274],{},[47,275,214],{},[253,277,278],{},"logaritmisch",[253,280,281],{},[28,282,284],{"href":283},"\u002Fpracticely\u002Fdsa\u002Fzoeken","binair zoeken",[253,286,287],{},"10",[232,289,290,294,297,300],{},[253,291,292],{},[47,293,119],{},[253,295,296],{},"lineair",[253,298,299],{},"maximum van een lijst zoeken",[253,301,302],{},"1.000",[232,304,305,309,312,315],{},[253,306,307],{},[47,308,219],{},[253,310,311],{},"n-log-n",[253,313,314],{},"merge sort",[253,316,317],{},"10.000",[232,319,320,324,327,330],{},[253,321,322],{},[47,323,108],{},[253,325,326],{},"kwadratisch",[253,328,329],{},"insertion sort, alle paren bekijken",[253,331,332],{},"1.000.000",[232,334,335,339,342,345],{},[253,336,337],{},[47,338,224],{},[253,340,341],{},"exponentieel",[253,343,344],{},"alle deelverzamelingen opsommen",[253,346,347],{},"meer dan atomen in het heelal",[11,349,350,351,188,353,355],{},"Het verschil tussen ",[47,352,219],{},[47,354,108],{}," is bij duizend elementen al een factor honderd. Daarom\nloont het om de klasse van je algoritme te kennen.",[39,357,359],{"id":358},"lussen-tellen","Lussen tellen",[11,361,362],{},"Het meeste werk bij het bepalen van de complexiteit is: kijk hoe vaak de binnenste opdracht wordt\nuitgevoerd.",[364,365,367],"h3",{"id":366},"enkele-lus","Enkele lus",[369,370,371,433],"code-tabs",{},[372,373,375],"template",{"v-slot:python":374},"",[376,377,381],"pre",{"className":378,"code":379,"language":380,"meta":374,"style":374},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","for i in range(n):\n    totaal += a[i]\n","python",[47,382,383,412],{"__ignoreMap":374},[384,385,388,392,396,399,403,407,409],"span",{"class":386,"line":387},"line",1,[384,389,391],{"class":390},"s7zQu","for",[384,393,395],{"class":394},"sTEyZ"," i ",[384,397,398],{"class":390},"in",[384,400,402],{"class":401},"s2Zo4"," range",[384,404,406],{"class":405},"sMK4o","(",[384,408,49],{"class":401},[384,410,411],{"class":405},"):\n",[384,413,415,418,421,424,427,430],{"class":386,"line":414},2,[384,416,417],{"class":394},"    totaal ",[384,419,420],{"class":405},"+=",[384,422,423],{"class":394}," a",[384,425,426],{"class":405},"[",[384,428,429],{"class":394},"i",[384,431,432],{"class":405},"]\n",[372,434,435],{"v-slot:java":374},[376,436,440],{"className":437,"code":438,"language":439,"meta":374,"style":374},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","for (int i = 0; i \u003C n; i++) {\n    totaal += a[i];\n}\n","java",[47,441,442,483,498],{"__ignoreMap":374},[384,443,444,446,448,452,454,457,461,464,466,469,472,474,477,480],{"class":386,"line":387},[384,445,391],{"class":390},[384,447,18],{"class":405},[384,449,451],{"class":450},"spNyl","int",[384,453,395],{"class":394},[384,455,456],{"class":405},"=",[384,458,460],{"class":459},"sbssI"," 0",[384,462,463],{"class":405},";",[384,465,395],{"class":394},[384,467,468],{"class":405},"\u003C",[384,470,471],{"class":394}," n",[384,473,463],{"class":405},[384,475,476],{"class":394}," i",[384,478,479],{"class":405},"++)",[384,481,482],{"class":405}," {\n",[384,484,485,487,489,491,493,495],{"class":386,"line":414},[384,486,417],{"class":394},[384,488,420],{"class":405},[384,490,423],{"class":394},[384,492,426],{"class":405},[384,494,429],{"class":394},[384,496,497],{"class":405},"];\n",[384,499,501],{"class":386,"line":500},3,[384,502,503],{"class":405},"}\n",[11,505,506,507,509,510,150],{},"De body draait ",[47,508,49],{}," keer: ",[15,511,512],{},[47,513,119],{},[364,515,517],{"id":516},"geneste-lussen","Geneste lussen",[369,519,520,611],{},[372,521,522],{"v-slot:python":374},[376,523,525],{"className":378,"code":524,"language":380,"meta":374,"style":374},"for i in range(n):\n    for j in range(i + 1, n):\n        if a[i] == a[j]:\n            gevonden = True\n",[47,526,527,543,573,600],{"__ignoreMap":374},[384,528,529,531,533,535,537,539,541],{"class":386,"line":387},[384,530,391],{"class":390},[384,532,395],{"class":394},[384,534,398],{"class":390},[384,536,402],{"class":401},[384,538,406],{"class":405},[384,540,49],{"class":401},[384,542,411],{"class":405},[384,544,545,548,551,553,555,557,560,563,566,569,571],{"class":386,"line":414},[384,546,547],{"class":390},"    for",[384,549,550],{"class":394}," j ",[384,552,398],{"class":390},[384,554,402],{"class":401},[384,556,406],{"class":405},[384,558,559],{"class":401},"i ",[384,561,562],{"class":405},"+",[384,564,565],{"class":459}," 1",[384,567,568],{"class":405},",",[384,570,471],{"class":401},[384,572,411],{"class":405},[384,574,575,578,580,582,584,587,590,592,594,597],{"class":386,"line":500},[384,576,577],{"class":390},"        if",[384,579,423],{"class":394},[384,581,426],{"class":405},[384,583,429],{"class":394},[384,585,586],{"class":405},"]",[384,588,589],{"class":405}," ==",[384,591,423],{"class":394},[384,593,426],{"class":405},[384,595,596],{"class":394},"j",[384,598,599],{"class":405},"]:\n",[384,601,603,606,608],{"class":386,"line":602},4,[384,604,605],{"class":394},"            gevonden ",[384,607,456],{"class":405},[384,609,610],{"class":405}," True\n",[372,612,613],{"v-slot:java":374},[376,614,616],{"className":437,"code":615,"language":439,"meta":374,"style":374},"for (int i = 0; i \u003C n; i++) {\n    for (int j = i + 1; j \u003C n; j++) {\n        if (a[i] == a[j]) {\n            gevonden = true;\n        }\n    }\n}\n",[47,617,618,648,683,710,719,725,731],{"__ignoreMap":374},[384,619,620,622,624,626,628,630,632,634,636,638,640,642,644,646],{"class":386,"line":387},[384,621,391],{"class":390},[384,623,18],{"class":405},[384,625,451],{"class":450},[384,627,395],{"class":394},[384,629,456],{"class":405},[384,631,460],{"class":459},[384,633,463],{"class":405},[384,635,395],{"class":394},[384,637,468],{"class":405},[384,639,471],{"class":394},[384,641,463],{"class":405},[384,643,476],{"class":394},[384,645,479],{"class":405},[384,647,482],{"class":405},[384,649,650,652,654,656,658,660,662,664,666,668,670,672,674,676,679,681],{"class":386,"line":414},[384,651,547],{"class":390},[384,653,18],{"class":405},[384,655,451],{"class":450},[384,657,550],{"class":394},[384,659,456],{"class":405},[384,661,395],{"class":394},[384,663,562],{"class":405},[384,665,565],{"class":459},[384,667,463],{"class":405},[384,669,550],{"class":394},[384,671,468],{"class":405},[384,673,471],{"class":394},[384,675,463],{"class":405},[384,677,678],{"class":394}," j",[384,680,479],{"class":405},[384,682,482],{"class":405},[384,684,685,687,689,691,693,695,697,699,701,703,705,708],{"class":386,"line":500},[384,686,577],{"class":390},[384,688,18],{"class":405},[384,690,28],{"class":394},[384,692,426],{"class":405},[384,694,429],{"class":394},[384,696,586],{"class":405},[384,698,589],{"class":405},[384,700,423],{"class":394},[384,702,426],{"class":405},[384,704,596],{"class":394},[384,706,707],{"class":405},"])",[384,709,482],{"class":405},[384,711,712,714,716],{"class":386,"line":602},[384,713,605],{"class":394},[384,715,456],{"class":405},[384,717,718],{"class":405}," true;\n",[384,720,722],{"class":386,"line":721},5,[384,723,724],{"class":405},"        }\n",[384,726,728],{"class":386,"line":727},6,[384,729,730],{"class":405},"    }\n",[384,732,734],{"class":386,"line":733},7,[384,735,503],{"class":405},[11,737,738,739,742,743,746,747,136,750,753],{},"Voor ",[47,740,741],{},"i = 0"," draait de binnenste lus ",[47,744,745],{},"n-1"," keer, voor ",[47,748,749],{},"i = 1",[47,751,752],{},"n-2"," keer, enzovoort tot 0. Samen:",[11,755,756],{},[47,757,758],{},"(n-1) + (n-2) + … + 1 + 0 = n(n-1)\u002F2",[11,760,761,762,765,766,768,769,771,772,776],{},"Bij ",[47,763,764],{},"n = 16"," zijn dat 120 vergelijkingen, bij ",[47,767,170],{}," precies 499.500. Constante (½) weg,\ndominante term (",[47,770,112],{},") houden: ",[15,773,774],{},[47,775,108],{},". Dat de binnenste lus \"maar half zo lang\" is, verandert de\nklasse niet.",[364,778,780],{"id":779},"gehalveerde-of-verdubbelde-teller","Gehalveerde of verdubbelde teller",[369,782,783,829],{},[372,784,785],{"v-slot:python":374},[376,786,788],{"className":378,"code":787,"language":380,"meta":374,"style":374},"i = n\nwhile i > 0:\n    i \u002F\u002F= 2        # i wordt telkens gehalveerd\n",[47,789,790,799,814],{"__ignoreMap":374},[384,791,792,794,796],{"class":386,"line":387},[384,793,559],{"class":394},[384,795,456],{"class":405},[384,797,798],{"class":394}," n\n",[384,800,801,804,806,809,811],{"class":386,"line":414},[384,802,803],{"class":390},"while",[384,805,395],{"class":394},[384,807,808],{"class":405},">",[384,810,460],{"class":459},[384,812,813],{"class":405},":\n",[384,815,816,819,822,825],{"class":386,"line":500},[384,817,818],{"class":394},"    i ",[384,820,821],{"class":405},"\u002F\u002F=",[384,823,824],{"class":459}," 2",[384,826,828],{"class":827},"sHwdD","        # i wordt telkens gehalveerd\n",[372,830,831],{"v-slot:java":374},[376,832,834],{"className":437,"code":833,"language":439,"meta":374,"style":374},"int i = n;\nwhile (i > 0) {\n    i \u002F= 2;        \u002F\u002F i wordt telkens gehalveerd (integerdeling)\n}\n",[47,835,836,849,866,880],{"__ignoreMap":374},[384,837,838,840,842,844,846],{"class":386,"line":387},[384,839,451],{"class":450},[384,841,395],{"class":394},[384,843,456],{"class":405},[384,845,471],{"class":394},[384,847,848],{"class":405},";\n",[384,850,851,853,855,857,859,861,864],{"class":386,"line":414},[384,852,803],{"class":390},[384,854,18],{"class":405},[384,856,559],{"class":394},[384,858,808],{"class":405},[384,860,460],{"class":459},[384,862,863],{"class":405},")",[384,865,482],{"class":405},[384,867,868,870,873,875,877],{"class":386,"line":500},[384,869,818],{"class":394},[384,871,872],{"class":405},"\u002F=",[384,874,824],{"class":459},[384,876,463],{"class":405},[384,878,879],{"class":827},"        \u002F\u002F i wordt telkens gehalveerd (integerdeling)\n",[384,881,882],{"class":386,"line":602},[384,883,503],{"class":405},[11,885,761,886,888,889,891,892,71,894,150],{},[47,887,764],{}," neemt ",[47,890,429],{}," de waarden 16, 8, 4, 2, 1 aan: 5 iteraties. Elke stap halveert het werk,\ndus het aantal stappen is ongeveer ",[47,893,191],{},[15,895,896],{},[47,897,214],{},[11,899,900],{},"Hetzelfde geldt voor een teller die verdubbelt:",[369,902,903,943],{},[372,904,905],{"v-slot:python":374},[376,906,908],{"className":378,"code":907,"language":380,"meta":374,"style":374},"i = 1\nwhile i \u003C n:\n    i *= 2         # 1, 2, 4, 8, ... tot n\n",[47,909,910,919,931],{"__ignoreMap":374},[384,911,912,914,916],{"class":386,"line":387},[384,913,559],{"class":394},[384,915,456],{"class":405},[384,917,918],{"class":459}," 1\n",[384,920,921,923,925,927,929],{"class":386,"line":414},[384,922,803],{"class":390},[384,924,395],{"class":394},[384,926,468],{"class":405},[384,928,471],{"class":394},[384,930,813],{"class":405},[384,932,933,935,938,940],{"class":386,"line":500},[384,934,818],{"class":394},[384,936,937],{"class":405},"*=",[384,939,824],{"class":459},[384,941,942],{"class":827},"         # 1, 2, 4, 8, ... tot n\n",[372,944,945],{"v-slot:java":374},[376,946,948],{"className":437,"code":947,"language":439,"meta":374,"style":374},"int i = 1;\nwhile (i \u003C n) {\n    i *= 2;        \u002F\u002F 1, 2, 4, 8, ... tot n\n}\n",[47,949,950,962,978,991],{"__ignoreMap":374},[384,951,952,954,956,958,960],{"class":386,"line":387},[384,953,451],{"class":450},[384,955,395],{"class":394},[384,957,456],{"class":405},[384,959,565],{"class":459},[384,961,848],{"class":405},[384,963,964,966,968,970,972,974,976],{"class":386,"line":414},[384,965,803],{"class":390},[384,967,18],{"class":405},[384,969,559],{"class":394},[384,971,468],{"class":405},[384,973,471],{"class":394},[384,975,863],{"class":405},[384,977,482],{"class":405},[384,979,980,982,984,986,988],{"class":386,"line":500},[384,981,818],{"class":394},[384,983,937],{"class":405},[384,985,824],{"class":459},[384,987,463],{"class":405},[384,989,990],{"class":827},"        \u002F\u002F 1, 2, 4, 8, ... tot n\n",[384,992,993],{"class":386,"line":602},[384,994,503],{"class":405},[226,996,997,1010],{},[229,998,999],{},[232,1000,1001,1004,1006,1008],{},[235,1002,1003],{},"Lus",[235,1005,764],{},[235,1007,170],{},[235,1009,237],{},[248,1011,1012,1032],{},[232,1013,1014,1023,1026,1028],{},[253,1015,1016,1019,1020,1022],{},[47,1017,1018],{},"i \u002F\u002F= 2"," vanaf ",[47,1021,49],{}," tot 0",[253,1024,1025],{},"5",[253,1027,287],{},[253,1029,1030],{},[47,1031,214],{},[232,1033,1034,1042,1045,1047],{},[253,1035,1036,1039,1040],{},[47,1037,1038],{},"i *= 2"," vanaf 1 tot ",[47,1041,49],{},[253,1043,1044],{},"4",[253,1046,287],{},[253,1048,1049],{},[47,1050,214],{},[11,1052,1053,1054,1057,1058,1061,1062,1064,1065,150],{},"Let op het verschil met ",[47,1055,1056],{},"i -= 2"," of ",[47,1059,1060],{},"i += 2",": dat zijn ",[47,1063,146],{}," stappen, dus gewoon ",[15,1066,1067],{},[47,1068,119],{},[364,1070,1072],{"id":1071},"sequentiële-stukken","Sequentiële stukken",[11,1074,1075],{},"Twee stukken code ná elkaar tel je op, en dan houd je de grootste:",[369,1077,1078,1163],{},[372,1079,1080],{"v-slot:python":374},[376,1081,1083],{"className":378,"code":1082,"language":380,"meta":374,"style":374},"for i in range(n):          # O(n)\n    totaal += a[i]\nfor i in range(n):          # O(n²)\n    for j in range(n):\n        paren += 1\n",[47,1084,1085,1105,1119,1138,1154],{"__ignoreMap":374},[384,1086,1087,1089,1091,1093,1095,1097,1099,1102],{"class":386,"line":387},[384,1088,391],{"class":390},[384,1090,395],{"class":394},[384,1092,398],{"class":390},[384,1094,402],{"class":401},[384,1096,406],{"class":405},[384,1098,49],{"class":401},[384,1100,1101],{"class":405},"):",[384,1103,1104],{"class":827},"          # O(n)\n",[384,1106,1107,1109,1111,1113,1115,1117],{"class":386,"line":414},[384,1108,417],{"class":394},[384,1110,420],{"class":405},[384,1112,423],{"class":394},[384,1114,426],{"class":405},[384,1116,429],{"class":394},[384,1118,432],{"class":405},[384,1120,1121,1123,1125,1127,1129,1131,1133,1135],{"class":386,"line":500},[384,1122,391],{"class":390},[384,1124,395],{"class":394},[384,1126,398],{"class":390},[384,1128,402],{"class":401},[384,1130,406],{"class":405},[384,1132,49],{"class":401},[384,1134,1101],{"class":405},[384,1136,1137],{"class":827},"          # O(n²)\n",[384,1139,1140,1142,1144,1146,1148,1150,1152],{"class":386,"line":602},[384,1141,547],{"class":390},[384,1143,550],{"class":394},[384,1145,398],{"class":390},[384,1147,402],{"class":401},[384,1149,406],{"class":405},[384,1151,49],{"class":401},[384,1153,411],{"class":405},[384,1155,1156,1159,1161],{"class":386,"line":721},[384,1157,1158],{"class":394},"        paren ",[384,1160,420],{"class":405},[384,1162,918],{"class":459},[372,1164,1165],{"v-slot:java":374},[376,1166,1168],{"className":437,"code":1167,"language":439,"meta":374,"style":374},"for (int i = 0; i \u003C n; i++) {          \u002F\u002F O(n)\n    totaal += a[i];\n}\nfor (int i = 0; i \u003C n; i++) {          \u002F\u002F O(n²)\n    for (int j = 0; j \u003C n; j++) {\n        paren++;\n    }\n}\n",[47,1169,1170,1204,1218,1222,1255,1285,1293,1297],{"__ignoreMap":374},[384,1171,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1201],{"class":386,"line":387},[384,1173,391],{"class":390},[384,1175,18],{"class":405},[384,1177,451],{"class":450},[384,1179,395],{"class":394},[384,1181,456],{"class":405},[384,1183,460],{"class":459},[384,1185,463],{"class":405},[384,1187,395],{"class":394},[384,1189,468],{"class":405},[384,1191,471],{"class":394},[384,1193,463],{"class":405},[384,1195,476],{"class":394},[384,1197,479],{"class":405},[384,1199,1200],{"class":405}," {",[384,1202,1203],{"class":827},"          \u002F\u002F O(n)\n",[384,1205,1206,1208,1210,1212,1214,1216],{"class":386,"line":414},[384,1207,417],{"class":394},[384,1209,420],{"class":405},[384,1211,423],{"class":394},[384,1213,426],{"class":405},[384,1215,429],{"class":394},[384,1217,497],{"class":405},[384,1219,1220],{"class":386,"line":500},[384,1221,503],{"class":405},[384,1223,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252],{"class":386,"line":602},[384,1225,391],{"class":390},[384,1227,18],{"class":405},[384,1229,451],{"class":450},[384,1231,395],{"class":394},[384,1233,456],{"class":405},[384,1235,460],{"class":459},[384,1237,463],{"class":405},[384,1239,395],{"class":394},[384,1241,468],{"class":405},[384,1243,471],{"class":394},[384,1245,463],{"class":405},[384,1247,476],{"class":394},[384,1249,479],{"class":405},[384,1251,1200],{"class":405},[384,1253,1254],{"class":827},"          \u002F\u002F O(n²)\n",[384,1256,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283],{"class":386,"line":721},[384,1258,547],{"class":390},[384,1260,18],{"class":405},[384,1262,451],{"class":450},[384,1264,550],{"class":394},[384,1266,456],{"class":405},[384,1268,460],{"class":459},[384,1270,463],{"class":405},[384,1272,550],{"class":394},[384,1274,468],{"class":405},[384,1276,471],{"class":394},[384,1278,463],{"class":405},[384,1280,678],{"class":394},[384,1282,479],{"class":405},[384,1284,482],{"class":405},[384,1286,1287,1290],{"class":386,"line":727},[384,1288,1289],{"class":394},"        paren",[384,1291,1292],{"class":405},"++;\n",[384,1294,1295],{"class":386,"line":733},[384,1296,730],{"class":405},[384,1298,1300],{"class":386,"line":1299},8,[384,1301,503],{"class":405},[11,1303,1304,1307,1308,1311,1312,150],{},[47,1305,1306],{},"O(n) + O(n²) = O(n²)",". Nesten ",[15,1309,1310],{},"vermenigvuldigt",", achter elkaar zetten ",[15,1313,1314],{},"telt op",[364,1316,1318],{"id":1317},"een-lus-met-een-logaritmische-binnenlus","Een lus met een logaritmische binnenlus",[369,1320,1321,1376],{},[372,1322,1323],{"v-slot:python":374},[376,1324,1326],{"className":378,"code":1325,"language":380,"meta":374,"style":374},"for i in range(n):\n    j = 1\n    while j \u003C n:\n        j *= 2\n",[47,1327,1328,1344,1353,1366],{"__ignoreMap":374},[384,1329,1330,1332,1334,1336,1338,1340,1342],{"class":386,"line":387},[384,1331,391],{"class":390},[384,1333,395],{"class":394},[384,1335,398],{"class":390},[384,1337,402],{"class":401},[384,1339,406],{"class":405},[384,1341,49],{"class":401},[384,1343,411],{"class":405},[384,1345,1346,1349,1351],{"class":386,"line":414},[384,1347,1348],{"class":394},"    j ",[384,1350,456],{"class":405},[384,1352,918],{"class":459},[384,1354,1355,1358,1360,1362,1364],{"class":386,"line":500},[384,1356,1357],{"class":390},"    while",[384,1359,550],{"class":394},[384,1361,468],{"class":405},[384,1363,471],{"class":394},[384,1365,813],{"class":405},[384,1367,1368,1371,1373],{"class":386,"line":602},[384,1369,1370],{"class":394},"        j ",[384,1372,937],{"class":405},[384,1374,1375],{"class":459}," 2\n",[372,1377,1378],{"v-slot:java":374},[376,1379,1381],{"className":437,"code":1380,"language":439,"meta":374,"style":374},"for (int i = 0; i \u003C n; i++) {\n    int j = 1;\n    while (j \u003C n) {\n        j *= 2;\n    }\n}\n",[47,1382,1383,1413,1426,1443,1453,1457],{"__ignoreMap":374},[384,1384,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411],{"class":386,"line":387},[384,1386,391],{"class":390},[384,1388,18],{"class":405},[384,1390,451],{"class":450},[384,1392,395],{"class":394},[384,1394,456],{"class":405},[384,1396,460],{"class":459},[384,1398,463],{"class":405},[384,1400,395],{"class":394},[384,1402,468],{"class":405},[384,1404,471],{"class":394},[384,1406,463],{"class":405},[384,1408,476],{"class":394},[384,1410,479],{"class":405},[384,1412,482],{"class":405},[384,1414,1415,1418,1420,1422,1424],{"class":386,"line":414},[384,1416,1417],{"class":450},"    int",[384,1419,550],{"class":394},[384,1421,456],{"class":405},[384,1423,565],{"class":459},[384,1425,848],{"class":405},[384,1427,1428,1430,1432,1435,1437,1439,1441],{"class":386,"line":500},[384,1429,1357],{"class":390},[384,1431,18],{"class":405},[384,1433,1434],{"class":394},"j ",[384,1436,468],{"class":405},[384,1438,471],{"class":394},[384,1440,863],{"class":405},[384,1442,482],{"class":405},[384,1444,1445,1447,1449,1451],{"class":386,"line":602},[384,1446,1370],{"class":394},[384,1448,937],{"class":405},[384,1450,824],{"class":459},[384,1452,848],{"class":405},[384,1454,1455],{"class":386,"line":721},[384,1456,730],{"class":405},[384,1458,1459],{"class":386,"line":727},[384,1460,503],{"class":405},[11,1462,1463,1464,1466,1467,509,1469,150],{},"De buitenste lus draait ",[47,1465,49],{}," keer, de binnenste elke keer ",[47,1468,195],{},[15,1470,1471],{},[47,1472,219],{},[39,1474,1476],{"id":1475},"recursie-en-recurrente-betrekkingen","Recursie en recurrente betrekkingen",[11,1478,1479,1480,1483,1484,1487,1488,1490,1491,1494],{},"Bij een recursieve functie schrijf je de looptijd op als een ",[15,1481,1482],{},"recurrente betrekking","\n(",[20,1485,1486],{},"recurrence relation","): een formule die ",[47,1489,53],{}," uitdrukt in ",[47,1492,1493],{},"T"," van een kleinere invoer.",[11,1496,1497],{},"Een paar standaardgevallen:",[226,1499,1500,1513],{},[229,1501,1502],{},[232,1503,1504,1507,1510],{},[235,1505,1506],{},"Code-patroon",[235,1508,1509],{},"Recurrente betrekking",[235,1511,1512],{},"Oplossing",[248,1514,1515,1532,1549,1565,1579],{},[232,1516,1517,1523,1528],{},[253,1518,1519,1520,1522],{},"één recursieve aanroep op ",[47,1521,745],{},", constant werk",[253,1524,1525],{},[47,1526,1527],{},"T(n) = T(n-1) + 1",[253,1529,1530],{},[47,1531,119],{},[232,1533,1534,1540,1545],{},[253,1535,1536,1537,1539],{},"één aanroep op ",[47,1538,745],{},", lineair werk (bv. een lus)",[253,1541,1542],{},[47,1543,1544],{},"T(n) = T(n-1) + n",[253,1546,1547],{},[47,1548,108],{},[232,1550,1551,1556,1561],{},[253,1552,1553,1554,863],{},"één aanroep op de helft, constant werk (",[28,1555,284],{"href":283},[253,1557,1558],{},[47,1559,1560],{},"T(n) = T(n\u002F2) + 1",[253,1562,1563],{},[47,1564,214],{},[232,1566,1567,1570,1575],{},[253,1568,1569],{},"twee aanroepen op de helft, lineair werk (merge sort)",[253,1571,1572],{},[47,1573,1574],{},"T(n) = 2T(n\u002F2) + n",[253,1576,1577],{},[47,1578,219],{},[232,1580,1581,1587,1592],{},[253,1582,1583,1584,1586],{},"twee aanroepen op ",[47,1585,745],{}," (naïeve Fibonacci)",[253,1588,1589],{},[47,1590,1591],{},"T(n) = 2T(n-1) + 1",[253,1593,1594],{},[47,1595,224],{},[11,1597,1598],{},"Een voorbeeld: de som van een lijst, recursief.",[369,1600,1601,1745],{},[372,1602,1603],{"v-slot:python":374},[376,1604,1606],{"className":378,"code":1605,"language":380,"meta":374,"style":374},"def som(a, n):\n    # basisgeval: een lege lijst heeft som 0\n    if n == 0:\n        return 0\n    # één recursieve aanroep op n-1, plus constant werk\n    return som(a, n - 1) + a[n - 1]\n\nprint(som([4, 1, 7, 3], 4))  # 15\n",[47,1607,1608,1627,1632,1647,1655,1660,1698,1704],{"__ignoreMap":374},[384,1609,1610,1613,1616,1618,1621,1623,1625],{"class":386,"line":387},[384,1611,1612],{"class":450},"def",[384,1614,1615],{"class":401}," som",[384,1617,406],{"class":405},[384,1619,28],{"class":1620},"sHdIc",[384,1622,568],{"class":405},[384,1624,471],{"class":1620},[384,1626,411],{"class":405},[384,1628,1629],{"class":386,"line":414},[384,1630,1631],{"class":827},"    # basisgeval: een lege lijst heeft som 0\n",[384,1633,1634,1637,1640,1643,1645],{"class":386,"line":500},[384,1635,1636],{"class":390},"    if",[384,1638,1639],{"class":394}," n ",[384,1641,1642],{"class":405},"==",[384,1644,460],{"class":459},[384,1646,813],{"class":405},[384,1648,1649,1652],{"class":386,"line":602},[384,1650,1651],{"class":390},"        return",[384,1653,1654],{"class":459}," 0\n",[384,1656,1657],{"class":386,"line":721},[384,1658,1659],{"class":827},"    # één recursieve aanroep op n-1, plus constant werk\n",[384,1661,1662,1665,1667,1669,1671,1673,1675,1678,1680,1682,1685,1687,1689,1692,1694,1696],{"class":386,"line":727},[384,1663,1664],{"class":390},"    return",[384,1666,1615],{"class":401},[384,1668,406],{"class":405},[384,1670,28],{"class":401},[384,1672,568],{"class":405},[384,1674,1639],{"class":401},[384,1676,1677],{"class":405},"-",[384,1679,565],{"class":459},[384,1681,863],{"class":405},[384,1683,1684],{"class":405}," +",[384,1686,423],{"class":394},[384,1688,426],{"class":405},[384,1690,1691],{"class":394},"n ",[384,1693,1677],{"class":405},[384,1695,565],{"class":459},[384,1697,432],{"class":405},[384,1699,1700],{"class":386,"line":733},[384,1701,1703],{"emptyLinePlaceholder":1702},true,"\n",[384,1705,1706,1709,1711,1714,1717,1719,1721,1723,1725,1728,1730,1733,1736,1739,1742],{"class":386,"line":1299},[384,1707,1708],{"class":401},"print",[384,1710,406],{"class":405},[384,1712,1713],{"class":401},"som",[384,1715,1716],{"class":405},"([",[384,1718,1044],{"class":459},[384,1720,568],{"class":405},[384,1722,565],{"class":459},[384,1724,568],{"class":405},[384,1726,1727],{"class":459}," 7",[384,1729,568],{"class":405},[384,1731,1732],{"class":459}," 3",[384,1734,1735],{"class":405},"],",[384,1737,1738],{"class":459}," 4",[384,1740,1741],{"class":405},"))",[384,1743,1744],{"class":827},"  # 15\n",[372,1746,1747],{"v-slot:java":374},[376,1748,1750],{"className":437,"code":1749,"language":439,"meta":374,"style":374},"static int som(int[] a, int n) {\n    \u002F\u002F basisgeval: een lege lijst heeft som 0\n    if (n == 0) {\n        return 0;\n    }\n    \u002F\u002F één recursieve aanroep op n-1, plus constant werk\n    return som(a, n - 1) + a[n - 1];\n}\n",[47,1751,1752,1781,1786,1802,1810,1814,1819,1853],{"__ignoreMap":374},[384,1753,1754,1757,1760,1762,1764,1766,1769,1771,1773,1775,1777,1779],{"class":386,"line":387},[384,1755,1756],{"class":450},"static",[384,1758,1759],{"class":450}," int",[384,1761,1615],{"class":401},[384,1763,406],{"class":405},[384,1765,451],{"class":450},[384,1767,1768],{"class":405},"[]",[384,1770,423],{"class":394},[384,1772,568],{"class":405},[384,1774,1759],{"class":450},[384,1776,471],{"class":394},[384,1778,863],{"class":405},[384,1780,482],{"class":405},[384,1782,1783],{"class":386,"line":414},[384,1784,1785],{"class":827},"    \u002F\u002F basisgeval: een lege lijst heeft som 0\n",[384,1787,1788,1790,1792,1794,1796,1798,1800],{"class":386,"line":500},[384,1789,1636],{"class":390},[384,1791,18],{"class":405},[384,1793,1691],{"class":394},[384,1795,1642],{"class":405},[384,1797,460],{"class":459},[384,1799,863],{"class":405},[384,1801,482],{"class":405},[384,1803,1804,1806,1808],{"class":386,"line":602},[384,1805,1651],{"class":390},[384,1807,460],{"class":459},[384,1809,848],{"class":405},[384,1811,1812],{"class":386,"line":721},[384,1813,730],{"class":405},[384,1815,1816],{"class":386,"line":727},[384,1817,1818],{"class":827},"    \u002F\u002F één recursieve aanroep op n-1, plus constant werk\n",[384,1820,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851],{"class":386,"line":733},[384,1822,1664],{"class":390},[384,1824,1615],{"class":401},[384,1826,406],{"class":405},[384,1828,28],{"class":394},[384,1830,568],{"class":405},[384,1832,1639],{"class":394},[384,1834,1677],{"class":405},[384,1836,565],{"class":459},[384,1838,863],{"class":405},[384,1840,1684],{"class":405},[384,1842,423],{"class":394},[384,1844,426],{"class":405},[384,1846,1691],{"class":394},[384,1848,1677],{"class":405},[384,1850,565],{"class":459},[384,1852,497],{"class":405},[384,1854,1855],{"class":386,"line":1299},[384,1856,503],{"class":405},[11,1858,1859,1860,1862,1863,1866,1867,150],{},"Dit is ",[47,1861,1527],{},". Uitschrijven (\"ontrollen\") laat zien wat er gebeurt:\n",[47,1864,1865],{},"T(n) = T(n-2) + 2 = T(n-3) + 3 = … = T(0) + n",", dus ",[15,1868,1869],{},[47,1870,119],{},[39,1872,1874],{"id":1873},"de-mastermethode","De mastermethode",[11,1876,1877,1878,18,1881,1884],{},"Voor recursies die het probleem in gelijke stukken delen, is er een kant-en-klaar recept: de\n",[15,1879,1880],{},"mastermethode",[20,1882,1883],{},"master theorem","). Hij werkt voor betrekkingen van de vorm",[11,1886,1887],{},[47,1888,1889],{},"T(n) = a · T(n\u002Fb) + n^d",[11,1891,1892,1893,1896,1897,1900,1901,1904,1905,1907,1908,1911],{},"met ",[47,1894,1895],{},"a ≥ 1"," deelproblemen, elk van grootte ",[47,1898,1899],{},"n\u002Fb",", en ",[47,1902,1903],{},"n^d"," werk buiten de recursie (splitsen en\nsamenvoegen). Je vergelijkt ",[47,1906,28],{}," met ",[47,1909,1910],{},"b^d",":",[226,1913,1914,1929],{},[229,1915,1916],{},[232,1917,1918,1921,1924,1926],{},[235,1919,1920],{},"Geval",[235,1922,1923],{},"Voorwaarde",[235,1925,1512],{},[235,1927,1928],{},"Wat domineert",[248,1930,1931,1948,1966],{},[232,1932,1933,1935,1940,1945],{},[253,1934,269],{},[253,1936,1937],{},[47,1938,1939],{},"a \u003C b^d",[253,1941,1942],{},[47,1943,1944],{},"Θ(n^d)",[253,1946,1947],{},"het werk bovenaan de boom",[232,1949,1950,1953,1958,1963],{},[253,1951,1952],{},"2",[253,1954,1955],{},[47,1956,1957],{},"a = b^d",[253,1959,1960],{},[47,1961,1962],{},"Θ(n^d log n)",[253,1964,1965],{},"elk niveau evenveel werk",[232,1967,1968,1971,1976,1981],{},[253,1969,1970],{},"3",[253,1972,1973],{},[47,1974,1975],{},"a > b^d",[253,1977,1978],{},[47,1979,1980],{},"Θ(n^(log_b a))",[253,1982,1983],{},"de bladeren onderaan",[11,1985,1986],{},"Uitgewerkt:",[226,1988,1989,2011],{},[229,1990,1991],{},[232,1992,1993,1996,1998,2001,2004,2006,2009],{},[235,1994,1995],{},"Betrekking",[235,1997,28],{},[235,1999,2000],{},"b",[235,2002,2003],{},"d",[235,2005,1910],{},[235,2007,2008],{},"Vergelijking",[235,2010,1512],{},[248,2012,2013,2035,2058,2080,2103],{},[232,2014,2015,2020,2022,2024,2026,2028,2030],{},[253,2016,2017,2019],{},[47,2018,1574],{}," (merge sort)",[253,2021,1952],{},[253,2023,1952],{},[253,2025,269],{},[253,2027,1952],{},[253,2029,1957],{},[253,2031,2032],{},[47,2033,2034],{},"Θ(n log n)",[232,2036,2037,2042,2044,2046,2049,2051,2053],{},[253,2038,2039,2041],{},[47,2040,1560],{}," (binair zoeken)",[253,2043,269],{},[253,2045,1952],{},[253,2047,2048],{},"0",[253,2050,269],{},[253,2052,1957],{},[253,2054,2055],{},[47,2056,2057],{},"Θ(log n)",[232,2059,2060,2065,2067,2069,2071,2073,2075],{},[253,2061,2062],{},[47,2063,2064],{},"T(n) = 2T(n\u002F2) + n²",[253,2066,1952],{},[253,2068,1952],{},[253,2070,1952],{},[253,2072,1044],{},[253,2074,1939],{},[253,2076,2077],{},[47,2078,2079],{},"Θ(n²)",[232,2081,2082,2087,2090,2092,2094,2096,2098],{},[253,2083,2084],{},[47,2085,2086],{},"T(n) = 8T(n\u002F2) + n²",[253,2088,2089],{},"8",[253,2091,1952],{},[253,2093,1952],{},[253,2095,1044],{},[253,2097,1975],{},[253,2099,2100],{},[47,2101,2102],{},"Θ(n^(log₂ 8)) = Θ(n³)",[232,2104,2105,2110,2112,2114,2116,2118,2120],{},[253,2106,2107],{},[47,2108,2109],{},"T(n) = 4T(n\u002F2) + n",[253,2111,1044],{},[253,2113,1952],{},[253,2115,269],{},[253,2117,1952],{},[253,2119,1975],{},[253,2121,2122],{},[47,2123,2124],{},"Θ(n^(log₂ 4)) = Θ(n²)",[11,2126,2127,2128,1866,2131,188,2134,150],{},"Let op het tweede voorbeeld: constant werk is ",[47,2129,2130],{},"n⁰",[47,2132,2133],{},"d = 0",[47,2135,2136],{},"b^d = 1",[11,2138,2139,2140,2142],{},"De intuïtie: teken de recursieboom. In geval 1 doet de wortel het meeste werk, in geval 3 zitten de\nkosten in de enorme hoeveelheid bladeren, en in geval 2 kost elk van de ",[47,2141,195],{}," niveaus evenveel.",[11,2144,2145,2146,2149,2150,2152,2153,2155],{},"De mastermethode werkt ",[15,2147,2148],{},"niet"," voor ",[47,2151,1544],{},": daar wordt ",[47,2154,49],{}," niet gedeeld maar met één\nverminderd. Die los je op door te ontrollen, zoals hierboven.",[39,2157,2159],{"id":2158},"complexiteit-in-één-tabel","Complexiteit in één tabel",[226,2161,2162,2171],{},[229,2163,2164],{},[232,2165,2166,2169],{},[235,2167,2168],{},"Situatie",[235,2170,17],{},[248,2172,2173,2184,2193,2202,2217,2228,2236],{},[232,2174,2175,2180],{},[253,2176,2177,2178],{},"vaste hoeveelheid werk, onafhankelijk van ",[47,2179,49],{},[253,2181,2182],{},[47,2183,210],{},[232,2185,2186,2189],{},[253,2187,2188],{},"teller halveert of verdubbelt",[253,2190,2191],{},[47,2192,214],{},[232,2194,2195,2198],{},[253,2196,2197],{},"één lus over alle elementen",[253,2199,2200],{},[47,2201,119],{},[232,2203,2204,2213],{},[253,2205,2206,2207,2209,2210,2212],{},"lus van ",[47,2208,49],{}," met daarbinnen een ",[47,2211,195],{},"-lus",[253,2214,2215],{},[47,2216,219],{},[232,2218,2219,2224],{},[253,2220,2221,2222],{},"twee geneste lussen over ",[47,2223,49],{},[253,2225,2226],{},[47,2227,108],{},[232,2229,2230,2233],{},[253,2231,2232],{},"twee lussen ná elkaar",[253,2234,2235],{},"de grootste van de twee",[232,2237,2238,2241],{},[253,2239,2240],{},"alle deelverzamelingen proberen",[253,2242,2243],{},[47,2244,224],{},[39,2246,2248],{"id":2247},"veelgemaakte-fouten-op-het-tentamen","Veelgemaakte fouten op het tentamen",[129,2250,2251,2265,2271,2279,2301],{},[59,2252,2253,2259,2260,2262,2263,150],{},[15,2254,2255,2256,2258],{},"Elke geneste lus is ",[47,2257,108],{}," noemen."," Kijk naar wat de binnenste lus doet. Halveert de teller,\ndan is het ",[47,2261,219],{},". Loopt de binnenste lus een vast aantal keer (bijvoorbeeld 3), dan is het\ngewoon ",[47,2264,119],{},[59,2266,2267,2270],{},[15,2268,2269],{},"Optellen en vermenigvuldigen door elkaar halen."," Lussen ná elkaar: optellen, de grootste\nhouden. Lussen ín elkaar: vermenigvuldigen.",[59,2272,2273,136,2276,2278],{},[15,2274,2275],{},"Een te ruime grens geven.",[47,2277,108],{}," voor een enkele lus is technisch niet fout, maar levert op het\ntentamen geen punten op. Geef de strakke grens.",[59,2280,2281,2286,2287,2289,2290,2293,2294,1907,2296,2298,2299,150],{},[15,2282,2283,2285],{},[47,2284,2003],{}," verkeerd aflezen bij de mastermethode."," Constant werk betekent ",[47,2288,2133],{},", niet ",[47,2291,2292],{},"d = 1",". En\nvergelijk ",[47,2295,28],{},[47,2297,1910],{},", niet met ",[47,2300,2000],{},[59,2302,2303,2309,2310,2312],{},[15,2304,2305,2306,150],{},"De mastermethode toepassen op ",[47,2307,2308],{},"T(n-1)"," Alleen bij delen door ",[47,2311,2000],{}," werkt het recept; bij\naftrekken ontrol je de recursie.",[39,2314,2316],{"id":2315},"samenvatting","Samenvatting",[56,2318,2319,2328,2339,2344,2355],{},[59,2320,2321,2322,1907,2325,2327],{},"Big-O beschrijft hoe de looptijd ",[15,2323,2324],{},"groeit",[47,2326,49],{},"; constanten en lagere termen vallen weg.",[59,2329,2330,2331,2334,2335,2289,2337,150],{},"Op het tentamen geef je de ",[15,2332,2333],{},"strakke"," grens: een enkele lus is ",[47,2336,119],{},[47,2338,108],{},[59,2340,2341,2342,150],{},"Geneste lussen vermenigvuldig je, opeenvolgende lussen tel je op; een halverende teller geeft ",[47,2343,195],{},[59,2345,2346,2347,2350,2351,1907,2353,150],{},"Recursie schrijf je als recurrente betrekking; bij ",[47,2348,2349],{},"T(n) = aT(n\u002Fb) + n^d"," vergelijk je ",[47,2352,28],{},[47,2354,1910],{},[59,2356,2357,2358,211,2360,211,2362,211,2364,211,2366,211,2368,150],{},"Volgorde om te onthouden: ",[47,2359,210],{},[47,2361,214],{},[47,2363,119],{},[47,2365,219],{},[47,2367,108],{},[47,2369,224],{},[2371,2372,2373],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":374,"searchDepth":414,"depth":414,"links":2375},[2376,2377,2378,2379,2386,2387,2388,2389,2390],{"id":41,"depth":414,"text":42},{"id":123,"depth":414,"text":124},{"id":201,"depth":414,"text":202},{"id":358,"depth":414,"text":359,"children":2380},[2381,2382,2383,2384,2385],{"id":366,"depth":500,"text":367},{"id":516,"depth":500,"text":517},{"id":779,"depth":500,"text":780},{"id":1071,"depth":500,"text":1072},{"id":1317,"depth":500,"text":1318},{"id":1475,"depth":414,"text":1476},{"id":1873,"depth":414,"text":1874},{"id":2158,"depth":414,"text":2159},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Big-O en Θ zonder wiskundejargon: rekenregels, lussen tellen, recurrente betrekkingen en de mastermethode, met uitgewerkte voorbeelden en tentamenvalkuilen.","md","i-lucide-gauge",{},"\u002Fpracticely-dsa\u002Fcomplexiteit",{"title":6,"description":2391},"practicely-dsa\u002Fcomplexiteit","complexiteit","FRnTzgDnOlupyMzKYCNsrD-F9LNSzcJzhvVlXgf7zgI",{"id":2401,"title":2402,"body":2403,"description":6362,"extension":2392,"icon":6363,"meta":6364,"navigation":1702,"order":414,"path":6365,"seo":6366,"stem":6367,"topic":31,"__hash__":6368},"practicelyDsa\u002Fpracticely-dsa\u002Fsorteren.md","Sorteeralgoritmes uitgelegd: van insertion sort tot quicksort",{"type":8,"value":2404,"toc":6350},[2405,2412,2422,2426,2429,2525,2531,2534,2539,2634,2640,3017,3033,3036,3041,3161,3182,3614,3623,3626,3631,3709,3737,3743,4117,4121,4139,4277,4284,5033,5048,5052,5068,5076,5085,5094,5277,5292,6015,6034,6038,6041,6064,6066,6214,6228,6230,6295,6297,6347],[11,2406,2407,2408,2411],{},"Sorteren is het bekendste probleem uit de informatica: zet een rij getallen van klein naar groot. Je\ngebruikt in de praktijk bijna altijd de ingebouwde ",[47,2409,2410],{},"sort()",", maar op het tentamen moet je laten zien\ndat je snapt wat er onder de motorkap gebeurt. De klassieke vraag is: \"hoe ziet de array eruit na\nronde 2?\" En in sollicitatiegesprekken is \"waarom is quicksort in het slechtste geval kwadratisch?\"\neen vaste kandidaat.",[11,2413,2414,2415,2418,2419,150],{},"Op deze pagina behandelen we vijf algoritmes. Bij elk staat een uitgewerkt voorbeeld met de toestand\n",[15,2416,2417],{},"na elke ronde",", precies zoals de oefeningen eronder het vragen. Ken je Big-O nog niet goed, lees\ndan eerst ",[28,2420,2398],{"href":2421},"\u002Fpracticely\u002Fdsa\u002Fcomplexiteit",[39,2423,2425],{"id":2424},"wat-betekent-na-ronde-k","Wat betekent \"na ronde k\"?",[11,2427,2428],{},"Een traceervraag heeft alleen één goed antwoord als iedereen dezelfde variant bedoelt. Op Practicely\ngelden deze afspraken (rondes tellen vanaf 1, arrays zijn 0-geïndexeerd):",[226,2430,2431,2444],{},[229,2432,2433],{},[232,2434,2435,2438,2441],{},[235,2436,2437],{},"Algoritme",[235,2439,2440],{},"Eén ronde",[235,2442,2443],{},"Toestand na ronde k",[248,2445,2446,2463,2489,2506],{},[232,2447,2448,2451,2457],{},[253,2449,2450],{},"Insertion sort",[253,2452,2453,2456],{},[47,2454,2455],{},"a[k]"," wordt ingevoegd in het gesorteerde deel links ervan",[253,2458,2459,2462],{},[47,2460,2461],{},"a[0..k]"," gesorteerd, de rest onveranderd",[232,2464,2465,2468,2482],{},[253,2466,2467],{},"Selection sort",[253,2469,2470,2471,188,2474,2477,2478,2481],{},"zoek het minimum in ",[47,2472,2473],{},"a[k-1..n-1]",[15,2475,2476],{},"wissel"," het met ",[47,2479,2480],{},"a[k-1]",", ook als dat hetzelfde element is",[253,2483,2484,2485,2488],{},"de ",[47,2486,2487],{},"k"," kleinste staan gesorteerd vooraan",[232,2490,2491,2494,2501],{},[253,2492,2493],{},"Bubble sort",[253,2495,2496,2497,2500],{},"één volledige doorloop van links naar rechts, wissel buren als ",[47,2498,2499],{},"a[j] > a[j+1]",", geen vroegtijdige stop",[253,2502,2484,2503,2505],{},[47,2504,2487],{}," grootste staan gesorteerd achteraan",[232,2507,2508,2511,2518],{},[253,2509,2510],{},"Quicksort",[253,2512,2513,2514,2517],{},"Lomuto-partitie met het ",[15,2515,2516],{},"laatste"," element als pivot",[253,2519,2520,2521,2524],{},"de vraag gaat over de array na de ",[15,2522,2523],{},"eerste"," partitie",[11,2526,2527,2528,150],{},"In alle voorbeelden hieronder sorteren we dezelfde array: ",[47,2529,2530],{},"[5, 2, 4, 6, 1, 3]",[39,2532,2450],{"id":2533},"insertion-sort",[11,2535,2536,2538],{},[15,2537,2450],{}," (invoegend sorteren) werkt zoals je kaarten in je hand sorteert: je pakt de\nvolgende kaart en schuift hem naar links tot hij op zijn plek zit. Het deel links van de huidige\npositie is steeds al gesorteerd.",[226,2540,2541,2554],{},[229,2542,2543],{},[232,2544,2545,2548,2551],{},[235,2546,2547],{},"Ronde",[235,2549,2550],{},"Ingevoegd element",[235,2552,2553],{},"Array na de ronde",[248,2555,2556,2569,2582,2595,2608,2621],{},[232,2557,2558,2561,2564],{},[253,2559,2560],{},"start",[253,2562,2563],{},"–",[253,2565,2566],{},[47,2567,2568],{},"5, 2, 4, 6, 1, 3",[232,2570,2571,2573,2577],{},[253,2572,269],{},[253,2574,2575],{},[47,2576,1952],{},[253,2578,2579],{},[47,2580,2581],{},"2, 5, 4, 6, 1, 3",[232,2583,2584,2586,2590],{},[253,2585,1952],{},[253,2587,2588],{},[47,2589,1044],{},[253,2591,2592],{},[47,2593,2594],{},"2, 4, 5, 6, 1, 3",[232,2596,2597,2599,2604],{},[253,2598,1970],{},[253,2600,2601],{},[47,2602,2603],{},"6",[253,2605,2606],{},[47,2607,2594],{},[232,2609,2610,2612,2616],{},[253,2611,1044],{},[253,2613,2614],{},[47,2615,269],{},[253,2617,2618],{},[47,2619,2620],{},"1, 2, 4, 5, 6, 3",[232,2622,2623,2625,2629],{},[253,2624,1025],{},[253,2626,2627],{},[47,2628,1970],{},[253,2630,2631],{},[47,2632,2633],{},"1, 2, 3, 4, 5, 6",[11,2635,2636,2637,2639],{},"Let op ronde 3: ",[47,2638,2603],{}," is groter dan alles links ervan, dus er verandert niets. Dat telt wél als ronde.",[369,2641,2642,2812],{},[372,2643,2644],{"v-slot:python":374},[376,2645,2647],{"className":378,"code":2646,"language":380,"meta":374,"style":374},"def insertion_sort(a):\n    for k in range(1, len(a)):\n        x = a[k]\n        j = k - 1\n        # schuif grotere elementen één plek naar rechts\n        while j >= 0 and a[j] > x:\n            a[j + 1] = a[j]\n            j -= 1\n        a[j + 1] = x  # na ronde k is a[0..k] gesorteerd\n",[47,2648,2649,2662,2689,2704,2716,2721,2752,2778,2788],{"__ignoreMap":374},[384,2650,2651,2653,2656,2658,2660],{"class":386,"line":387},[384,2652,1612],{"class":450},[384,2654,2655],{"class":401}," insertion_sort",[384,2657,406],{"class":405},[384,2659,28],{"class":1620},[384,2661,411],{"class":405},[384,2663,2664,2666,2669,2671,2673,2675,2677,2679,2682,2684,2686],{"class":386,"line":414},[384,2665,547],{"class":390},[384,2667,2668],{"class":394}," k ",[384,2670,398],{"class":390},[384,2672,402],{"class":401},[384,2674,406],{"class":405},[384,2676,269],{"class":459},[384,2678,568],{"class":405},[384,2680,2681],{"class":401}," len",[384,2683,406],{"class":405},[384,2685,28],{"class":401},[384,2687,2688],{"class":405},")):\n",[384,2690,2691,2694,2696,2698,2700,2702],{"class":386,"line":500},[384,2692,2693],{"class":394},"        x ",[384,2695,456],{"class":405},[384,2697,423],{"class":394},[384,2699,426],{"class":405},[384,2701,2487],{"class":394},[384,2703,432],{"class":405},[384,2705,2706,2708,2710,2712,2714],{"class":386,"line":602},[384,2707,1370],{"class":394},[384,2709,456],{"class":405},[384,2711,2668],{"class":394},[384,2713,1677],{"class":405},[384,2715,918],{"class":459},[384,2717,2718],{"class":386,"line":721},[384,2719,2720],{"class":827},"        # schuif grotere elementen één plek naar rechts\n",[384,2722,2723,2726,2728,2731,2733,2736,2738,2740,2742,2744,2747,2750],{"class":386,"line":727},[384,2724,2725],{"class":390},"        while",[384,2727,550],{"class":394},[384,2729,2730],{"class":405},">=",[384,2732,460],{"class":459},[384,2734,2735],{"class":405}," and",[384,2737,423],{"class":394},[384,2739,426],{"class":405},[384,2741,596],{"class":394},[384,2743,586],{"class":405},[384,2745,2746],{"class":405}," >",[384,2748,2749],{"class":394}," x",[384,2751,813],{"class":405},[384,2753,2754,2757,2759,2761,2763,2765,2767,2770,2772,2774,2776],{"class":386,"line":733},[384,2755,2756],{"class":394},"            a",[384,2758,426],{"class":405},[384,2760,1434],{"class":394},[384,2762,562],{"class":405},[384,2764,565],{"class":459},[384,2766,586],{"class":405},[384,2768,2769],{"class":405}," =",[384,2771,423],{"class":394},[384,2773,426],{"class":405},[384,2775,596],{"class":394},[384,2777,432],{"class":405},[384,2779,2780,2783,2786],{"class":386,"line":1299},[384,2781,2782],{"class":394},"            j ",[384,2784,2785],{"class":405},"-=",[384,2787,918],{"class":459},[384,2789,2791,2794,2796,2798,2800,2802,2804,2806,2809],{"class":386,"line":2790},9,[384,2792,2793],{"class":394},"        a",[384,2795,426],{"class":405},[384,2797,1434],{"class":394},[384,2799,562],{"class":405},[384,2801,565],{"class":459},[384,2803,586],{"class":405},[384,2805,2769],{"class":405},[384,2807,2808],{"class":394}," x  ",[384,2810,2811],{"class":827},"# na ronde k is a[0..k] gesorteerd\n",[372,2813,2814],{"v-slot:java":374},[376,2815,2817],{"className":437,"code":2816,"language":439,"meta":374,"style":374},"static void insertionSort(int[] a) {\n    for (int k = 1; k \u003C a.length; k++) {\n        int x = a[k];\n        int j = k - 1;\n        \u002F\u002F schuif grotere elementen één plek naar rechts\n        while (j >= 0 && a[j] > x) {\n            a[j + 1] = a[j];\n            j--;\n        }\n        a[j + 1] = x; \u002F\u002F na ronde k is a[0..k] gesorteerd\n    }\n}\n",[47,2818,2819,2841,2877,2895,2911,2916,2947,2971,2979,2983,3007,3012],{"__ignoreMap":374},[384,2820,2821,2823,2826,2829,2831,2833,2835,2837,2839],{"class":386,"line":387},[384,2822,1756],{"class":450},[384,2824,2825],{"class":450}," void",[384,2827,2828],{"class":401}," insertionSort",[384,2830,406],{"class":405},[384,2832,451],{"class":450},[384,2834,1768],{"class":405},[384,2836,423],{"class":394},[384,2838,863],{"class":405},[384,2840,482],{"class":405},[384,2842,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2868,2870,2873,2875],{"class":386,"line":414},[384,2844,547],{"class":390},[384,2846,18],{"class":405},[384,2848,451],{"class":450},[384,2850,2668],{"class":394},[384,2852,456],{"class":405},[384,2854,565],{"class":459},[384,2856,463],{"class":405},[384,2858,2668],{"class":394},[384,2860,468],{"class":405},[384,2862,423],{"class":394},[384,2864,150],{"class":405},[384,2866,2867],{"class":394},"length",[384,2869,463],{"class":405},[384,2871,2872],{"class":394}," k",[384,2874,479],{"class":405},[384,2876,482],{"class":405},[384,2878,2879,2882,2885,2887,2889,2891,2893],{"class":386,"line":500},[384,2880,2881],{"class":450},"        int",[384,2883,2884],{"class":394}," x ",[384,2886,456],{"class":405},[384,2888,423],{"class":394},[384,2890,426],{"class":405},[384,2892,2487],{"class":394},[384,2894,497],{"class":405},[384,2896,2897,2899,2901,2903,2905,2907,2909],{"class":386,"line":602},[384,2898,2881],{"class":450},[384,2900,550],{"class":394},[384,2902,456],{"class":405},[384,2904,2668],{"class":394},[384,2906,1677],{"class":405},[384,2908,565],{"class":459},[384,2910,848],{"class":405},[384,2912,2913],{"class":386,"line":721},[384,2914,2915],{"class":827},"        \u002F\u002F schuif grotere elementen één plek naar rechts\n",[384,2917,2918,2920,2922,2924,2926,2928,2931,2933,2935,2937,2939,2941,2943,2945],{"class":386,"line":727},[384,2919,2725],{"class":390},[384,2921,18],{"class":405},[384,2923,1434],{"class":394},[384,2925,2730],{"class":405},[384,2927,460],{"class":459},[384,2929,2930],{"class":405}," &&",[384,2932,423],{"class":394},[384,2934,426],{"class":405},[384,2936,596],{"class":394},[384,2938,586],{"class":405},[384,2940,2746],{"class":405},[384,2942,2749],{"class":394},[384,2944,863],{"class":405},[384,2946,482],{"class":405},[384,2948,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969],{"class":386,"line":733},[384,2950,2756],{"class":394},[384,2952,426],{"class":405},[384,2954,1434],{"class":394},[384,2956,562],{"class":405},[384,2958,565],{"class":459},[384,2960,586],{"class":405},[384,2962,2769],{"class":405},[384,2964,423],{"class":394},[384,2966,426],{"class":405},[384,2968,596],{"class":394},[384,2970,497],{"class":405},[384,2972,2973,2976],{"class":386,"line":1299},[384,2974,2975],{"class":394},"            j",[384,2977,2978],{"class":405},"--;\n",[384,2980,2981],{"class":386,"line":2790},[384,2982,724],{"class":405},[384,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004],{"class":386,"line":2985},10,[384,2987,2793],{"class":394},[384,2989,426],{"class":405},[384,2991,1434],{"class":394},[384,2993,562],{"class":405},[384,2995,565],{"class":459},[384,2997,586],{"class":405},[384,2999,2769],{"class":405},[384,3001,2749],{"class":394},[384,3003,463],{"class":405},[384,3005,3006],{"class":827}," \u002F\u002F na ronde k is a[0..k] gesorteerd\n",[384,3008,3010],{"class":386,"line":3009},11,[384,3011,730],{"class":405},[384,3013,3015],{"class":386,"line":3014},12,[384,3016,503],{"class":405},[11,3018,3019,3020,3022,3023,3026,3027,3030,3031,150],{},"Omdat de ",[47,3021,803],{}," stopt zodra ",[47,3024,3025],{},"a[j] > x"," niet meer geldt, schuiven gelijke elementen nooit langs\nelkaar. Daardoor is insertion sort ",[15,3028,3029],{},"stabiel",". Op een al gesorteerde array doet de binnenlus niets:\ndan is het ",[47,3032,119],{},[39,3034,2467],{"id":3035},"selection-sort",[11,3037,3038,3040],{},[15,3039,2467],{}," (selecterend sorteren) zoekt in elke ronde het kleinste element van het\nongesorteerde deel en wisselt het naar voren.",[226,3042,3043,3057],{},[229,3044,3045],{},[232,3046,3047,3049,3052,3055],{},[235,3048,2547],{},[235,3050,3051],{},"Zoekgebied",[235,3053,3054],{},"Minimum (index)",[235,3056,2553],{},[248,3058,3059,3071,3090,3108,3127,3144],{},[232,3060,3061,3063,3065,3067],{},[253,3062,2560],{},[253,3064,2563],{},[253,3066,2563],{},[253,3068,3069],{},[47,3070,2568],{},[232,3072,3073,3075,3080,3085],{},[253,3074,269],{},[253,3076,3077],{},[47,3078,3079],{},"a[0..5]",[253,3081,3082,3084],{},[47,3083,269],{}," (4)",[253,3086,3087],{},[47,3088,3089],{},"1, 2, 4, 6, 5, 3",[232,3091,3092,3094,3099,3104],{},[253,3093,1952],{},[253,3095,3096],{},[47,3097,3098],{},"a[1..5]",[253,3100,3101,3103],{},[47,3102,1952],{}," (1)",[253,3105,3106],{},[47,3107,3089],{},[232,3109,3110,3112,3117,3122],{},[253,3111,1970],{},[253,3113,3114],{},[47,3115,3116],{},"a[2..5]",[253,3118,3119,3121],{},[47,3120,1970],{}," (5)",[253,3123,3124],{},[47,3125,3126],{},"1, 2, 3, 6, 5, 4",[232,3128,3129,3131,3136,3140],{},[253,3130,1044],{},[253,3132,3133],{},[47,3134,3135],{},"a[3..5]",[253,3137,3138,3121],{},[47,3139,1044],{},[253,3141,3142],{},[47,3143,2633],{},[232,3145,3146,3148,3153,3157],{},[253,3147,1025],{},[253,3149,3150],{},[47,3151,3152],{},"a[4..5]",[253,3154,3155,3084],{},[47,3156,1025],{},[253,3158,3159],{},[47,3160,2633],{},[11,3162,3163,3164,3167,3168,3171,3172,3174,3175,3178,3179,150],{},"In ronde 2 staat het minimum al op zijn plek; de \"wissel\" van ",[47,3165,3166],{},"a[1]"," met zichzelf verandert niets.\nIn ronde 1 zie je ook waarom selection sort ",[15,3169,3170],{},"niet stabiel"," is: de ",[47,3173,1025],{}," springt in één keer van\nvoren naar index 4, over andere elementen heen. Bij gelijke waarden kan zo'n sprong hun volgorde\nomdraaien: ",[47,3176,3177],{},"[3a, 3b, 1]"," wordt na ronde 1 ",[47,3180,3181],{},"[1, 3b, 3a]",[369,3183,3184,3364],{},[372,3185,3186],{"v-slot:python":374},[376,3187,3189],{"className":378,"code":3188,"language":380,"meta":374,"style":374},"def selection_sort(a):\n    n = len(a)\n    for k in range(1, n):\n        # zoek het minimum in a[k-1..n-1]\n        m = k - 1\n        for j in range(k, n):\n            if a[j] \u003C a[m]:\n                m = j\n        # wissel altijd, ook als m == k-1\n        a[k - 1], a[m] = a[m], a[k - 1]\n",[47,3190,3191,3204,3220,3240,3245,3258,3279,3304,3314,3319],{"__ignoreMap":374},[384,3192,3193,3195,3198,3200,3202],{"class":386,"line":387},[384,3194,1612],{"class":450},[384,3196,3197],{"class":401}," selection_sort",[384,3199,406],{"class":405},[384,3201,28],{"class":1620},[384,3203,411],{"class":405},[384,3205,3206,3209,3211,3213,3215,3217],{"class":386,"line":414},[384,3207,3208],{"class":394},"    n ",[384,3210,456],{"class":405},[384,3212,2681],{"class":401},[384,3214,406],{"class":405},[384,3216,28],{"class":401},[384,3218,3219],{"class":405},")\n",[384,3221,3222,3224,3226,3228,3230,3232,3234,3236,3238],{"class":386,"line":500},[384,3223,547],{"class":390},[384,3225,2668],{"class":394},[384,3227,398],{"class":390},[384,3229,402],{"class":401},[384,3231,406],{"class":405},[384,3233,269],{"class":459},[384,3235,568],{"class":405},[384,3237,471],{"class":401},[384,3239,411],{"class":405},[384,3241,3242],{"class":386,"line":602},[384,3243,3244],{"class":827},"        # zoek het minimum in a[k-1..n-1]\n",[384,3246,3247,3250,3252,3254,3256],{"class":386,"line":721},[384,3248,3249],{"class":394},"        m ",[384,3251,456],{"class":405},[384,3253,2668],{"class":394},[384,3255,1677],{"class":405},[384,3257,918],{"class":459},[384,3259,3260,3263,3265,3267,3269,3271,3273,3275,3277],{"class":386,"line":727},[384,3261,3262],{"class":390},"        for",[384,3264,550],{"class":394},[384,3266,398],{"class":390},[384,3268,402],{"class":401},[384,3270,406],{"class":405},[384,3272,2487],{"class":401},[384,3274,568],{"class":405},[384,3276,471],{"class":401},[384,3278,411],{"class":405},[384,3280,3281,3284,3286,3288,3290,3292,3295,3297,3299,3302],{"class":386,"line":733},[384,3282,3283],{"class":390},"            if",[384,3285,423],{"class":394},[384,3287,426],{"class":405},[384,3289,596],{"class":394},[384,3291,586],{"class":405},[384,3293,3294],{"class":405}," \u003C",[384,3296,423],{"class":394},[384,3298,426],{"class":405},[384,3300,3301],{"class":394},"m",[384,3303,599],{"class":405},[384,3305,3306,3309,3311],{"class":386,"line":1299},[384,3307,3308],{"class":394},"                m ",[384,3310,456],{"class":405},[384,3312,3313],{"class":394}," j\n",[384,3315,3316],{"class":386,"line":2790},[384,3317,3318],{"class":827},"        # wissel altijd, ook als m == k-1\n",[384,3320,3321,3323,3325,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362],{"class":386,"line":2985},[384,3322,2793],{"class":394},[384,3324,426],{"class":405},[384,3326,3327],{"class":394},"k ",[384,3329,1677],{"class":405},[384,3331,565],{"class":459},[384,3333,1735],{"class":405},[384,3335,423],{"class":394},[384,3337,426],{"class":405},[384,3339,3301],{"class":394},[384,3341,586],{"class":405},[384,3343,2769],{"class":405},[384,3345,423],{"class":394},[384,3347,426],{"class":405},[384,3349,3301],{"class":394},[384,3351,1735],{"class":405},[384,3353,423],{"class":394},[384,3355,426],{"class":405},[384,3357,3327],{"class":394},[384,3359,1677],{"class":405},[384,3361,565],{"class":459},[384,3363,432],{"class":405},[372,3365,3366],{"v-slot:java":374},[376,3367,3369],{"className":437,"code":3368,"language":439,"meta":374,"style":374},"static void selectionSort(int[] a) {\n    int n = a.length;\n    for (int k = 1; k \u003C n; k++) {\n        \u002F\u002F zoek het minimum in a[k-1..n-1]\n        int m = k - 1;\n        for (int j = k; j \u003C n; j++) {\n            if (a[j] \u003C a[m]) {\n                m = j;\n            }\n        }\n        \u002F\u002F wissel altijd, ook als m == k-1\n        int tmp = a[k - 1];\n        a[k - 1] = a[m];\n        a[m] = tmp;\n    }\n}\n",[47,3370,3371,3392,3408,3438,3443,3460,3490,3516,3526,3531,3535,3540,3561,3586,3604,3609],{"__ignoreMap":374},[384,3372,3373,3375,3377,3380,3382,3384,3386,3388,3390],{"class":386,"line":387},[384,3374,1756],{"class":450},[384,3376,2825],{"class":450},[384,3378,3379],{"class":401}," selectionSort",[384,3381,406],{"class":405},[384,3383,451],{"class":450},[384,3385,1768],{"class":405},[384,3387,423],{"class":394},[384,3389,863],{"class":405},[384,3391,482],{"class":405},[384,3393,3394,3396,3398,3400,3402,3404,3406],{"class":386,"line":414},[384,3395,1417],{"class":450},[384,3397,1639],{"class":394},[384,3399,456],{"class":405},[384,3401,423],{"class":394},[384,3403,150],{"class":405},[384,3405,2867],{"class":394},[384,3407,848],{"class":405},[384,3409,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430,3432,3434,3436],{"class":386,"line":500},[384,3411,547],{"class":390},[384,3413,18],{"class":405},[384,3415,451],{"class":450},[384,3417,2668],{"class":394},[384,3419,456],{"class":405},[384,3421,565],{"class":459},[384,3423,463],{"class":405},[384,3425,2668],{"class":394},[384,3427,468],{"class":405},[384,3429,471],{"class":394},[384,3431,463],{"class":405},[384,3433,2872],{"class":394},[384,3435,479],{"class":405},[384,3437,482],{"class":405},[384,3439,3440],{"class":386,"line":602},[384,3441,3442],{"class":827},"        \u002F\u002F zoek het minimum in a[k-1..n-1]\n",[384,3444,3445,3447,3450,3452,3454,3456,3458],{"class":386,"line":721},[384,3446,2881],{"class":450},[384,3448,3449],{"class":394}," m ",[384,3451,456],{"class":405},[384,3453,2668],{"class":394},[384,3455,1677],{"class":405},[384,3457,565],{"class":459},[384,3459,848],{"class":405},[384,3461,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488],{"class":386,"line":727},[384,3463,3262],{"class":390},[384,3465,18],{"class":405},[384,3467,451],{"class":450},[384,3469,550],{"class":394},[384,3471,456],{"class":405},[384,3473,2872],{"class":394},[384,3475,463],{"class":405},[384,3477,550],{"class":394},[384,3479,468],{"class":405},[384,3481,471],{"class":394},[384,3483,463],{"class":405},[384,3485,678],{"class":394},[384,3487,479],{"class":405},[384,3489,482],{"class":405},[384,3491,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514],{"class":386,"line":733},[384,3493,3283],{"class":390},[384,3495,18],{"class":405},[384,3497,28],{"class":394},[384,3499,426],{"class":405},[384,3501,596],{"class":394},[384,3503,586],{"class":405},[384,3505,3294],{"class":405},[384,3507,423],{"class":394},[384,3509,426],{"class":405},[384,3511,3301],{"class":394},[384,3513,707],{"class":405},[384,3515,482],{"class":405},[384,3517,3518,3520,3522,3524],{"class":386,"line":1299},[384,3519,3308],{"class":394},[384,3521,456],{"class":405},[384,3523,678],{"class":394},[384,3525,848],{"class":405},[384,3527,3528],{"class":386,"line":2790},[384,3529,3530],{"class":405},"            }\n",[384,3532,3533],{"class":386,"line":2985},[384,3534,724],{"class":405},[384,3536,3537],{"class":386,"line":3009},[384,3538,3539],{"class":827},"        \u002F\u002F wissel altijd, ook als m == k-1\n",[384,3541,3542,3544,3547,3549,3551,3553,3555,3557,3559],{"class":386,"line":3014},[384,3543,2881],{"class":450},[384,3545,3546],{"class":394}," tmp ",[384,3548,456],{"class":405},[384,3550,423],{"class":394},[384,3552,426],{"class":405},[384,3554,3327],{"class":394},[384,3556,1677],{"class":405},[384,3558,565],{"class":459},[384,3560,497],{"class":405},[384,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584],{"class":386,"line":3563},13,[384,3565,2793],{"class":394},[384,3567,426],{"class":405},[384,3569,3327],{"class":394},[384,3571,1677],{"class":405},[384,3573,565],{"class":459},[384,3575,586],{"class":405},[384,3577,2769],{"class":405},[384,3579,423],{"class":394},[384,3581,426],{"class":405},[384,3583,3301],{"class":394},[384,3585,497],{"class":405},[384,3587,3589,3591,3593,3595,3597,3599,3602],{"class":386,"line":3588},14,[384,3590,2793],{"class":394},[384,3592,426],{"class":405},[384,3594,3301],{"class":394},[384,3596,586],{"class":405},[384,3598,2769],{"class":405},[384,3600,3601],{"class":394}," tmp",[384,3603,848],{"class":405},[384,3605,3607],{"class":386,"line":3606},15,[384,3608,730],{"class":405},[384,3610,3612],{"class":386,"line":3611},16,[384,3613,503],{"class":405},[11,3615,3616,3617,3620,3621,150],{},"Selection sort doet altijd evenveel vergelijkingen, ongeacht de invoer: ",[47,3618,3619],{},"n(n-1)\u002F2",". Ook een al\ngesorteerde array kost dus ",[47,3622,108],{},[39,3624,2493],{"id":3625},"bubble-sort",[11,3627,3628,3630],{},[15,3629,2493],{}," loopt van links naar rechts en wisselt twee buren als de linker groter is. Het\ngrootste element \"borrelt\" zo in één doorloop naar het einde.",[226,3632,3633,3644],{},[229,3634,3635],{},[232,3636,3637,3639,3642],{},[235,3638,2547],{},[235,3640,3641],{},"Aantal wissels",[235,3643,2553],{},[248,3645,3646,3656,3667,3678,3689,3699],{},[232,3647,3648,3650,3652],{},[253,3649,2560],{},[253,3651,2563],{},[253,3653,3654],{},[47,3655,2568],{},[232,3657,3658,3660,3662],{},[253,3659,269],{},[253,3661,1044],{},[253,3663,3664],{},[47,3665,3666],{},"2, 4, 5, 1, 3, 6",[232,3668,3669,3671,3673],{},[253,3670,1952],{},[253,3672,1952],{},[253,3674,3675],{},[47,3676,3677],{},"2, 4, 1, 3, 5, 6",[232,3679,3680,3682,3684],{},[253,3681,1970],{},[253,3683,1952],{},[253,3685,3686],{},[47,3687,3688],{},"2, 1, 3, 4, 5, 6",[232,3690,3691,3693,3695],{},[253,3692,1044],{},[253,3694,269],{},[253,3696,3697],{},[47,3698,2633],{},[232,3700,3701,3703,3705],{},[253,3702,1025],{},[253,3704,2048],{},[253,3706,3707],{},[47,3708,2633],{},[11,3710,3711,3712,3715,3716,3715,3719,3722,3723,3715,3726,3729,3730,3732,3733,3736],{},"Ronde 1 in detail: ",[47,3713,3714],{},"5>2"," wissel, ",[47,3717,3718],{},"5>4",[47,3720,3721],{},"5\u003C6"," niets, ",[47,3724,3725],{},"6>1",[47,3727,3728],{},"6>3"," wissel. Na ronde 1\nstaat ",[47,3731,2603],{}," achteraan, na ronde 2 staan ",[47,3734,3735],{},"5, 6"," achteraan, enzovoort.",[11,3738,3739,3740,3742],{},"Na ronde 4 is de array al gesorteerd. Er bestaat een variant die dan stopt (als een ronde geen enkele\nwissel deed), maar volgens onze afspraak loopt bubble sort altijd alle ",[47,3741,745],{}," rondes door.",[369,3744,3745,3897],{},[372,3746,3747],{"v-slot:python":374},[376,3748,3750],{"className":378,"code":3749,"language":380,"meta":374,"style":374},"def bubble_sort(a):\n    n = len(a)\n    for r in range(1, n):\n        # na ronde r staan de r grootste achteraan, die slaan we over\n        for j in range(n - r):\n            if a[j] > a[j + 1]:\n                a[j], a[j + 1] = a[j + 1], a[j]\n",[47,3751,3752,3765,3779,3800,3805,3826,3852],{"__ignoreMap":374},[384,3753,3754,3756,3759,3761,3763],{"class":386,"line":387},[384,3755,1612],{"class":450},[384,3757,3758],{"class":401}," bubble_sort",[384,3760,406],{"class":405},[384,3762,28],{"class":1620},[384,3764,411],{"class":405},[384,3766,3767,3769,3771,3773,3775,3777],{"class":386,"line":414},[384,3768,3208],{"class":394},[384,3770,456],{"class":405},[384,3772,2681],{"class":401},[384,3774,406],{"class":405},[384,3776,28],{"class":401},[384,3778,3219],{"class":405},[384,3780,3781,3783,3786,3788,3790,3792,3794,3796,3798],{"class":386,"line":500},[384,3782,547],{"class":390},[384,3784,3785],{"class":394}," r ",[384,3787,398],{"class":390},[384,3789,402],{"class":401},[384,3791,406],{"class":405},[384,3793,269],{"class":459},[384,3795,568],{"class":405},[384,3797,471],{"class":401},[384,3799,411],{"class":405},[384,3801,3802],{"class":386,"line":602},[384,3803,3804],{"class":827},"        # na ronde r staan de r grootste achteraan, die slaan we over\n",[384,3806,3807,3809,3811,3813,3815,3817,3819,3821,3824],{"class":386,"line":721},[384,3808,3262],{"class":390},[384,3810,550],{"class":394},[384,3812,398],{"class":390},[384,3814,402],{"class":401},[384,3816,406],{"class":405},[384,3818,1691],{"class":401},[384,3820,1677],{"class":405},[384,3822,3823],{"class":401}," r",[384,3825,411],{"class":405},[384,3827,3828,3830,3832,3834,3836,3838,3840,3842,3844,3846,3848,3850],{"class":386,"line":727},[384,3829,3283],{"class":390},[384,3831,423],{"class":394},[384,3833,426],{"class":405},[384,3835,596],{"class":394},[384,3837,586],{"class":405},[384,3839,2746],{"class":405},[384,3841,423],{"class":394},[384,3843,426],{"class":405},[384,3845,1434],{"class":394},[384,3847,562],{"class":405},[384,3849,565],{"class":459},[384,3851,599],{"class":405},[384,3853,3854,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881,3883,3885,3887,3889,3891,3893,3895],{"class":386,"line":733},[384,3855,3856],{"class":394},"                a",[384,3858,426],{"class":405},[384,3860,596],{"class":394},[384,3862,1735],{"class":405},[384,3864,423],{"class":394},[384,3866,426],{"class":405},[384,3868,1434],{"class":394},[384,3870,562],{"class":405},[384,3872,565],{"class":459},[384,3874,586],{"class":405},[384,3876,2769],{"class":405},[384,3878,423],{"class":394},[384,3880,426],{"class":405},[384,3882,1434],{"class":394},[384,3884,562],{"class":405},[384,3886,565],{"class":459},[384,3888,1735],{"class":405},[384,3890,423],{"class":394},[384,3892,426],{"class":405},[384,3894,596],{"class":394},[384,3896,432],{"class":405},[372,3898,3899],{"v-slot:java":374},[376,3900,3902],{"className":437,"code":3901,"language":439,"meta":374,"style":374},"static void bubbleSort(int[] a) {\n    int n = a.length;\n    for (int r = 1; r \u003C n; r++) {\n        \u002F\u002F na ronde r staan de r grootste achteraan, die slaan we over\n        for (int j = 0; j \u003C n - r; j++) {\n            if (a[j] > a[j + 1]) {\n                int tmp = a[j];\n                a[j] = a[j + 1];\n                a[j + 1] = tmp;\n            }\n        }\n    }\n}\n",[47,3903,3904,3925,3941,3971,3976,4010,4040,4057,4081,4101,4105,4109,4113],{"__ignoreMap":374},[384,3905,3906,3908,3910,3913,3915,3917,3919,3921,3923],{"class":386,"line":387},[384,3907,1756],{"class":450},[384,3909,2825],{"class":450},[384,3911,3912],{"class":401}," bubbleSort",[384,3914,406],{"class":405},[384,3916,451],{"class":450},[384,3918,1768],{"class":405},[384,3920,423],{"class":394},[384,3922,863],{"class":405},[384,3924,482],{"class":405},[384,3926,3927,3929,3931,3933,3935,3937,3939],{"class":386,"line":414},[384,3928,1417],{"class":450},[384,3930,1639],{"class":394},[384,3932,456],{"class":405},[384,3934,423],{"class":394},[384,3936,150],{"class":405},[384,3938,2867],{"class":394},[384,3940,848],{"class":405},[384,3942,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965,3967,3969],{"class":386,"line":500},[384,3944,547],{"class":390},[384,3946,18],{"class":405},[384,3948,451],{"class":450},[384,3950,3785],{"class":394},[384,3952,456],{"class":405},[384,3954,565],{"class":459},[384,3956,463],{"class":405},[384,3958,3785],{"class":394},[384,3960,468],{"class":405},[384,3962,471],{"class":394},[384,3964,463],{"class":405},[384,3966,3823],{"class":394},[384,3968,479],{"class":405},[384,3970,482],{"class":405},[384,3972,3973],{"class":386,"line":602},[384,3974,3975],{"class":827},"        \u002F\u002F na ronde r staan de r grootste achteraan, die slaan we over\n",[384,3977,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008],{"class":386,"line":721},[384,3979,3262],{"class":390},[384,3981,18],{"class":405},[384,3983,451],{"class":450},[384,3985,550],{"class":394},[384,3987,456],{"class":405},[384,3989,460],{"class":459},[384,3991,463],{"class":405},[384,3993,550],{"class":394},[384,3995,468],{"class":405},[384,3997,1639],{"class":394},[384,3999,1677],{"class":405},[384,4001,3823],{"class":394},[384,4003,463],{"class":405},[384,4005,678],{"class":394},[384,4007,479],{"class":405},[384,4009,482],{"class":405},[384,4011,4012,4014,4016,4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038],{"class":386,"line":727},[384,4013,3283],{"class":390},[384,4015,18],{"class":405},[384,4017,28],{"class":394},[384,4019,426],{"class":405},[384,4021,596],{"class":394},[384,4023,586],{"class":405},[384,4025,2746],{"class":405},[384,4027,423],{"class":394},[384,4029,426],{"class":405},[384,4031,1434],{"class":394},[384,4033,562],{"class":405},[384,4035,565],{"class":459},[384,4037,707],{"class":405},[384,4039,482],{"class":405},[384,4041,4042,4045,4047,4049,4051,4053,4055],{"class":386,"line":733},[384,4043,4044],{"class":450},"                int",[384,4046,3546],{"class":394},[384,4048,456],{"class":405},[384,4050,423],{"class":394},[384,4052,426],{"class":405},[384,4054,596],{"class":394},[384,4056,497],{"class":405},[384,4058,4059,4061,4063,4065,4067,4069,4071,4073,4075,4077,4079],{"class":386,"line":1299},[384,4060,3856],{"class":394},[384,4062,426],{"class":405},[384,4064,596],{"class":394},[384,4066,586],{"class":405},[384,4068,2769],{"class":405},[384,4070,423],{"class":394},[384,4072,426],{"class":405},[384,4074,1434],{"class":394},[384,4076,562],{"class":405},[384,4078,565],{"class":459},[384,4080,497],{"class":405},[384,4082,4083,4085,4087,4089,4091,4093,4095,4097,4099],{"class":386,"line":2790},[384,4084,3856],{"class":394},[384,4086,426],{"class":405},[384,4088,1434],{"class":394},[384,4090,562],{"class":405},[384,4092,565],{"class":459},[384,4094,586],{"class":405},[384,4096,2769],{"class":405},[384,4098,3601],{"class":394},[384,4100,848],{"class":405},[384,4102,4103],{"class":386,"line":2985},[384,4104,3530],{"class":405},[384,4106,4107],{"class":386,"line":3009},[384,4108,724],{"class":405},[384,4110,4111],{"class":386,"line":3014},[384,4112,730],{"class":405},[384,4114,4115],{"class":386,"line":3563},[384,4116,503],{"class":405},[39,4118,4120],{"id":4119},"merge-sort","Merge sort",[11,4122,4123,4125,4126,4129,4130,188,4133,1907,4136,150],{},[15,4124,4120],{}," (samenvoegend sorteren) is verdeel-en-heers (",[20,4127,4128],{},"divide and conquer","): splits de array\nin twee helften, sorteer elke helft recursief en voeg de twee gesorteerde helften samen. We splitsen\nin ",[47,4131,4132],{},"a[0..mid-1]",[47,4134,4135],{},"a[mid..n-1]",[47,4137,4138],{},"mid = ⌊n\u002F2⌋",[226,4140,4141,4154],{},[229,4142,4143],{},[232,4144,4145,4148,4151],{},[235,4146,4147],{},"Stap",[235,4149,4150],{},"Wat gebeurt er",[235,4152,4153],{},"Resultaat",[248,4155,4156,4174,4190,4203,4220,4235,4247,4263],{},[232,4157,4158,4160,4166],{},[253,4159,269],{},[253,4161,4162,4163,4165],{},"splits ",[47,4164,2568],{}," (mid = 3)",[253,4167,4168,188,4171],{},[47,4169,4170],{},"5, 2, 4",[47,4172,4173],{},"6, 1, 3",[232,4175,4176,4178,4183],{},[253,4177,1952],{},[253,4179,4162,4180,4182],{},[47,4181,4170],{}," (mid = 1)",[253,4184,4185,188,4187],{},[47,4186,1025],{},[47,4188,4189],{},"2, 4",[232,4191,4192,4194,4199],{},[253,4193,1970],{},[253,4195,4162,4196,4198],{},[47,4197,4189],{},", voeg samen",[253,4200,4201],{},[47,4202,4189],{},[232,4204,4205,4207,4215],{},[253,4206,1044],{},[253,4208,4209,4210,188,4212,4214],{},"voeg ",[47,4211,1025],{},[47,4213,4189],{}," samen",[253,4216,4217],{},[47,4218,4219],{},"2, 4, 5",[232,4221,4222,4224,4228],{},[253,4223,1025],{},[253,4225,4162,4226,4182],{},[47,4227,4173],{},[253,4229,4230,188,4232],{},[47,4231,2603],{},[47,4233,4234],{},"1, 3",[232,4236,4237,4239,4243],{},[253,4238,2603],{},[253,4240,4162,4241,4198],{},[47,4242,4234],{},[253,4244,4245],{},[47,4246,4234],{},[232,4248,4249,4252,4258],{},[253,4250,4251],{},"7",[253,4253,4209,4254,188,4256,4214],{},[47,4255,2603],{},[47,4257,4234],{},[253,4259,4260],{},[47,4261,4262],{},"1, 3, 6",[232,4264,4265,4267,4273],{},[253,4266,2089],{},[253,4268,4209,4269,188,4271,4214],{},[47,4270,4219],{},[47,4272,4262],{},[253,4274,4275],{},[47,4276,2633],{},[11,4278,4279,4280,4283],{},"Bij het samenvoegen vergelijk je steeds de voorste elementen van beide helften en pak je de\nkleinste. Bij gelijke waarden pak je ",[15,4281,4282],{},"eerst links",": daardoor is merge sort stabiel.",[369,4285,4286,4587],{},[372,4287,4288],{"v-slot:python":374},[376,4289,4291],{"className":378,"code":4290,"language":380,"meta":374,"style":374},"def merge_sort(a):\n    if len(a) \u003C= 1:\n        return a\n    mid = len(a) \u002F\u002F 2\n    links = merge_sort(a[:mid])\n    rechts = merge_sort(a[mid:])\n    # samenvoegen: bij gelijke waarden eerst links (stabiel)\n    res = []\n    i = j = 0\n    while i \u003C len(links) and j \u003C len(rechts):\n        if links[i] \u003C= rechts[j]:\n            res.append(links[i])\n            i += 1\n        else:\n            res.append(rechts[j])\n            j += 1\n    res.extend(links[i:])\n    res.extend(rechts[j:])\n    return res\n",[47,4292,4293,4306,4325,4332,4352,4374,4394,4399,4409,4421,4453,4477,4497,4506,4513,4531,4539,4560,4579],{"__ignoreMap":374},[384,4294,4295,4297,4300,4302,4304],{"class":386,"line":387},[384,4296,1612],{"class":450},[384,4298,4299],{"class":401}," merge_sort",[384,4301,406],{"class":405},[384,4303,28],{"class":1620},[384,4305,411],{"class":405},[384,4307,4308,4310,4312,4314,4316,4318,4321,4323],{"class":386,"line":414},[384,4309,1636],{"class":390},[384,4311,2681],{"class":401},[384,4313,406],{"class":405},[384,4315,28],{"class":401},[384,4317,863],{"class":405},[384,4319,4320],{"class":405}," \u003C=",[384,4322,565],{"class":459},[384,4324,813],{"class":405},[384,4326,4327,4329],{"class":386,"line":500},[384,4328,1651],{"class":390},[384,4330,4331],{"class":394}," a\n",[384,4333,4334,4337,4339,4341,4343,4345,4347,4350],{"class":386,"line":602},[384,4335,4336],{"class":394},"    mid ",[384,4338,456],{"class":405},[384,4340,2681],{"class":401},[384,4342,406],{"class":405},[384,4344,28],{"class":401},[384,4346,863],{"class":405},[384,4348,4349],{"class":405}," \u002F\u002F",[384,4351,1375],{"class":459},[384,4353,4354,4357,4359,4361,4363,4365,4368,4371],{"class":386,"line":721},[384,4355,4356],{"class":394},"    links ",[384,4358,456],{"class":405},[384,4360,4299],{"class":401},[384,4362,406],{"class":405},[384,4364,28],{"class":401},[384,4366,4367],{"class":405},"[:",[384,4369,4370],{"class":401},"mid",[384,4372,4373],{"class":405},"])\n",[384,4375,4376,4379,4381,4383,4385,4387,4389,4391],{"class":386,"line":727},[384,4377,4378],{"class":394},"    rechts ",[384,4380,456],{"class":405},[384,4382,4299],{"class":401},[384,4384,406],{"class":405},[384,4386,28],{"class":401},[384,4388,426],{"class":405},[384,4390,4370],{"class":401},[384,4392,4393],{"class":405},":])\n",[384,4395,4396],{"class":386,"line":733},[384,4397,4398],{"class":827},"    # samenvoegen: bij gelijke waarden eerst links (stabiel)\n",[384,4400,4401,4404,4406],{"class":386,"line":1299},[384,4402,4403],{"class":394},"    res ",[384,4405,456],{"class":405},[384,4407,4408],{"class":405}," []\n",[384,4410,4411,4413,4415,4417,4419],{"class":386,"line":2790},[384,4412,818],{"class":394},[384,4414,456],{"class":405},[384,4416,550],{"class":394},[384,4418,456],{"class":405},[384,4420,1654],{"class":459},[384,4422,4423,4425,4427,4429,4431,4433,4436,4438,4440,4442,4444,4446,4448,4451],{"class":386,"line":2985},[384,4424,1357],{"class":390},[384,4426,395],{"class":394},[384,4428,468],{"class":405},[384,4430,2681],{"class":401},[384,4432,406],{"class":405},[384,4434,4435],{"class":401},"links",[384,4437,863],{"class":405},[384,4439,2735],{"class":405},[384,4441,550],{"class":394},[384,4443,468],{"class":405},[384,4445,2681],{"class":401},[384,4447,406],{"class":405},[384,4449,4450],{"class":401},"rechts",[384,4452,411],{"class":405},[384,4454,4455,4457,4460,4462,4464,4466,4468,4471,4473,4475],{"class":386,"line":3009},[384,4456,577],{"class":390},[384,4458,4459],{"class":394}," links",[384,4461,426],{"class":405},[384,4463,429],{"class":394},[384,4465,586],{"class":405},[384,4467,4320],{"class":405},[384,4469,4470],{"class":394}," rechts",[384,4472,426],{"class":405},[384,4474,596],{"class":394},[384,4476,599],{"class":405},[384,4478,4479,4482,4484,4487,4489,4491,4493,4495],{"class":386,"line":3014},[384,4480,4481],{"class":394},"            res",[384,4483,150],{"class":405},[384,4485,4486],{"class":401},"append",[384,4488,406],{"class":405},[384,4490,4435],{"class":401},[384,4492,426],{"class":405},[384,4494,429],{"class":401},[384,4496,4373],{"class":405},[384,4498,4499,4502,4504],{"class":386,"line":3563},[384,4500,4501],{"class":394},"            i ",[384,4503,420],{"class":405},[384,4505,918],{"class":459},[384,4507,4508,4511],{"class":386,"line":3588},[384,4509,4510],{"class":390},"        else",[384,4512,813],{"class":405},[384,4514,4515,4517,4519,4521,4523,4525,4527,4529],{"class":386,"line":3606},[384,4516,4481],{"class":394},[384,4518,150],{"class":405},[384,4520,4486],{"class":401},[384,4522,406],{"class":405},[384,4524,4450],{"class":401},[384,4526,426],{"class":405},[384,4528,596],{"class":401},[384,4530,4373],{"class":405},[384,4532,4533,4535,4537],{"class":386,"line":3611},[384,4534,2782],{"class":394},[384,4536,420],{"class":405},[384,4538,918],{"class":459},[384,4540,4542,4545,4547,4550,4552,4554,4556,4558],{"class":386,"line":4541},17,[384,4543,4544],{"class":394},"    res",[384,4546,150],{"class":405},[384,4548,4549],{"class":401},"extend",[384,4551,406],{"class":405},[384,4553,4435],{"class":401},[384,4555,426],{"class":405},[384,4557,429],{"class":401},[384,4559,4393],{"class":405},[384,4561,4563,4565,4567,4569,4571,4573,4575,4577],{"class":386,"line":4562},18,[384,4564,4544],{"class":394},[384,4566,150],{"class":405},[384,4568,4549],{"class":401},[384,4570,406],{"class":405},[384,4572,4450],{"class":401},[384,4574,426],{"class":405},[384,4576,596],{"class":401},[384,4578,4393],{"class":405},[384,4580,4582,4584],{"class":386,"line":4581},19,[384,4583,1664],{"class":390},[384,4585,4586],{"class":394}," res\n",[372,4588,4589],{"v-slot:java":374},[376,4590,4592],{"className":437,"code":4591,"language":439,"meta":374,"style":374},"static int[] mergeSort(int[] a) {\n    if (a.length \u003C= 1) {\n        return a;\n    }\n    int mid = a.length \u002F 2;\n    int[] links = mergeSort(java.util.Arrays.copyOfRange(a, 0, mid));\n    int[] rechts = mergeSort(java.util.Arrays.copyOfRange(a, mid, a.length));\n    \u002F\u002F samenvoegen: bij gelijke waarden eerst links (stabiel)\n    int[] res = new int[a.length];\n    int i = 0, j = 0, k = 0;\n    while (i \u003C links.length && j \u003C rechts.length) {\n        if (links[i] \u003C= rechts[j]) {\n            res[k++] = links[i++];\n        } else {\n            res[k++] = rechts[j++];\n        }\n    }\n    while (i \u003C links.length) res[k++] = links[i++];\n    while (j \u003C rechts.length) res[k++] = rechts[j++];\n    return res;\n}\n",[47,4593,4594,4617,4639,4647,4651,4673,4721,4768,4773,4799,4827,4860,4886,4908,4918,4938,4942,4946,4983,5019,5028],{"__ignoreMap":374},[384,4595,4596,4598,4600,4602,4605,4607,4609,4611,4613,4615],{"class":386,"line":387},[384,4597,1756],{"class":450},[384,4599,1759],{"class":450},[384,4601,1768],{"class":405},[384,4603,4604],{"class":401}," mergeSort",[384,4606,406],{"class":405},[384,4608,451],{"class":450},[384,4610,1768],{"class":405},[384,4612,423],{"class":394},[384,4614,863],{"class":405},[384,4616,482],{"class":405},[384,4618,4619,4621,4623,4625,4627,4630,4633,4635,4637],{"class":386,"line":414},[384,4620,1636],{"class":390},[384,4622,18],{"class":405},[384,4624,28],{"class":394},[384,4626,150],{"class":405},[384,4628,4629],{"class":394},"length ",[384,4631,4632],{"class":405},"\u003C=",[384,4634,565],{"class":459},[384,4636,863],{"class":405},[384,4638,482],{"class":405},[384,4640,4641,4643,4645],{"class":386,"line":500},[384,4642,1651],{"class":390},[384,4644,423],{"class":394},[384,4646,848],{"class":405},[384,4648,4649],{"class":386,"line":602},[384,4650,730],{"class":405},[384,4652,4653,4655,4658,4660,4662,4664,4666,4669,4671],{"class":386,"line":721},[384,4654,1417],{"class":450},[384,4656,4657],{"class":394}," mid ",[384,4659,456],{"class":405},[384,4661,423],{"class":394},[384,4663,150],{"class":405},[384,4665,4629],{"class":394},[384,4667,4668],{"class":405},"\u002F",[384,4670,824],{"class":459},[384,4672,848],{"class":405},[384,4674,4675,4677,4679,4682,4684,4686,4688,4690,4692,4695,4697,4700,4702,4705,4707,4709,4711,4713,4715,4718],{"class":386,"line":727},[384,4676,1417],{"class":450},[384,4678,1768],{"class":405},[384,4680,4681],{"class":394}," links ",[384,4683,456],{"class":405},[384,4685,4604],{"class":401},[384,4687,406],{"class":405},[384,4689,439],{"class":394},[384,4691,150],{"class":405},[384,4693,4694],{"class":394},"util",[384,4696,150],{"class":405},[384,4698,4699],{"class":394},"Arrays",[384,4701,150],{"class":405},[384,4703,4704],{"class":401},"copyOfRange",[384,4706,406],{"class":405},[384,4708,28],{"class":394},[384,4710,568],{"class":405},[384,4712,460],{"class":459},[384,4714,568],{"class":405},[384,4716,4717],{"class":394}," mid",[384,4719,4720],{"class":405},"));\n",[384,4722,4723,4725,4727,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766],{"class":386,"line":733},[384,4724,1417],{"class":450},[384,4726,1768],{"class":405},[384,4728,4729],{"class":394}," rechts ",[384,4731,456],{"class":405},[384,4733,4604],{"class":401},[384,4735,406],{"class":405},[384,4737,439],{"class":394},[384,4739,150],{"class":405},[384,4741,4694],{"class":394},[384,4743,150],{"class":405},[384,4745,4699],{"class":394},[384,4747,150],{"class":405},[384,4749,4704],{"class":401},[384,4751,406],{"class":405},[384,4753,28],{"class":394},[384,4755,568],{"class":405},[384,4757,4717],{"class":394},[384,4759,568],{"class":405},[384,4761,423],{"class":394},[384,4763,150],{"class":405},[384,4765,2867],{"class":394},[384,4767,4720],{"class":405},[384,4769,4770],{"class":386,"line":1299},[384,4771,4772],{"class":827},"    \u002F\u002F samenvoegen: bij gelijke waarden eerst links (stabiel)\n",[384,4774,4775,4777,4779,4782,4784,4787,4789,4791,4793,4795,4797],{"class":386,"line":2790},[384,4776,1417],{"class":450},[384,4778,1768],{"class":405},[384,4780,4781],{"class":394}," res ",[384,4783,456],{"class":405},[384,4785,4786],{"class":390}," new",[384,4788,1759],{"class":450},[384,4790,426],{"class":405},[384,4792,28],{"class":394},[384,4794,150],{"class":405},[384,4796,2867],{"class":394},[384,4798,497],{"class":405},[384,4800,4801,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825],{"class":386,"line":2985},[384,4802,1417],{"class":450},[384,4804,395],{"class":394},[384,4806,456],{"class":405},[384,4808,460],{"class":459},[384,4810,568],{"class":405},[384,4812,550],{"class":394},[384,4814,456],{"class":405},[384,4816,460],{"class":459},[384,4818,568],{"class":405},[384,4820,2668],{"class":394},[384,4822,456],{"class":405},[384,4824,460],{"class":459},[384,4826,848],{"class":405},[384,4828,4829,4831,4833,4835,4837,4839,4841,4843,4846,4848,4850,4852,4854,4856,4858],{"class":386,"line":3009},[384,4830,1357],{"class":390},[384,4832,18],{"class":405},[384,4834,559],{"class":394},[384,4836,468],{"class":405},[384,4838,4459],{"class":394},[384,4840,150],{"class":405},[384,4842,4629],{"class":394},[384,4844,4845],{"class":405},"&&",[384,4847,550],{"class":394},[384,4849,468],{"class":405},[384,4851,4470],{"class":394},[384,4853,150],{"class":405},[384,4855,2867],{"class":394},[384,4857,863],{"class":405},[384,4859,482],{"class":405},[384,4861,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880,4882,4884],{"class":386,"line":3014},[384,4863,577],{"class":390},[384,4865,18],{"class":405},[384,4867,4435],{"class":394},[384,4869,426],{"class":405},[384,4871,429],{"class":394},[384,4873,586],{"class":405},[384,4875,4320],{"class":405},[384,4877,4470],{"class":394},[384,4879,426],{"class":405},[384,4881,596],{"class":394},[384,4883,707],{"class":405},[384,4885,482],{"class":405},[384,4887,4888,4890,4892,4894,4897,4899,4901,4903,4905],{"class":386,"line":3563},[384,4889,4481],{"class":394},[384,4891,426],{"class":405},[384,4893,2487],{"class":394},[384,4895,4896],{"class":405},"++]",[384,4898,2769],{"class":405},[384,4900,4459],{"class":394},[384,4902,426],{"class":405},[384,4904,429],{"class":394},[384,4906,4907],{"class":405},"++];\n",[384,4909,4910,4913,4916],{"class":386,"line":3588},[384,4911,4912],{"class":405},"        }",[384,4914,4915],{"class":390}," else",[384,4917,482],{"class":405},[384,4919,4920,4922,4924,4926,4928,4930,4932,4934,4936],{"class":386,"line":3606},[384,4921,4481],{"class":394},[384,4923,426],{"class":405},[384,4925,2487],{"class":394},[384,4927,4896],{"class":405},[384,4929,2769],{"class":405},[384,4931,4470],{"class":394},[384,4933,426],{"class":405},[384,4935,596],{"class":394},[384,4937,4907],{"class":405},[384,4939,4940],{"class":386,"line":3611},[384,4941,724],{"class":405},[384,4943,4944],{"class":386,"line":4541},[384,4945,730],{"class":405},[384,4947,4948,4950,4952,4954,4956,4958,4960,4962,4964,4967,4969,4971,4973,4975,4977,4979,4981],{"class":386,"line":4562},[384,4949,1357],{"class":390},[384,4951,18],{"class":405},[384,4953,559],{"class":394},[384,4955,468],{"class":405},[384,4957,4459],{"class":394},[384,4959,150],{"class":405},[384,4961,2867],{"class":394},[384,4963,863],{"class":405},[384,4965,4966],{"class":394}," res",[384,4968,426],{"class":405},[384,4970,2487],{"class":394},[384,4972,4896],{"class":405},[384,4974,2769],{"class":405},[384,4976,4459],{"class":394},[384,4978,426],{"class":405},[384,4980,429],{"class":394},[384,4982,4907],{"class":405},[384,4984,4985,4987,4989,4991,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015,5017],{"class":386,"line":4581},[384,4986,1357],{"class":390},[384,4988,18],{"class":405},[384,4990,1434],{"class":394},[384,4992,468],{"class":405},[384,4994,4470],{"class":394},[384,4996,150],{"class":405},[384,4998,2867],{"class":394},[384,5000,863],{"class":405},[384,5002,4966],{"class":394},[384,5004,426],{"class":405},[384,5006,2487],{"class":394},[384,5008,4896],{"class":405},[384,5010,2769],{"class":405},[384,5012,4470],{"class":394},[384,5014,426],{"class":405},[384,5016,596],{"class":394},[384,5018,4907],{"class":405},[384,5020,5022,5024,5026],{"class":386,"line":5021},20,[384,5023,1664],{"class":390},[384,5025,4966],{"class":394},[384,5027,848],{"class":405},[384,5029,5031],{"class":386,"line":5030},21,[384,5032,503],{"class":405},[11,5034,5035,5036,5038,5039,5041,5042,5044,5045,5047],{},"Er zijn ",[47,5037,195],{}," niveaus van splitsen, en op elk niveau kost samenvoegen samen ",[47,5040,119],{},". Totaal:\n",[47,5043,219],{},", altijd. Het nadeel: je hebt een extra array van grootte ",[47,5046,49],{}," nodig.",[39,5049,5051],{"id":5050},"quicksort-met-lomuto-partitie","Quicksort met Lomuto-partitie",[11,5053,5054,5056,5057,5060,5061,5064,5065,5067],{},[15,5055,2510],{}," kiest een spil (",[20,5058,5059],{},"pivot","), zet alles wat kleiner is links ervan en de rest rechts, en\nsorteert daarna beide kanten recursief. Het hart is de partitie. Wij gebruiken de\n",[15,5062,5063],{},"Lomuto-partitie"," met het ",[15,5066,2516],{}," element als pivot:",[376,5069,5074],{"className":5070,"code":5072,"language":5073},[5071],"language-text","pivot = a[hi]; i = lo\nfor j = lo .. hi-1:\n    if a[j] \u003C pivot: swap(a[i], a[j]); i++\nswap(a[i], a[hi]); return i\n","text",[47,5075,5072],{"__ignoreMap":374},[11,5077,5078,5080,5081,5084],{},[47,5079,429],{}," wijst naar de eerste plek waar het volgende \"kleine\" element moet komen. Elementen die\n",[15,5082,5083],{},"strikt kleiner"," zijn dan de pivot gaan naar links; gelijke elementen blijven rechts.",[11,5086,5087,5088,5091,5092,1911],{},"Uitgewerkt op ",[47,5089,5090],{},"[7, 2, 9, 4, 1, 8, 5]",", pivot = ",[47,5093,1025],{},[226,5095,5096,5120],{},[229,5097,5098],{},[232,5099,5100,5102,5106,5111,5114,5117],{},[235,5101,596],{},[235,5103,28,5104],{},[384,5105,596],{},[235,5107,28,5108,5110],{},[384,5109,596],{}," \u003C 5?",[235,5112,5113],{},"Actie",[235,5115,5116],{},"i daarna",[235,5118,5119],{},"Array",[248,5121,5122,5139,5156,5180,5197,5218,5239,5255],{},[232,5123,5124,5126,5128,5130,5132,5134],{},[253,5125,2560],{},[253,5127,2563],{},[253,5129,2563],{},[253,5131,2563],{},[253,5133,2048],{},[253,5135,5136],{},[47,5137,5138],{},"7, 2, 9, 4, 1, 8, 5",[232,5140,5141,5143,5145,5148,5150,5152],{},[253,5142,2048],{},[253,5144,4251],{},[253,5146,5147],{},"nee",[253,5149,2563],{},[253,5151,2048],{},[253,5153,5154],{},[47,5155,5138],{},[232,5157,5158,5160,5162,5165,5173,5175],{},[253,5159,269],{},[253,5161,1952],{},[253,5163,5164],{},"ja",[253,5166,5167,5168,5170,5171],{},"wissel a",[384,5169,2048],{},", a",[384,5172,269],{},[253,5174,269],{},[253,5176,5177],{},[47,5178,5179],{},"2, 7, 9, 4, 1, 8, 5",[232,5181,5182,5184,5187,5189,5191,5193],{},[253,5183,1952],{},[253,5185,5186],{},"9",[253,5188,5147],{},[253,5190,2563],{},[253,5192,269],{},[253,5194,5195],{},[47,5196,5179],{},[232,5198,5199,5201,5203,5205,5211,5213],{},[253,5200,1970],{},[253,5202,1044],{},[253,5204,5164],{},[253,5206,5167,5207,5170,5209],{},[384,5208,269],{},[384,5210,1970],{},[253,5212,1952],{},[253,5214,5215],{},[47,5216,5217],{},"2, 4, 9, 7, 1, 8, 5",[232,5219,5220,5222,5224,5226,5232,5234],{},[253,5221,1044],{},[253,5223,269],{},[253,5225,5164],{},[253,5227,5167,5228,5170,5230],{},[384,5229,1952],{},[384,5231,1044],{},[253,5233,1970],{},[253,5235,5236],{},[47,5237,5238],{},"2, 4, 1, 7, 9, 8, 5",[232,5240,5241,5243,5245,5247,5249,5251],{},[253,5242,1025],{},[253,5244,2089],{},[253,5246,5147],{},[253,5248,2563],{},[253,5250,1970],{},[253,5252,5253],{},[47,5254,5238],{},[232,5256,5257,5260,5262,5264,5270,5272],{},[253,5258,5259],{},"eind",[253,5261,2563],{},[253,5263,2563],{},[253,5265,5167,5266,5170,5268],{},[384,5267,1970],{},[384,5269,2603],{},[253,5271,1970],{},[253,5273,5274],{},[47,5275,5276],{},"2, 4, 1, 5, 9, 8, 7",[11,5278,5279,5280,5282,5283,5285,5286,188,5289,150],{},"Na de eerste partitie is de array ",[47,5281,5276],{}," en staat de pivot ",[47,5284,1025],{}," op index 3, zijn\ndefinitieve plek. Links staan alleen kleinere getallen, rechts alleen grotere, maar beide kanten zijn\nnog niet gesorteerd. Quicksort gaat nu verder met ",[47,5287,5288],{},"a[0..2]",[47,5290,5291],{},"a[4..6]",[369,5293,5294,5631],{},[372,5295,5296],{"v-slot:python":374},[376,5297,5299],{"className":378,"code":5298,"language":380,"meta":374,"style":374},"def partition(a, lo, hi):\n    pivot = a[hi]  # laatste element is de pivot\n    i = lo\n    for j in range(lo, hi):\n        if a[j] \u003C pivot:  # strikt kleiner gaat naar links\n            a[i], a[j] = a[j], a[i]\n            i += 1\n    a[i], a[hi] = a[hi], a[i]  # pivot op zijn definitieve plek\n    return i\n\ndef quicksort(a, lo=0, hi=None):\n    if hi is None:\n        hi = len(a) - 1\n    if lo \u003C hi:\n        p = partition(a, lo, hi)\n        quicksort(a, lo, p - 1)\n        quicksort(a, p + 1, hi)\n",[47,5300,5301,5324,5343,5352,5373,5395,5431,5439,5479,5486,5490,5516,5529,5549,5562,5585,5609],{"__ignoreMap":374},[384,5302,5303,5305,5308,5310,5312,5314,5317,5319,5322],{"class":386,"line":387},[384,5304,1612],{"class":450},[384,5306,5307],{"class":401}," partition",[384,5309,406],{"class":405},[384,5311,28],{"class":1620},[384,5313,568],{"class":405},[384,5315,5316],{"class":1620}," lo",[384,5318,568],{"class":405},[384,5320,5321],{"class":1620}," hi",[384,5323,411],{"class":405},[384,5325,5326,5329,5331,5333,5335,5338,5340],{"class":386,"line":414},[384,5327,5328],{"class":394},"    pivot ",[384,5330,456],{"class":405},[384,5332,423],{"class":394},[384,5334,426],{"class":405},[384,5336,5337],{"class":394},"hi",[384,5339,586],{"class":405},[384,5341,5342],{"class":827},"  # laatste element is de pivot\n",[384,5344,5345,5347,5349],{"class":386,"line":500},[384,5346,818],{"class":394},[384,5348,456],{"class":405},[384,5350,5351],{"class":394}," lo\n",[384,5353,5354,5356,5358,5360,5362,5364,5367,5369,5371],{"class":386,"line":602},[384,5355,547],{"class":390},[384,5357,550],{"class":394},[384,5359,398],{"class":390},[384,5361,402],{"class":401},[384,5363,406],{"class":405},[384,5365,5366],{"class":401},"lo",[384,5368,568],{"class":405},[384,5370,5321],{"class":401},[384,5372,411],{"class":405},[384,5374,5375,5377,5379,5381,5383,5385,5387,5390,5392],{"class":386,"line":721},[384,5376,577],{"class":390},[384,5378,423],{"class":394},[384,5380,426],{"class":405},[384,5382,596],{"class":394},[384,5384,586],{"class":405},[384,5386,3294],{"class":405},[384,5388,5389],{"class":394}," pivot",[384,5391,1911],{"class":405},[384,5393,5394],{"class":827},"  # strikt kleiner gaat naar links\n",[384,5396,5397,5399,5401,5403,5405,5407,5409,5411,5413,5415,5417,5419,5421,5423,5425,5427,5429],{"class":386,"line":727},[384,5398,2756],{"class":394},[384,5400,426],{"class":405},[384,5402,429],{"class":394},[384,5404,1735],{"class":405},[384,5406,423],{"class":394},[384,5408,426],{"class":405},[384,5410,596],{"class":394},[384,5412,586],{"class":405},[384,5414,2769],{"class":405},[384,5416,423],{"class":394},[384,5418,426],{"class":405},[384,5420,596],{"class":394},[384,5422,1735],{"class":405},[384,5424,423],{"class":394},[384,5426,426],{"class":405},[384,5428,429],{"class":394},[384,5430,432],{"class":405},[384,5432,5433,5435,5437],{"class":386,"line":733},[384,5434,4501],{"class":394},[384,5436,420],{"class":405},[384,5438,918],{"class":459},[384,5440,5441,5444,5446,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476],{"class":386,"line":1299},[384,5442,5443],{"class":394},"    a",[384,5445,426],{"class":405},[384,5447,429],{"class":394},[384,5449,1735],{"class":405},[384,5451,423],{"class":394},[384,5453,426],{"class":405},[384,5455,5337],{"class":394},[384,5457,586],{"class":405},[384,5459,2769],{"class":405},[384,5461,423],{"class":394},[384,5463,426],{"class":405},[384,5465,5337],{"class":394},[384,5467,1735],{"class":405},[384,5469,423],{"class":394},[384,5471,426],{"class":405},[384,5473,429],{"class":394},[384,5475,586],{"class":405},[384,5477,5478],{"class":827},"  # pivot op zijn definitieve plek\n",[384,5480,5481,5483],{"class":386,"line":2790},[384,5482,1664],{"class":390},[384,5484,5485],{"class":394}," i\n",[384,5487,5488],{"class":386,"line":2985},[384,5489,1703],{"emptyLinePlaceholder":1702},[384,5491,5492,5494,5497,5499,5501,5503,5505,5507,5509,5511,5513],{"class":386,"line":3009},[384,5493,1612],{"class":450},[384,5495,5496],{"class":401}," quicksort",[384,5498,406],{"class":405},[384,5500,28],{"class":1620},[384,5502,568],{"class":405},[384,5504,5316],{"class":1620},[384,5506,456],{"class":405},[384,5508,2048],{"class":459},[384,5510,568],{"class":405},[384,5512,5321],{"class":1620},[384,5514,5515],{"class":405},"=None):\n",[384,5517,5518,5520,5523,5526],{"class":386,"line":3014},[384,5519,1636],{"class":390},[384,5521,5522],{"class":394}," hi ",[384,5524,5525],{"class":405},"is",[384,5527,5528],{"class":405}," None:\n",[384,5530,5531,5534,5536,5538,5540,5542,5544,5547],{"class":386,"line":3563},[384,5532,5533],{"class":394},"        hi ",[384,5535,456],{"class":405},[384,5537,2681],{"class":401},[384,5539,406],{"class":405},[384,5541,28],{"class":401},[384,5543,863],{"class":405},[384,5545,5546],{"class":405}," -",[384,5548,918],{"class":459},[384,5550,5551,5553,5556,5558,5560],{"class":386,"line":3588},[384,5552,1636],{"class":390},[384,5554,5555],{"class":394}," lo ",[384,5557,468],{"class":405},[384,5559,5321],{"class":394},[384,5561,813],{"class":405},[384,5563,5564,5567,5569,5571,5573,5575,5577,5579,5581,5583],{"class":386,"line":3606},[384,5565,5566],{"class":394},"        p ",[384,5568,456],{"class":405},[384,5570,5307],{"class":401},[384,5572,406],{"class":405},[384,5574,28],{"class":401},[384,5576,568],{"class":405},[384,5578,5316],{"class":401},[384,5580,568],{"class":405},[384,5582,5321],{"class":401},[384,5584,3219],{"class":405},[384,5586,5587,5590,5592,5594,5596,5598,5600,5603,5605,5607],{"class":386,"line":3611},[384,5588,5589],{"class":401},"        quicksort",[384,5591,406],{"class":405},[384,5593,28],{"class":401},[384,5595,568],{"class":405},[384,5597,5316],{"class":401},[384,5599,568],{"class":405},[384,5601,5602],{"class":401}," p ",[384,5604,1677],{"class":405},[384,5606,565],{"class":459},[384,5608,3219],{"class":405},[384,5610,5611,5613,5615,5617,5619,5621,5623,5625,5627,5629],{"class":386,"line":4541},[384,5612,5589],{"class":401},[384,5614,406],{"class":405},[384,5616,28],{"class":401},[384,5618,568],{"class":405},[384,5620,5602],{"class":401},[384,5622,562],{"class":405},[384,5624,565],{"class":459},[384,5626,568],{"class":405},[384,5628,5321],{"class":401},[384,5630,3219],{"class":405},[372,5632,5633],{"v-slot:java":374},[376,5634,5636],{"className":437,"code":5635,"language":439,"meta":374,"style":374},"static int partition(int[] a, int lo, int hi) {\n    int pivot = a[hi]; \u002F\u002F laatste element is de pivot\n    int i = lo;\n    for (int j = lo; j \u003C hi; j++) {\n        if (a[j] \u003C pivot) { \u002F\u002F strikt kleiner gaat naar links\n            int tmp = a[i]; a[i] = a[j]; a[j] = tmp;\n            i++;\n        }\n    }\n    int tmp = a[i]; a[i] = a[hi]; a[hi] = tmp; \u002F\u002F pivot op zijn definitieve plek\n    return i;\n}\n\nstatic void quicksort(int[] a, int lo, int hi) {\n    if (lo \u003C hi) {\n        int p = partition(a, lo, hi);\n        quicksort(a, lo, p - 1);\n        quicksort(a, p + 1, hi);\n    }\n}\n",[47,5637,5638,5670,5691,5703,5733,5758,5807,5814,5818,5822,5873,5881,5885,5889,5921,5938,5963,5985,6007,6011],{"__ignoreMap":374},[384,5639,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658,5660,5662,5664,5666,5668],{"class":386,"line":387},[384,5641,1756],{"class":450},[384,5643,1759],{"class":450},[384,5645,5307],{"class":401},[384,5647,406],{"class":405},[384,5649,451],{"class":450},[384,5651,1768],{"class":405},[384,5653,423],{"class":394},[384,5655,568],{"class":405},[384,5657,1759],{"class":450},[384,5659,5316],{"class":394},[384,5661,568],{"class":405},[384,5663,1759],{"class":450},[384,5665,5321],{"class":394},[384,5667,863],{"class":405},[384,5669,482],{"class":405},[384,5671,5672,5674,5677,5679,5681,5683,5685,5688],{"class":386,"line":414},[384,5673,1417],{"class":450},[384,5675,5676],{"class":394}," pivot ",[384,5678,456],{"class":405},[384,5680,423],{"class":394},[384,5682,426],{"class":405},[384,5684,5337],{"class":394},[384,5686,5687],{"class":405},"];",[384,5689,5690],{"class":827}," \u002F\u002F laatste element is de pivot\n",[384,5692,5693,5695,5697,5699,5701],{"class":386,"line":500},[384,5694,1417],{"class":450},[384,5696,395],{"class":394},[384,5698,456],{"class":405},[384,5700,5316],{"class":394},[384,5702,848],{"class":405},[384,5704,5705,5707,5709,5711,5713,5715,5717,5719,5721,5723,5725,5727,5729,5731],{"class":386,"line":602},[384,5706,547],{"class":390},[384,5708,18],{"class":405},[384,5710,451],{"class":450},[384,5712,550],{"class":394},[384,5714,456],{"class":405},[384,5716,5316],{"class":394},[384,5718,463],{"class":405},[384,5720,550],{"class":394},[384,5722,468],{"class":405},[384,5724,5321],{"class":394},[384,5726,463],{"class":405},[384,5728,678],{"class":394},[384,5730,479],{"class":405},[384,5732,482],{"class":405},[384,5734,5735,5737,5739,5741,5743,5745,5747,5749,5751,5753,5755],{"class":386,"line":721},[384,5736,577],{"class":390},[384,5738,18],{"class":405},[384,5740,28],{"class":394},[384,5742,426],{"class":405},[384,5744,596],{"class":394},[384,5746,586],{"class":405},[384,5748,3294],{"class":405},[384,5750,5389],{"class":394},[384,5752,863],{"class":405},[384,5754,1200],{"class":405},[384,5756,5757],{"class":827}," \u002F\u002F strikt kleiner gaat naar links\n",[384,5759,5760,5763,5765,5767,5769,5771,5773,5775,5777,5779,5781,5783,5785,5787,5789,5791,5793,5795,5797,5799,5801,5803,5805],{"class":386,"line":727},[384,5761,5762],{"class":450},"            int",[384,5764,3546],{"class":394},[384,5766,456],{"class":405},[384,5768,423],{"class":394},[384,5770,426],{"class":405},[384,5772,429],{"class":394},[384,5774,5687],{"class":405},[384,5776,423],{"class":394},[384,5778,426],{"class":405},[384,5780,429],{"class":394},[384,5782,586],{"class":405},[384,5784,2769],{"class":405},[384,5786,423],{"class":394},[384,5788,426],{"class":405},[384,5790,596],{"class":394},[384,5792,5687],{"class":405},[384,5794,423],{"class":394},[384,5796,426],{"class":405},[384,5798,596],{"class":394},[384,5800,586],{"class":405},[384,5802,2769],{"class":405},[384,5804,3601],{"class":394},[384,5806,848],{"class":405},[384,5808,5809,5812],{"class":386,"line":733},[384,5810,5811],{"class":394},"            i",[384,5813,1292],{"class":405},[384,5815,5816],{"class":386,"line":1299},[384,5817,724],{"class":405},[384,5819,5820],{"class":386,"line":2790},[384,5821,730],{"class":405},[384,5823,5824,5826,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5850,5852,5854,5856,5858,5860,5862,5864,5866,5868,5870],{"class":386,"line":2985},[384,5825,1417],{"class":450},[384,5827,3546],{"class":394},[384,5829,456],{"class":405},[384,5831,423],{"class":394},[384,5833,426],{"class":405},[384,5835,429],{"class":394},[384,5837,5687],{"class":405},[384,5839,423],{"class":394},[384,5841,426],{"class":405},[384,5843,429],{"class":394},[384,5845,586],{"class":405},[384,5847,2769],{"class":405},[384,5849,423],{"class":394},[384,5851,426],{"class":405},[384,5853,5337],{"class":394},[384,5855,5687],{"class":405},[384,5857,423],{"class":394},[384,5859,426],{"class":405},[384,5861,5337],{"class":394},[384,5863,586],{"class":405},[384,5865,2769],{"class":405},[384,5867,3601],{"class":394},[384,5869,463],{"class":405},[384,5871,5872],{"class":827}," \u002F\u002F pivot op zijn definitieve plek\n",[384,5874,5875,5877,5879],{"class":386,"line":3009},[384,5876,1664],{"class":390},[384,5878,476],{"class":394},[384,5880,848],{"class":405},[384,5882,5883],{"class":386,"line":3014},[384,5884,503],{"class":405},[384,5886,5887],{"class":386,"line":3563},[384,5888,1703],{"emptyLinePlaceholder":1702},[384,5890,5891,5893,5895,5897,5899,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919],{"class":386,"line":3588},[384,5892,1756],{"class":450},[384,5894,2825],{"class":450},[384,5896,5496],{"class":401},[384,5898,406],{"class":405},[384,5900,451],{"class":450},[384,5902,1768],{"class":405},[384,5904,423],{"class":394},[384,5906,568],{"class":405},[384,5908,1759],{"class":450},[384,5910,5316],{"class":394},[384,5912,568],{"class":405},[384,5914,1759],{"class":450},[384,5916,5321],{"class":394},[384,5918,863],{"class":405},[384,5920,482],{"class":405},[384,5922,5923,5925,5927,5930,5932,5934,5936],{"class":386,"line":3606},[384,5924,1636],{"class":390},[384,5926,18],{"class":405},[384,5928,5929],{"class":394},"lo ",[384,5931,468],{"class":405},[384,5933,5321],{"class":394},[384,5935,863],{"class":405},[384,5937,482],{"class":405},[384,5939,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960],{"class":386,"line":3611},[384,5941,2881],{"class":450},[384,5943,5602],{"class":394},[384,5945,456],{"class":405},[384,5947,5307],{"class":401},[384,5949,406],{"class":405},[384,5951,28],{"class":394},[384,5953,568],{"class":405},[384,5955,5316],{"class":394},[384,5957,568],{"class":405},[384,5959,5321],{"class":394},[384,5961,5962],{"class":405},");\n",[384,5964,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983],{"class":386,"line":4541},[384,5966,5589],{"class":401},[384,5968,406],{"class":405},[384,5970,28],{"class":394},[384,5972,568],{"class":405},[384,5974,5316],{"class":394},[384,5976,568],{"class":405},[384,5978,5602],{"class":394},[384,5980,1677],{"class":405},[384,5982,565],{"class":459},[384,5984,5962],{"class":405},[384,5986,5987,5989,5991,5993,5995,5997,5999,6001,6003,6005],{"class":386,"line":4562},[384,5988,5589],{"class":401},[384,5990,406],{"class":405},[384,5992,28],{"class":394},[384,5994,568],{"class":405},[384,5996,5602],{"class":394},[384,5998,562],{"class":405},[384,6000,565],{"class":459},[384,6002,568],{"class":405},[384,6004,5321],{"class":394},[384,6006,5962],{"class":405},[384,6008,6009],{"class":386,"line":4581},[384,6010,730],{"class":405},[384,6012,6013],{"class":386,"line":5021},[384,6014,503],{"class":405},[11,6016,6017,6018,6020,6021,6024,6025,6027,6028,6030,6031,6033],{},"Valt de pivot steeds ongeveer in het midden, dan halveer je het probleem en kom je op\n",[47,6019,219],{},". Maar is de array ",[15,6022,6023],{},"al gesorteerd",", dan is het laatste element steeds het grootste. De\npartitie levert dan een linkerdeel van ",[47,6026,745],{}," elementen en een leeg rechterdeel op. Dat geeft\n",[47,6029,1544],{},", en dus ",[47,6032,108],{},". In de praktijk kies je daarom vaak een willekeurige pivot.",[39,6035,6037],{"id":6036},"stabiel-en-in-place","Stabiel en in-place",[11,6039,6040],{},"Twee eigenschappen die op het tentamen vaak gevraagd worden:",[56,6042,6043,6052],{},[59,6044,6045,18,6048,6051],{},[15,6046,6047],{},"Stabiel",[20,6049,6050],{},"stable","): gelijke elementen behouden hun onderlinge volgorde. Belangrijk als je\neerst op naam en daarna op leeftijd sorteert: binnen dezelfde leeftijd blijft de naamvolgorde\ndan staan.",[59,6053,6054,6057,6058,6060,6061,6063],{},[15,6055,6056],{},"In-place",": het algoritme gebruikt maar ",[47,6059,210],{}," (of hooguit ",[47,6062,214],{},") extra geheugen naast de\narray zelf.",[39,6065,17],{"id":2398},[226,6067,6068,6090],{},[229,6069,6070],{},[232,6071,6072,6074,6077,6080,6083,6086,6088],{},[235,6073,2437],{},[235,6075,6076],{},"Best",[235,6078,6079],{},"Gemiddeld",[235,6081,6082],{},"Slechtst",[235,6084,6085],{},"Extra geheugen",[235,6087,6047],{},[235,6089,6056],{},[248,6091,6092,6116,6140,6164,6188],{},[232,6093,6094,6096,6100,6104,6108,6112,6114],{},[253,6095,2450],{},[253,6097,6098],{},[47,6099,119],{},[253,6101,6102],{},[47,6103,108],{},[253,6105,6106],{},[47,6107,108],{},[253,6109,6110],{},[47,6111,210],{},[253,6113,5164],{},[253,6115,5164],{},[232,6117,6118,6120,6124,6128,6132,6136,6138],{},[253,6119,2467],{},[253,6121,6122],{},[47,6123,108],{},[253,6125,6126],{},[47,6127,108],{},[253,6129,6130],{},[47,6131,108],{},[253,6133,6134],{},[47,6135,210],{},[253,6137,5147],{},[253,6139,5164],{},[232,6141,6142,6144,6148,6152,6156,6160,6162],{},[253,6143,2493],{},[253,6145,6146],{},[47,6147,108],{},[253,6149,6150],{},[47,6151,108],{},[253,6153,6154],{},[47,6155,108],{},[253,6157,6158],{},[47,6159,210],{},[253,6161,5164],{},[253,6163,5164],{},[232,6165,6166,6168,6172,6176,6180,6184,6186],{},[253,6167,4120],{},[253,6169,6170],{},[47,6171,219],{},[253,6173,6174],{},[47,6175,219],{},[253,6177,6178],{},[47,6179,219],{},[253,6181,6182],{},[47,6183,119],{},[253,6185,5164],{},[253,6187,5147],{},[232,6189,6190,6193,6197,6201,6205,6210,6212],{},[253,6191,6192],{},"Quicksort (Lomuto)",[253,6194,6195],{},[47,6196,219],{},[253,6198,6199],{},[47,6200,219],{},[253,6202,6203],{},[47,6204,108],{},[253,6206,6207,6209],{},[47,6208,214],{}," gemiddeld",[253,6211,5147],{},[253,6213,5164],{},[11,6215,6216,6217,6219,6220,6222,6223,6225,6226,150],{},"Bubble sort met vroegtijdige stop heeft een best case van ",[47,6218,119],{},"; zonder stop, zoals wij hem\ndefiniëren, is ook de best case ",[47,6221,108],{},". Het geheugen van quicksort is de recursiestapel: gemiddeld\n",[47,6224,214],{},", in het slechtste geval ",[47,6227,119],{},[39,6229,2248],{"id":2247},[129,6231,6232,6254,6260,6269,6285],{},[59,6233,6234,6237,6238,6241,6242,6245,6246,6248,6249,6251,6252,150],{},[15,6235,6236],{},"Insertion en selection sort verwisselen."," Insertion sort pakt het ",[20,6239,6240],{},"volgende"," element en schuift\nhet op zijn plek; het gesorteerde deel bevat dan nog niet per se de kleinste. Selection sort\n",[20,6243,6244],{},"zoekt"," het kleinste in de rest. Na ronde 1 van ",[47,6247,2568],{}," geeft insertion\n",[47,6250,2581],{},", selection ",[47,6253,3089],{},[59,6255,6256,6259],{},[15,6257,6258],{},"Een ronde overslaan omdat er niets verandert."," Bij insertion sort telt ronde 3 hierboven\ngewoon mee, ook al blijft de array gelijk.",[59,6261,6262,6265,6266,6268],{},[15,6263,6264],{},"Bubble sort vroegtijdig stoppen."," Volgens de afspraak loop je alle ",[47,6267,745],{}," rondes door. Bij een\nvraag als \"hoeveel vergelijkingen?\" maakt dat uit.",[59,6270,6271,6274,6275,6278,6279,6281,6282,6284],{},[15,6272,6273],{},"De laatste wissel van Lomuto vergeten."," Na de lus staat de pivot nog achteraan; pas de\n",[47,6276,6277],{},"swap(a[i], a[hi])"," zet hem op index ",[47,6280,429],{},". Ook: gelijke waarden aan de pivot gaan ",[20,6283,2148],{}," naar\nlinks, alleen strikt kleinere.",[59,6286,6287,6292,6293,150],{},[15,6288,6289,6290,85],{},"Denken dat quicksort altijd ",[47,6291,219],{}," Met het laatste element als pivot is een\ngesorteerde invoer het slechtste geval: ",[47,6294,108],{},[39,6296,2316],{"id":2315},[56,6298,6299,6307,6319,6330,6339],{},[59,6300,6301,6302,140,6304,6306],{},"Insertion sort: na ronde ",[47,6303,2487],{},[47,6305,2461],{}," gesorteerd; snel op bijna gesorteerde data, stabiel.",[59,6308,6309,6310,6312,6313,6315,6316,6318],{},"Selection sort: na ronde ",[47,6311,2487],{}," staan de ",[47,6314,2487],{}," kleinsten vooraan; altijd ",[47,6317,108],{},", niet stabiel.",[59,6320,6321,6322,6312,6324,6326,6327,6329],{},"Bubble sort: na ronde ",[47,6323,2487],{},[47,6325,2487],{}," grootsten achteraan; ",[47,6328,108],{},", stabiel.",[59,6331,6332,6333,6335,6336,6338],{},"Merge sort: altijd ",[47,6334,219],{}," en stabiel, maar kost ",[47,6337,119],{}," extra geheugen.",[59,6340,6341,6342,6344,6345,150],{},"Quicksort (Lomuto, laatste element als pivot): gemiddeld ",[47,6343,219],{}," en in-place, slechtst ",[47,6346,108],{},[2371,6348,6349],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":374,"searchDepth":414,"depth":414,"links":6351},[6352,6353,6354,6355,6356,6357,6358,6359,6360,6361],{"id":2424,"depth":414,"text":2425},{"id":2533,"depth":414,"text":2450},{"id":3035,"depth":414,"text":2467},{"id":3625,"depth":414,"text":2493},{"id":4119,"depth":414,"text":4120},{"id":5050,"depth":414,"text":5051},{"id":6036,"depth":414,"text":6037},{"id":2398,"depth":414,"text":17},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Insertion, selection, bubble, merge sort en quicksort stap voor stap: tabellen per ronde, Python- en Java-code, stabiliteit en complexiteit voor je tentamen.","i-lucide-arrow-down-wide-narrow",{},"\u002Fpracticely-dsa\u002Fsorteren",{"title":2402,"description":6362},"practicely-dsa\u002Fsorteren","UIA63XLS5o3aeifdip2qZtjYjc5fIIaub0fKqIQnEWs",{"id":6370,"title":6371,"body":6372,"description":8443,"extension":2392,"icon":8444,"meta":8445,"navigation":1702,"order":500,"path":8446,"seo":8447,"stem":8448,"topic":8449,"__hash__":8450},"practicelyDsa\u002Fpracticely-dsa\u002Fzoeken.md","Binair zoeken uitgelegd: van lineair zoeken naar O(log n)",{"type":8,"value":6373,"toc":8431},[6374,6381,6402,6406,6414,6627,6638,6642,6645,6657,6702,6719,6723,6730,6793,6895,6909,6913,6920,7023,7044,7048,7469,7496,7500,7503,7555,7558,7623,7632,7636,7652,7736,7742,8189,8201,8203,8224,8314,8330,8332,8392,8394,8428],[11,6375,6376,6377,6380],{},"Zoeken in een lijst klinkt triviaal: loop alles af tot je het vindt. Dat werkt, maar bij een miljoen\nelementen kost het in het slechtste geval een miljoen vergelijkingen. Is de lijst ",[15,6378,6379],{},"gesorteerd",",\ndan kan het met twintig. Dat is het verschil tussen lineair en binair zoeken.",[11,6382,6383,18,6386,6389,6390,6392,6393,6395,6396,1057,6398,6401],{},[15,6384,6385],{},"Binair zoeken",[20,6387,6388],{},"binary search",") is een van de meest gevraagde algoritmes op tentamens en in\nsollicitatiegesprekken, juist omdat het er simpel uitziet en toch vol zit met kleine valkuilen: ",[47,6391,468],{},"\nof ",[47,6394,4632],{},", ",[47,6397,4370],{},[47,6399,6400],{},"mid+1","? Op deze pagina zie je precies welke variant we gebruiken en waarom die\nklopt.",[39,6403,6405],{"id":6404},"lineair-zoeken","Lineair zoeken",[11,6407,6408,18,6410,6413],{},[15,6409,6405],{},[20,6411,6412],{},"linear search",") bekijkt de elementen één voor één, van voor naar achter, tot het\ngezochte element gevonden is of de lijst op is.",[369,6415,6416,6501],{},[372,6417,6418],{"v-slot:python":374},[376,6419,6421],{"className":378,"code":6420,"language":380,"meta":374,"style":374},"def lineair_zoeken(a, x):\n    for i in range(len(a)):\n        if a[i] == x:\n            return i  # gevonden op index i\n    return -1  # niet gevonden\n",[47,6422,6423,6440,6461,6479,6490],{"__ignoreMap":374},[384,6424,6425,6427,6430,6432,6434,6436,6438],{"class":386,"line":387},[384,6426,1612],{"class":450},[384,6428,6429],{"class":401}," lineair_zoeken",[384,6431,406],{"class":405},[384,6433,28],{"class":1620},[384,6435,568],{"class":405},[384,6437,2749],{"class":1620},[384,6439,411],{"class":405},[384,6441,6442,6444,6446,6448,6450,6452,6455,6457,6459],{"class":386,"line":414},[384,6443,547],{"class":390},[384,6445,395],{"class":394},[384,6447,398],{"class":390},[384,6449,402],{"class":401},[384,6451,406],{"class":405},[384,6453,6454],{"class":401},"len",[384,6456,406],{"class":405},[384,6458,28],{"class":401},[384,6460,2688],{"class":405},[384,6462,6463,6465,6467,6469,6471,6473,6475,6477],{"class":386,"line":500},[384,6464,577],{"class":390},[384,6466,423],{"class":394},[384,6468,426],{"class":405},[384,6470,429],{"class":394},[384,6472,586],{"class":405},[384,6474,589],{"class":405},[384,6476,2749],{"class":394},[384,6478,813],{"class":405},[384,6480,6481,6484,6487],{"class":386,"line":602},[384,6482,6483],{"class":390},"            return",[384,6485,6486],{"class":394}," i  ",[384,6488,6489],{"class":827},"# gevonden op index i\n",[384,6491,6492,6494,6496,6498],{"class":386,"line":721},[384,6493,1664],{"class":390},[384,6495,5546],{"class":405},[384,6497,269],{"class":459},[384,6499,6500],{"class":827},"  # niet gevonden\n",[372,6502,6503],{"v-slot:java":374},[376,6504,6506],{"className":437,"code":6505,"language":439,"meta":374,"style":374},"static int lineairZoeken(int[] a, int x) {\n    for (int i = 0; i \u003C a.length; i++) {\n        if (a[i] == x) {\n            return i; \u002F\u002F gevonden op index i\n        }\n    }\n    return -1; \u002F\u002F niet gevonden\n}\n",[47,6507,6508,6535,6569,6591,6602,6606,6610,6623],{"__ignoreMap":374},[384,6509,6510,6512,6514,6517,6519,6521,6523,6525,6527,6529,6531,6533],{"class":386,"line":387},[384,6511,1756],{"class":450},[384,6513,1759],{"class":450},[384,6515,6516],{"class":401}," lineairZoeken",[384,6518,406],{"class":405},[384,6520,451],{"class":450},[384,6522,1768],{"class":405},[384,6524,423],{"class":394},[384,6526,568],{"class":405},[384,6528,1759],{"class":450},[384,6530,2749],{"class":394},[384,6532,863],{"class":405},[384,6534,482],{"class":405},[384,6536,6537,6539,6541,6543,6545,6547,6549,6551,6553,6555,6557,6559,6561,6563,6565,6567],{"class":386,"line":414},[384,6538,547],{"class":390},[384,6540,18],{"class":405},[384,6542,451],{"class":450},[384,6544,395],{"class":394},[384,6546,456],{"class":405},[384,6548,460],{"class":459},[384,6550,463],{"class":405},[384,6552,395],{"class":394},[384,6554,468],{"class":405},[384,6556,423],{"class":394},[384,6558,150],{"class":405},[384,6560,2867],{"class":394},[384,6562,463],{"class":405},[384,6564,476],{"class":394},[384,6566,479],{"class":405},[384,6568,482],{"class":405},[384,6570,6571,6573,6575,6577,6579,6581,6583,6585,6587,6589],{"class":386,"line":500},[384,6572,577],{"class":390},[384,6574,18],{"class":405},[384,6576,28],{"class":394},[384,6578,426],{"class":405},[384,6580,429],{"class":394},[384,6582,586],{"class":405},[384,6584,589],{"class":405},[384,6586,2749],{"class":394},[384,6588,863],{"class":405},[384,6590,482],{"class":405},[384,6592,6593,6595,6597,6599],{"class":386,"line":602},[384,6594,6483],{"class":390},[384,6596,476],{"class":394},[384,6598,463],{"class":405},[384,6600,6601],{"class":827}," \u002F\u002F gevonden op index i\n",[384,6603,6604],{"class":386,"line":721},[384,6605,724],{"class":405},[384,6607,6608],{"class":386,"line":727},[384,6609,730],{"class":405},[384,6611,6612,6614,6616,6618,6620],{"class":386,"line":733},[384,6613,1664],{"class":390},[384,6615,5546],{"class":405},[384,6617,269],{"class":459},[384,6619,463],{"class":405},[384,6621,6622],{"class":827}," \u002F\u002F niet gevonden\n",[384,6624,6625],{"class":386,"line":1299},[384,6626,503],{"class":405},[11,6628,6629,6630,6634,6635,6637],{},"Het voordeel: de lijst hoeft niet gesorteerd te zijn, en het werkt ook op een\n",[28,6631,6633],{"href":6632},"\u002Fpracticely\u002Fdsa\u002Fstapels-en-wachtrijen","gelinkte lijst",". Het nadeel: ",[47,6636,119],{},". Staat het element\nachteraan of helemaal niet in de lijst, dan bekijk je alles.",[39,6639,6641],{"id":6640},"binair-zoeken-het-idee","Binair zoeken: het idee",[11,6643,6644],{},"Denk aan een woordenboek. Je zoekt \"kwartel\" en slaat het boek ergens in het midden open bij \"mango\".\nOmdat de woorden alfabetisch staan, weet je meteen: het moet in de eerste helft zitten. De tweede\nhelft hoef je nooit meer te bekijken.",[11,6646,6647,6648,6651,6652,188,6654,6656],{},"Binair zoeken doet hetzelfde met een ",[15,6649,6650],{},"gesorteerde"," array. Je houdt twee grenzen bij, ",[47,6653,5366],{},[47,6655,5337],{},",\nwaartussen het element moet zitten als het er is. Elke stap:",[129,6658,6659,6666,6677,6691],{},[59,6660,6661,6662,6665],{},"Bereken ",[47,6663,6664],{},"mid = ⌊(lo + hi) \u002F 2⌋"," (naar beneden afronden).",[59,6667,6668,6669,6672,6673,6676],{},"Is ",[47,6670,6671],{},"a[mid]"," gelijk aan ",[47,6674,6675],{},"x","? Gevonden.",[59,6678,6668,6679,6682,6683,6685,6686,71,6688,150],{},[47,6680,6681],{},"a[mid] \u003C x","? Dan zit ",[47,6684,6675],{}," rechts van ",[47,6687,4370],{},[47,6689,6690],{},"lo = mid + 1",[59,6692,6693,6694,6696,6697,71,6699,150],{},"Anders zit ",[47,6695,6675],{}," links van ",[47,6698,4370],{},[47,6700,6701],{},"hi = mid - 1",[11,6703,6704,6705,188,6708,6711,6712,6715,6716,6718],{},"Je begint met ",[47,6706,6707],{},"lo = 0",[47,6709,6710],{},"hi = n - 1",", en je stopt als ",[47,6713,6714],{},"lo > hi",": dan is het zoekgebied leeg en\nstaat ",[47,6717,6675],{}," niet in de array.",[39,6720,6722],{"id":6721},"uitgewerkt-voorbeeld-gevonden","Uitgewerkt voorbeeld: gevonden",[11,6724,6725,6726,6729],{},"We zoeken ",[47,6727,6728],{},"x = 30"," in deze array van tien elementen:",[226,6731,6732,6759],{},[229,6733,6734],{},[232,6735,6736,6739,6741,6743,6745,6747,6749,6751,6753,6755,6757],{},[235,6737,6738],{},"index",[235,6740,2048],{},[235,6742,269],{},[235,6744,1952],{},[235,6746,1970],{},[235,6748,1044],{},[235,6750,1025],{},[235,6752,2603],{},[235,6754,4251],{},[235,6756,2089],{},[235,6758,5186],{},[248,6760,6761],{},[232,6762,6763,6765,6767,6769,6772,6775,6778,6781,6784,6787,6790],{},[253,6764,28],{},[253,6766,1970],{},[253,6768,2089],{},[253,6770,6771],{},"12",[253,6773,6774],{},"17",[253,6776,6777],{},"21",[253,6779,6780],{},"25",[253,6782,6783],{},"30",[253,6785,6786],{},"34",[253,6788,6789],{},"41",[253,6791,6792],{},"50",[226,6794,6795,6815],{},[229,6796,6797],{},[232,6798,6799,6801,6803,6805,6807,6811,6813],{},[235,6800,4147],{},[235,6802,5366],{},[235,6804,5337],{},[235,6806,4370],{},[235,6808,28,6809],{},[384,6810,4370],{},[235,6812,2008],{},[235,6814,5113],{},[248,6816,6817,6837,6857,6877],{},[232,6818,6819,6821,6823,6825,6827,6829,6832],{},[253,6820,269],{},[253,6822,2048],{},[253,6824,5186],{},[253,6826,1044],{},[253,6828,6777],{},[253,6830,6831],{},"21 \u003C 30",[253,6833,6834],{},[47,6835,6836],{},"lo = 5",[232,6838,6839,6841,6843,6845,6847,6849,6852],{},[253,6840,1952],{},[253,6842,1025],{},[253,6844,5186],{},[253,6846,4251],{},[253,6848,6786],{},[253,6850,6851],{},"34 > 30",[253,6853,6854],{},[47,6855,6856],{},"hi = 6",[232,6858,6859,6861,6863,6865,6867,6869,6872],{},[253,6860,1970],{},[253,6862,1025],{},[253,6864,2603],{},[253,6866,1025],{},[253,6868,6780],{},[253,6870,6871],{},"25 \u003C 30",[253,6873,6874],{},[47,6875,6876],{},"lo = 6",[232,6878,6879,6881,6883,6885,6887,6889,6892],{},[253,6880,1044],{},[253,6882,2603],{},[253,6884,2603],{},[253,6886,2603],{},[253,6888,6783],{},[253,6890,6891],{},"gelijk",[253,6893,6894],{},"gevonden op index 6",[11,6896,6897,6898,6901,6902,6905,6906,150],{},"De waarden die achtereenvolgens worden vergeleken zijn ",[47,6899,6900],{},"21, 34, 25, 30",". Let op stap 3: ",[47,6903,6904],{},"(5 + 6) \u002F 2 = 5,5",", afgerond naar beneden geeft ",[47,6907,6908],{},"mid = 5",[39,6910,6912],{"id":6911},"uitgewerkt-voorbeeld-niet-gevonden","Uitgewerkt voorbeeld: niet gevonden",[11,6914,6915,6916,6919],{},"Nu zoeken we ",[47,6917,6918],{},"x = 10"," in dezelfde array:",[226,6921,6922,6942],{},[229,6923,6924],{},[232,6925,6926,6928,6930,6932,6934,6938,6940],{},[235,6927,4147],{},[235,6929,5366],{},[235,6931,5337],{},[235,6933,4370],{},[235,6935,28,6936],{},[384,6937,4370],{},[235,6939,2008],{},[235,6941,5113],{},[248,6943,6944,6964,6984,7004],{},[232,6945,6946,6948,6950,6952,6954,6956,6959],{},[253,6947,269],{},[253,6949,2048],{},[253,6951,5186],{},[253,6953,1044],{},[253,6955,6777],{},[253,6957,6958],{},"21 > 10",[253,6960,6961],{},[47,6962,6963],{},"hi = 3",[232,6965,6966,6968,6970,6972,6974,6976,6979],{},[253,6967,1952],{},[253,6969,2048],{},[253,6971,1970],{},[253,6973,269],{},[253,6975,2089],{},[253,6977,6978],{},"8 \u003C 10",[253,6980,6981],{},[47,6982,6983],{},"lo = 2",[232,6985,6986,6988,6990,6992,6994,6996,6999],{},[253,6987,1970],{},[253,6989,1952],{},[253,6991,1970],{},[253,6993,1952],{},[253,6995,6771],{},[253,6997,6998],{},"12 > 10",[253,7000,7001],{},[47,7002,7003],{},"hi = 1",[232,7005,7006,7008,7010,7012,7014,7016,7020],{},[253,7007,2563],{},[253,7009,1952],{},[253,7011,269],{},[253,7013,2563],{},[253,7015,2563],{},[253,7017,7018],{},[47,7019,6714],{},[253,7021,7022],{},"stop: niet gevonden",[11,7024,7025,7026,188,7028,7030,7031,7033,7034,7037,7038,7040,7041,7043],{},"Vergeleken waarden: ",[47,7027,2089],{},[47,7029,6771],{}," liggen naast elkaar en ",[47,7032,287],{}," zit ertussen. Na drie vergelijkingen\n(",[47,7035,7036],{},"21, 8, 12",") is het zoekgebied leeg. De eindwaarde van ",[47,7039,5366],{}," (hier 2) is precies de plek waar je ",[47,7042,287],{},"\nzou moeten invoegen om de array gesorteerd te houden; dat is handig om te onthouden.",[39,7045,7047],{"id":7046},"de-code","De code",[369,7049,7050,7232],{},[372,7051,7052],{"v-slot:python":374},[376,7053,7055],{"className":378,"code":7054,"language":380,"meta":374,"style":374},"def binair_zoeken(a, x):\n    lo, hi = 0, len(a) - 1\n    while lo \u003C= hi:  # zolang het zoekgebied niet leeg is\n        mid = (lo + hi) \u002F\u002F 2  # naar beneden afronden\n        if a[mid] == x:\n            return mid\n        elif a[mid] \u003C x:\n            lo = mid + 1  # x zit rechts van mid\n        else:\n            hi = mid - 1  # x zit links van mid\n    return -1  # niet gevonden\n",[47,7056,7057,7074,7101,7116,7140,7158,7165,7184,7200,7206,7222],{"__ignoreMap":374},[384,7058,7059,7061,7064,7066,7068,7070,7072],{"class":386,"line":387},[384,7060,1612],{"class":450},[384,7062,7063],{"class":401}," binair_zoeken",[384,7065,406],{"class":405},[384,7067,28],{"class":1620},[384,7069,568],{"class":405},[384,7071,2749],{"class":1620},[384,7073,411],{"class":405},[384,7075,7076,7079,7081,7083,7085,7087,7089,7091,7093,7095,7097,7099],{"class":386,"line":414},[384,7077,7078],{"class":394},"    lo",[384,7080,568],{"class":405},[384,7082,5522],{"class":394},[384,7084,456],{"class":405},[384,7086,460],{"class":459},[384,7088,568],{"class":405},[384,7090,2681],{"class":401},[384,7092,406],{"class":405},[384,7094,28],{"class":401},[384,7096,863],{"class":405},[384,7098,5546],{"class":405},[384,7100,918],{"class":459},[384,7102,7103,7105,7107,7109,7111,7113],{"class":386,"line":500},[384,7104,1357],{"class":390},[384,7106,5555],{"class":394},[384,7108,4632],{"class":405},[384,7110,5321],{"class":394},[384,7112,1911],{"class":405},[384,7114,7115],{"class":827},"  # zolang het zoekgebied niet leeg is\n",[384,7117,7118,7121,7123,7125,7127,7129,7131,7133,7135,7137],{"class":386,"line":602},[384,7119,7120],{"class":394},"        mid ",[384,7122,456],{"class":405},[384,7124,18],{"class":405},[384,7126,5929],{"class":394},[384,7128,562],{"class":405},[384,7130,5321],{"class":394},[384,7132,863],{"class":405},[384,7134,4349],{"class":405},[384,7136,824],{"class":459},[384,7138,7139],{"class":827},"  # naar beneden afronden\n",[384,7141,7142,7144,7146,7148,7150,7152,7154,7156],{"class":386,"line":721},[384,7143,577],{"class":390},[384,7145,423],{"class":394},[384,7147,426],{"class":405},[384,7149,4370],{"class":394},[384,7151,586],{"class":405},[384,7153,589],{"class":405},[384,7155,2749],{"class":394},[384,7157,813],{"class":405},[384,7159,7160,7162],{"class":386,"line":727},[384,7161,6483],{"class":390},[384,7163,7164],{"class":394}," mid\n",[384,7166,7167,7170,7172,7174,7176,7178,7180,7182],{"class":386,"line":733},[384,7168,7169],{"class":390},"        elif",[384,7171,423],{"class":394},[384,7173,426],{"class":405},[384,7175,4370],{"class":394},[384,7177,586],{"class":405},[384,7179,3294],{"class":405},[384,7181,2749],{"class":394},[384,7183,813],{"class":405},[384,7185,7186,7189,7191,7193,7195,7197],{"class":386,"line":1299},[384,7187,7188],{"class":394},"            lo ",[384,7190,456],{"class":405},[384,7192,4657],{"class":394},[384,7194,562],{"class":405},[384,7196,565],{"class":459},[384,7198,7199],{"class":827},"  # x zit rechts van mid\n",[384,7201,7202,7204],{"class":386,"line":2790},[384,7203,4510],{"class":390},[384,7205,813],{"class":405},[384,7207,7208,7211,7213,7215,7217,7219],{"class":386,"line":2985},[384,7209,7210],{"class":394},"            hi ",[384,7212,456],{"class":405},[384,7214,4657],{"class":394},[384,7216,1677],{"class":405},[384,7218,565],{"class":459},[384,7220,7221],{"class":827},"  # x zit links van mid\n",[384,7223,7224,7226,7228,7230],{"class":386,"line":3009},[384,7225,1664],{"class":390},[384,7227,5546],{"class":405},[384,7229,269],{"class":459},[384,7231,6500],{"class":827},[372,7233,7234],{"v-slot:java":374},[376,7235,7237],{"className":437,"code":7236,"language":439,"meta":374,"style":374},"static int binairZoeken(int[] a, int x) {\n    int lo = 0, hi = a.length - 1;\n    while (lo \u003C= hi) { \u002F\u002F zolang het zoekgebied niet leeg is\n        int mid = lo + (hi - lo) \u002F 2; \u002F\u002F gelijk aan ⌊(lo+hi)\u002F2⌋, maar zonder overflow\n        if (a[mid] == x) {\n            return mid;\n        } else if (a[mid] \u003C x) {\n            lo = mid + 1; \u002F\u002F x zit rechts van mid\n        } else {\n            hi = mid - 1; \u002F\u002F x zit links van mid\n        }\n    }\n    return -1; \u002F\u002F niet gevonden\n}\n",[47,7238,7239,7266,7294,7313,7346,7368,7376,7403,7420,7428,7445,7449,7453,7465],{"__ignoreMap":374},[384,7240,7241,7243,7245,7248,7250,7252,7254,7256,7258,7260,7262,7264],{"class":386,"line":387},[384,7242,1756],{"class":450},[384,7244,1759],{"class":450},[384,7246,7247],{"class":401}," binairZoeken",[384,7249,406],{"class":405},[384,7251,451],{"class":450},[384,7253,1768],{"class":405},[384,7255,423],{"class":394},[384,7257,568],{"class":405},[384,7259,1759],{"class":450},[384,7261,2749],{"class":394},[384,7263,863],{"class":405},[384,7265,482],{"class":405},[384,7267,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286,7288,7290,7292],{"class":386,"line":414},[384,7269,1417],{"class":450},[384,7271,5555],{"class":394},[384,7273,456],{"class":405},[384,7275,460],{"class":459},[384,7277,568],{"class":405},[384,7279,5522],{"class":394},[384,7281,456],{"class":405},[384,7283,423],{"class":394},[384,7285,150],{"class":405},[384,7287,4629],{"class":394},[384,7289,1677],{"class":405},[384,7291,565],{"class":459},[384,7293,848],{"class":405},[384,7295,7296,7298,7300,7302,7304,7306,7308,7310],{"class":386,"line":500},[384,7297,1357],{"class":390},[384,7299,18],{"class":405},[384,7301,5929],{"class":394},[384,7303,4632],{"class":405},[384,7305,5321],{"class":394},[384,7307,863],{"class":405},[384,7309,1200],{"class":405},[384,7311,7312],{"class":827}," \u002F\u002F zolang het zoekgebied niet leeg is\n",[384,7314,7315,7317,7319,7321,7323,7325,7327,7330,7332,7334,7336,7339,7341,7343],{"class":386,"line":602},[384,7316,2881],{"class":450},[384,7318,4657],{"class":394},[384,7320,456],{"class":405},[384,7322,5555],{"class":394},[384,7324,562],{"class":405},[384,7326,18],{"class":405},[384,7328,7329],{"class":394},"hi ",[384,7331,1677],{"class":405},[384,7333,5316],{"class":394},[384,7335,863],{"class":405},[384,7337,7338],{"class":405}," \u002F",[384,7340,824],{"class":459},[384,7342,463],{"class":405},[384,7344,7345],{"class":827}," \u002F\u002F gelijk aan ⌊(lo+hi)\u002F2⌋, maar zonder overflow\n",[384,7347,7348,7350,7352,7354,7356,7358,7360,7362,7364,7366],{"class":386,"line":721},[384,7349,577],{"class":390},[384,7351,18],{"class":405},[384,7353,28],{"class":394},[384,7355,426],{"class":405},[384,7357,4370],{"class":394},[384,7359,586],{"class":405},[384,7361,589],{"class":405},[384,7363,2749],{"class":394},[384,7365,863],{"class":405},[384,7367,482],{"class":405},[384,7369,7370,7372,7374],{"class":386,"line":727},[384,7371,6483],{"class":390},[384,7373,4717],{"class":394},[384,7375,848],{"class":405},[384,7377,7378,7380,7382,7385,7387,7389,7391,7393,7395,7397,7399,7401],{"class":386,"line":733},[384,7379,4912],{"class":405},[384,7381,4915],{"class":390},[384,7383,7384],{"class":390}," if",[384,7386,18],{"class":405},[384,7388,28],{"class":394},[384,7390,426],{"class":405},[384,7392,4370],{"class":394},[384,7394,586],{"class":405},[384,7396,3294],{"class":405},[384,7398,2749],{"class":394},[384,7400,863],{"class":405},[384,7402,482],{"class":405},[384,7404,7405,7407,7409,7411,7413,7415,7417],{"class":386,"line":1299},[384,7406,7188],{"class":394},[384,7408,456],{"class":405},[384,7410,4657],{"class":394},[384,7412,562],{"class":405},[384,7414,565],{"class":459},[384,7416,463],{"class":405},[384,7418,7419],{"class":827}," \u002F\u002F x zit rechts van mid\n",[384,7421,7422,7424,7426],{"class":386,"line":2790},[384,7423,4912],{"class":405},[384,7425,4915],{"class":390},[384,7427,482],{"class":405},[384,7429,7430,7432,7434,7436,7438,7440,7442],{"class":386,"line":2985},[384,7431,7210],{"class":394},[384,7433,456],{"class":405},[384,7435,4657],{"class":394},[384,7437,1677],{"class":405},[384,7439,565],{"class":459},[384,7441,463],{"class":405},[384,7443,7444],{"class":827}," \u002F\u002F x zit links van mid\n",[384,7446,7447],{"class":386,"line":3009},[384,7448,724],{"class":405},[384,7450,7451],{"class":386,"line":3014},[384,7452,730],{"class":405},[384,7454,7455,7457,7459,7461,7463],{"class":386,"line":3563},[384,7456,1664],{"class":390},[384,7458,5546],{"class":405},[384,7460,269],{"class":459},[384,7462,463],{"class":405},[384,7464,6622],{"class":827},[384,7466,7467],{"class":386,"line":3588},[384,7468,503],{"class":405},[11,7470,7471,7472,7475,7476,7479,7480,7482,7483,7485,7486,7488,7489,7492,7493,7495],{},"In Java schrijven we ",[47,7473,7474],{},"lo + (hi - lo) \u002F 2"," in plaats van ",[47,7477,7478],{},"(lo + hi) \u002F 2",". Voor niet-negatieve ",[47,7481,5366],{},"\nen ",[47,7484,5337],{}," levert dat dezelfde ",[47,7487,4370],{}," op, maar het voorkomt dat ",[47,7490,7491],{},"lo + hi"," groter wordt dan de maximale\n",[47,7494,451],{}," bij hele grote arrays. In Python bestaat dat probleem niet.",[39,7497,7499],{"id":7498},"off-by-one-valkuilen","Off-by-one-valkuilen",[11,7501,7502],{},"Binair zoeken is berucht om fouten van één positie. De drie keuzes in onze variant horen bij elkaar:",[226,7504,7505,7515],{},[229,7506,7507],{},[232,7508,7509,7512],{},[235,7510,7511],{},"Keuze",[235,7513,7514],{},"Waarom",[248,7516,7517,7528,7542],{},[232,7518,7519,7523],{},[253,7520,7521],{},[47,7522,6710],{},[253,7524,7525,7527],{},[47,7526,5337],{}," is de laatste index die nog kandidaat is (inclusief)",[232,7529,7530,7535],{},[253,7531,7532],{},[47,7533,7534],{},"while lo \u003C= hi",[253,7536,7537,7538,7541],{},"als ",[47,7539,7540],{},"lo == hi"," is er nog precies één kandidaat die je moet bekijken",[232,7543,7544,7550],{},[253,7545,7546,6395,7548],{},[47,7547,6690],{},[47,7549,6701],{},[253,7551,7552,7554],{},[47,7553,6671],{}," is al bekeken, die hoeft niet meer in het zoekgebied",[11,7556,7557],{},"Wat gaat er mis als je een van de drie verandert?",[56,7559,7560,7579,7607],{},[59,7561,7562,7567,7568,7571,7572,7575,7576,7578],{},[15,7563,7564],{},[47,7565,7566],{},"while lo \u003C hi",": in het eerste voorbeeld stop je na stap 3 met ",[47,7569,7570],{},"lo = hi = 6",", zonder ",[47,7573,7574],{},"a[6]","\nte bekijken. Je meldt \"niet gevonden\" terwijl ",[47,7577,6783],{}," er wel staat.",[59,7580,7581,7589,7590,7593,7594,7596,7597,7600,7601,7603,7604,150],{},[15,7582,7583,7475,7586],{},[47,7584,7585],{},"lo = mid",[47,7587,7588],{},"mid + 1",": met ",[47,7591,7592],{},"lo = 5, hi = 6"," krijg je ",[47,7595,6908],{},", en als\n",[47,7598,7599],{},"a[5] \u003C x"," blijft ",[47,7602,5366],{}," op 5 staan. Het zoekgebied krimpt niet: een ",[15,7605,7606],{},"oneindige lus",[59,7608,7609,1907,7614,7616,7617,7619,7620,7622],{},[15,7610,7611],{},[47,7612,7613],{},"hi = n",[47,7615,4632],{},": dan kan ",[47,7618,4370],{}," gelijk worden aan ",[47,7621,49],{}," en lees je buiten de array.",[11,7624,7625,7626,7628,7629,7631],{},"Er bestaan ook correcte varianten met ",[47,7627,7613],{}," (exclusief) en ",[47,7630,7566],{},". Die werken prima, maar\nmeng de twee stijlen nooit. Op Practicely gebruiken we altijd de variant hierboven.",[39,7633,7635],{"id":7634},"variant-het-eerste-voorkomen","Variant: het eerste voorkomen",[11,7637,7638,7639,7641,7642,7645,7646,7648,7649,7651],{},"Staat ",[47,7640,6675],{}," meerdere keren in de array, dan geeft gewoon binair zoeken een willekeurige van de\nvoorkomens terug. In ",[47,7643,7644],{},"[1, 3, 3, 3, 3, 7, 9]"," vindt het ",[47,7647,1970],{}," al bij de eerste stap, op index 3. Wil je\nhet ",[15,7650,2523],{}," voorkomen, dan ga je na een treffer verder zoeken in de linkerhelft en onthoud je de\nbeste index tot nu toe:",[226,7653,7654,7675],{},[229,7655,7656],{},[232,7657,7658,7660,7662,7664,7666,7670,7672],{},[235,7659,4147],{},[235,7661,5366],{},[235,7663,5337],{},[235,7665,4370],{},[235,7667,28,7668],{},[384,7669,4370],{},[235,7671,5113],{},[235,7673,7674],{},"Beste tot nu toe",[248,7676,7677,7697,7716],{},[232,7678,7679,7681,7683,7685,7687,7689,7695],{},[253,7680,269],{},[253,7682,2048],{},[253,7684,2603],{},[253,7686,1970],{},[253,7688,1970],{},[253,7690,7691,7692],{},"gelijk, zoek links: ",[47,7693,7694],{},"hi = 2",[253,7696,1970],{},[232,7698,7699,7701,7703,7705,7707,7709,7714],{},[253,7700,1952],{},[253,7702,2048],{},[253,7704,1952],{},[253,7706,269],{},[253,7708,1970],{},[253,7710,7691,7711],{},[47,7712,7713],{},"hi = 0",[253,7715,269],{},[232,7717,7718,7720,7722,7724,7726,7728,7734],{},[253,7719,1970],{},[253,7721,2048],{},[253,7723,2048],{},[253,7725,2048],{},[253,7727,269],{},[253,7729,7730,7731],{},"1 \u003C 3: ",[47,7732,7733],{},"lo = 1",[253,7735,269],{},[11,7737,7738,7739,7741],{},"Daarna is ",[47,7740,6714],{}," en is het antwoord index 1.",[369,7743,7744,7936],{},[372,7745,7746],{"v-slot:python":374},[376,7747,7749],{"className":378,"code":7748,"language":380,"meta":374,"style":374},"def eerste_voorkomen(a, x):\n    lo, hi = 0, len(a) - 1\n    antwoord = -1\n    while lo \u003C= hi:\n        mid = (lo + hi) \u002F\u002F 2\n        if a[mid] == x:\n            antwoord = mid  # onthouden en links verder zoeken\n            hi = mid - 1\n        elif a[mid] \u003C x:\n            lo = mid + 1\n        else:\n            hi = mid - 1\n    return antwoord\n",[47,7750,7751,7768,7794,7806,7818,7838,7856,7869,7881,7899,7911,7917,7929],{"__ignoreMap":374},[384,7752,7753,7755,7758,7760,7762,7764,7766],{"class":386,"line":387},[384,7754,1612],{"class":450},[384,7756,7757],{"class":401}," eerste_voorkomen",[384,7759,406],{"class":405},[384,7761,28],{"class":1620},[384,7763,568],{"class":405},[384,7765,2749],{"class":1620},[384,7767,411],{"class":405},[384,7769,7770,7772,7774,7776,7778,7780,7782,7784,7786,7788,7790,7792],{"class":386,"line":414},[384,7771,7078],{"class":394},[384,7773,568],{"class":405},[384,7775,5522],{"class":394},[384,7777,456],{"class":405},[384,7779,460],{"class":459},[384,7781,568],{"class":405},[384,7783,2681],{"class":401},[384,7785,406],{"class":405},[384,7787,28],{"class":401},[384,7789,863],{"class":405},[384,7791,5546],{"class":405},[384,7793,918],{"class":459},[384,7795,7796,7799,7801,7803],{"class":386,"line":500},[384,7797,7798],{"class":394},"    antwoord ",[384,7800,456],{"class":405},[384,7802,5546],{"class":405},[384,7804,7805],{"class":459},"1\n",[384,7807,7808,7810,7812,7814,7816],{"class":386,"line":602},[384,7809,1357],{"class":390},[384,7811,5555],{"class":394},[384,7813,4632],{"class":405},[384,7815,5321],{"class":394},[384,7817,813],{"class":405},[384,7819,7820,7822,7824,7826,7828,7830,7832,7834,7836],{"class":386,"line":721},[384,7821,7120],{"class":394},[384,7823,456],{"class":405},[384,7825,18],{"class":405},[384,7827,5929],{"class":394},[384,7829,562],{"class":405},[384,7831,5321],{"class":394},[384,7833,863],{"class":405},[384,7835,4349],{"class":405},[384,7837,1375],{"class":459},[384,7839,7840,7842,7844,7846,7848,7850,7852,7854],{"class":386,"line":727},[384,7841,577],{"class":390},[384,7843,423],{"class":394},[384,7845,426],{"class":405},[384,7847,4370],{"class":394},[384,7849,586],{"class":405},[384,7851,589],{"class":405},[384,7853,2749],{"class":394},[384,7855,813],{"class":405},[384,7857,7858,7861,7863,7866],{"class":386,"line":733},[384,7859,7860],{"class":394},"            antwoord ",[384,7862,456],{"class":405},[384,7864,7865],{"class":394}," mid  ",[384,7867,7868],{"class":827},"# onthouden en links verder zoeken\n",[384,7870,7871,7873,7875,7877,7879],{"class":386,"line":1299},[384,7872,7210],{"class":394},[384,7874,456],{"class":405},[384,7876,4657],{"class":394},[384,7878,1677],{"class":405},[384,7880,918],{"class":459},[384,7882,7883,7885,7887,7889,7891,7893,7895,7897],{"class":386,"line":2790},[384,7884,7169],{"class":390},[384,7886,423],{"class":394},[384,7888,426],{"class":405},[384,7890,4370],{"class":394},[384,7892,586],{"class":405},[384,7894,3294],{"class":405},[384,7896,2749],{"class":394},[384,7898,813],{"class":405},[384,7900,7901,7903,7905,7907,7909],{"class":386,"line":2985},[384,7902,7188],{"class":394},[384,7904,456],{"class":405},[384,7906,4657],{"class":394},[384,7908,562],{"class":405},[384,7910,918],{"class":459},[384,7912,7913,7915],{"class":386,"line":3009},[384,7914,4510],{"class":390},[384,7916,813],{"class":405},[384,7918,7919,7921,7923,7925,7927],{"class":386,"line":3014},[384,7920,7210],{"class":394},[384,7922,456],{"class":405},[384,7924,4657],{"class":394},[384,7926,1677],{"class":405},[384,7928,918],{"class":459},[384,7930,7931,7933],{"class":386,"line":3563},[384,7932,1664],{"class":390},[384,7934,7935],{"class":394}," antwoord\n",[372,7937,7938],{"v-slot:java":374},[376,7939,7941],{"className":437,"code":7940,"language":439,"meta":374,"style":374},"static int eersteVoorkomen(int[] a, int x) {\n    int lo = 0, hi = a.length - 1;\n    int antwoord = -1;\n    while (lo \u003C= hi) {\n        int mid = lo + (hi - lo) \u002F 2;\n        if (a[mid] == x) {\n            antwoord = mid; \u002F\u002F onthouden en links verder zoeken\n            hi = mid - 1;\n        } else if (a[mid] \u003C x) {\n            lo = mid + 1;\n        } else {\n            hi = mid - 1;\n        }\n    }\n    return antwoord;\n}\n",[47,7942,7943,7970,7998,8013,8029,8057,8079,8092,8106,8132,8146,8154,8168,8172,8176,8185],{"__ignoreMap":374},[384,7944,7945,7947,7949,7952,7954,7956,7958,7960,7962,7964,7966,7968],{"class":386,"line":387},[384,7946,1756],{"class":450},[384,7948,1759],{"class":450},[384,7950,7951],{"class":401}," eersteVoorkomen",[384,7953,406],{"class":405},[384,7955,451],{"class":450},[384,7957,1768],{"class":405},[384,7959,423],{"class":394},[384,7961,568],{"class":405},[384,7963,1759],{"class":450},[384,7965,2749],{"class":394},[384,7967,863],{"class":405},[384,7969,482],{"class":405},[384,7971,7972,7974,7976,7978,7980,7982,7984,7986,7988,7990,7992,7994,7996],{"class":386,"line":414},[384,7973,1417],{"class":450},[384,7975,5555],{"class":394},[384,7977,456],{"class":405},[384,7979,460],{"class":459},[384,7981,568],{"class":405},[384,7983,5522],{"class":394},[384,7985,456],{"class":405},[384,7987,423],{"class":394},[384,7989,150],{"class":405},[384,7991,4629],{"class":394},[384,7993,1677],{"class":405},[384,7995,565],{"class":459},[384,7997,848],{"class":405},[384,7999,8000,8002,8005,8007,8009,8011],{"class":386,"line":500},[384,8001,1417],{"class":450},[384,8003,8004],{"class":394}," antwoord ",[384,8006,456],{"class":405},[384,8008,5546],{"class":405},[384,8010,269],{"class":459},[384,8012,848],{"class":405},[384,8014,8015,8017,8019,8021,8023,8025,8027],{"class":386,"line":602},[384,8016,1357],{"class":390},[384,8018,18],{"class":405},[384,8020,5929],{"class":394},[384,8022,4632],{"class":405},[384,8024,5321],{"class":394},[384,8026,863],{"class":405},[384,8028,482],{"class":405},[384,8030,8031,8033,8035,8037,8039,8041,8043,8045,8047,8049,8051,8053,8055],{"class":386,"line":721},[384,8032,2881],{"class":450},[384,8034,4657],{"class":394},[384,8036,456],{"class":405},[384,8038,5555],{"class":394},[384,8040,562],{"class":405},[384,8042,18],{"class":405},[384,8044,7329],{"class":394},[384,8046,1677],{"class":405},[384,8048,5316],{"class":394},[384,8050,863],{"class":405},[384,8052,7338],{"class":405},[384,8054,824],{"class":459},[384,8056,848],{"class":405},[384,8058,8059,8061,8063,8065,8067,8069,8071,8073,8075,8077],{"class":386,"line":727},[384,8060,577],{"class":390},[384,8062,18],{"class":405},[384,8064,28],{"class":394},[384,8066,426],{"class":405},[384,8068,4370],{"class":394},[384,8070,586],{"class":405},[384,8072,589],{"class":405},[384,8074,2749],{"class":394},[384,8076,863],{"class":405},[384,8078,482],{"class":405},[384,8080,8081,8083,8085,8087,8089],{"class":386,"line":733},[384,8082,7860],{"class":394},[384,8084,456],{"class":405},[384,8086,4717],{"class":394},[384,8088,463],{"class":405},[384,8090,8091],{"class":827}," \u002F\u002F onthouden en links verder zoeken\n",[384,8093,8094,8096,8098,8100,8102,8104],{"class":386,"line":1299},[384,8095,7210],{"class":394},[384,8097,456],{"class":405},[384,8099,4657],{"class":394},[384,8101,1677],{"class":405},[384,8103,565],{"class":459},[384,8105,848],{"class":405},[384,8107,8108,8110,8112,8114,8116,8118,8120,8122,8124,8126,8128,8130],{"class":386,"line":2790},[384,8109,4912],{"class":405},[384,8111,4915],{"class":390},[384,8113,7384],{"class":390},[384,8115,18],{"class":405},[384,8117,28],{"class":394},[384,8119,426],{"class":405},[384,8121,4370],{"class":394},[384,8123,586],{"class":405},[384,8125,3294],{"class":405},[384,8127,2749],{"class":394},[384,8129,863],{"class":405},[384,8131,482],{"class":405},[384,8133,8134,8136,8138,8140,8142,8144],{"class":386,"line":2985},[384,8135,7188],{"class":394},[384,8137,456],{"class":405},[384,8139,4657],{"class":394},[384,8141,562],{"class":405},[384,8143,565],{"class":459},[384,8145,848],{"class":405},[384,8147,8148,8150,8152],{"class":386,"line":3009},[384,8149,4912],{"class":405},[384,8151,4915],{"class":390},[384,8153,482],{"class":405},[384,8155,8156,8158,8160,8162,8164,8166],{"class":386,"line":3014},[384,8157,7210],{"class":394},[384,8159,456],{"class":405},[384,8161,4657],{"class":394},[384,8163,1677],{"class":405},[384,8165,565],{"class":459},[384,8167,848],{"class":405},[384,8169,8170],{"class":386,"line":3563},[384,8171,724],{"class":405},[384,8173,8174],{"class":386,"line":3588},[384,8175,730],{"class":405},[384,8177,8178,8180,8183],{"class":386,"line":3606},[384,8179,1664],{"class":390},[384,8181,8182],{"class":394}," antwoord",[384,8184,848],{"class":405},[384,8186,8187],{"class":386,"line":3611},[384,8188,503],{"class":405},[11,8190,8191,8192,8194,8195,8197,8198,8200],{},"Het ",[15,8193,2516],{}," voorkomen werkt spiegelbeeldig: na een treffer ",[47,8196,6690],{},". Met eerste en laatste\nvoorkomen samen tel je in ",[47,8199,214],{}," hoe vaak een waarde voorkomt.",[39,8202,17],{"id":2398},[11,8204,8205,8206,8208,8209,8212,8213,8215,8216,8218,8219,8221,8222,150],{},"Elke stap halveert het zoekgebied. Na ",[47,8207,2487],{}," stappen zijn er hooguit ",[47,8210,8211],{},"n \u002F 2ᵏ"," kandidaten over, dus na\nongeveer ",[47,8214,191],{}," stappen is er nog één. Als recurrente betrekking: ",[47,8217,1560],{},", en volgens\nde mastermethode (zie ",[28,8220,2398],{"href":2421},") is dat ",[47,8223,214],{},[226,8225,8226,8236],{},[229,8227,8228],{},[232,8229,8230,8232,8234],{},[235,8231],{},[235,8233,6405],{},[235,8235,6385],{},[248,8237,8238,8251,8266,8278,8290,8303],{},[232,8239,8240,8242,8245],{},[253,8241,1923],{},[253,8243,8244],{},"geen",[253,8246,8247,8248,8250],{},"array ",[15,8249,6379],{},", directe toegang via index",[232,8252,8253,8256,8261],{},[253,8254,8255],{},"Best case",[253,8257,8258,8260],{},[47,8259,210],{}," (eerste element)",[253,8262,8263,8265],{},[47,8264,210],{}," (middelste element)",[232,8267,8268,8270,8274],{},[253,8269,6079],{},[253,8271,8272],{},[47,8273,119],{},[253,8275,8276],{},[47,8277,214],{},[232,8279,8280,8282,8286],{},[253,8281,6082],{},[253,8283,8284],{},[47,8285,119],{},[253,8287,8288],{},[47,8289,214],{},[232,8291,8292,8294,8298],{},[253,8293,6085],{},[253,8295,8296],{},[47,8297,210],{},[253,8299,8300,8302],{},[47,8301,210],{}," (iteratief)",[232,8304,8305,8308,8311],{},[253,8306,8307],{},"Vergelijkingen bij n = 1.000.000",[253,8309,8310],{},"tot 1.000.000",[253,8312,8313],{},"hooguit 20",[11,8315,8316,8317,8319,8320,8324,8325,8329],{},"Moet je maar één keer zoeken in ongesorteerde data, dan is lineair zoeken sneller dan eerst sorteren\n(",[47,8318,219],{},") en dan binair zoeken. Zoek je vaak in dezelfde data, dan verdient het sorteren zich\nsnel terug. Nog sneller opzoeken kan met een ",[28,8321,8323],{"href":8322},"\u002Fpracticely\u002Fdsa\u002Fhashtabellen","hashtabel",", en voor data\ndie steeds verandert is een ",[28,8326,8328],{"href":8327},"\u002Fpracticely\u002Fdsa\u002Fbinaire-zoekbomen","binaire zoekboom"," handig.",[39,8331,2248],{"id":2247},[129,8333,8334,8340,8359,8367,8383],{},[59,8335,8336,8339],{},[15,8337,8338],{},"Binair zoeken op een ongesorteerde array."," Het algoritme geeft dan gewoon een fout antwoord,\nzonder foutmelding. Controleer altijd eerst de voorwaarde.",[59,8341,8342,136,8347,8350,8351,2289,8353,8355,8356,8358],{},[15,8343,8344,8346],{},[47,8345,4370],{}," naar boven afronden.",[47,8348,8349],{},"(5 + 6) \u002F 2"," wordt ",[47,8352,1025],{},[47,8354,2603],{},". Bij een traceervraag verschuift\néén verkeerde ",[47,8357,4370],{}," alle volgende stappen.",[59,8360,8361,8366],{},[15,8362,8363,8365],{},[47,8364,7566],{}," gebruiken"," bij de inclusieve variant, waardoor je het laatste kandidaat-element\nnooit bekijkt.",[59,8368,8369,7475,8377,188,8379,8382],{},[15,8370,8371,1057,8373,8376],{},[47,8372,7585],{},[47,8374,8375],{},"hi = mid"," schrijven",[47,8378,7588],{},[47,8380,8381],{},"mid - 1",". Dat kan een oneindige\nlus opleveren.",[59,8384,8385,8388,8389,8391],{},[15,8386,8387],{},"Bij de traceervraag de laatste vergelijking vergeten."," Ook de vergelijking waarin ",[47,8390,6675],{}," gevonden\nwordt, hoort in de lijst van vergeleken waarden.",[39,8393,2316],{"id":2315},[56,8395,8396,8404,8415,8425],{},[59,8397,8398,8399,8401,8402,150],{},"Lineair zoeken werkt altijd en kost ",[47,8400,119],{},"; binair zoeken eist een gesorteerde array en kost ",[47,8403,214],{},[59,8405,8406,8407,6395,8409,6395,8411,6395,8413,150],{},"Onze variant: ",[47,8408,6707],{},[47,8410,6710],{},[47,8412,6664],{},[47,8414,7534],{},[59,8416,761,8417,8350,8419,8421,8422,8424],{},[47,8418,6681],{},[47,8420,6690],{},", anders ",[47,8423,6701],{},"; zo krimpt het zoekgebied altijd.",[59,8426,8427],{},"Voor het eerste voorkomen zoek je na een treffer links verder en onthoud je de index.",[2371,8429,8430],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":374,"searchDepth":414,"depth":414,"links":8432},[8433,8434,8435,8436,8437,8438,8439,8440,8441,8442],{"id":6404,"depth":414,"text":6405},{"id":6640,"depth":414,"text":6641},{"id":6721,"depth":414,"text":6722},{"id":6911,"depth":414,"text":6912},{"id":7046,"depth":414,"text":7047},{"id":7498,"depth":414,"text":7499},{"id":7634,"depth":414,"text":7635},{"id":2398,"depth":414,"text":17},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Lineair en binair zoeken stap voor stap: een trace met lo, hi en mid, de off-by-one-valkuilen, het eerste voorkomen vinden en code in Python en Java.","i-lucide-search",{},"\u002Fpracticely-dsa\u002Fzoeken",{"title":6371,"description":8443},"practicely-dsa\u002Fzoeken","zoeken","MRqxQRbAp5DYPc2i8AX4gmsTB8-LXQ7_s9tWgGllG9Q",{"id":8452,"title":8453,"body":8454,"description":11491,"extension":2392,"icon":11492,"meta":11493,"navigation":1702,"order":602,"path":11494,"seo":11495,"stem":11496,"topic":11497,"__hash__":11498},"practicelyDsa\u002Fpracticely-dsa\u002Fstapels-en-wachtrijen.md","Stapels en wachtrijen uitgelegd: LIFO, FIFO en gelinkte lijsten",{"type":8,"value":8455,"toc":11479},[8456,8477,8480,8484,8493,8496,8529,8536,8676,8680,8689,8719,8726,8864,8872,8876,8894,9417,9442,9446,9468,9474,9483,9508,9526,9602,9606,9621,9646,10382,10404,10408,10423,10432,10556,10581,11131,11135,11217,11224,11226,11349,11359,11361,11431,11433,11476],[11,8457,8458,8459,18,8462,8465,8466,18,8469,8472,8473,8476],{},"Een ",[15,8460,8461],{},"stapel",[20,8463,8464],{},"stack",") en een ",[15,8467,8468],{},"wachtrij",[20,8470,8471],{},"queue",") zijn de twee eenvoudigste datastructuren die\ner bestaan, en tegelijk twee van de meest gebruikte. Elke keer dat je op Ctrl+Z drukt, gebruikt je\neditor een stapel. Elke keer dat je iets naar de printer stuurt, komt het in een wachtrij. En elke\nfunctieaanroep in je programma belandt op de aanroepstapel (",[20,8474,8475],{},"call stack",").",[11,8478,8479],{},"Op het tentamen krijg je meestal een reeks operaties en moet je de toestand erna opschrijven, of moet\nje uitleggen welke structuur bij een probleem past. In sollicitatiegesprekken is \"controleer of de\nhaakjes kloppen\" een klassieker. Allebei komen hieronder aan bod.",[39,8481,8483],{"id":8482},"stapel-last-in-first-out","Stapel: last in, first out",[11,8485,8486,8487,18,8490,8476],{},"Een stapel werkt als een stapel borden: je legt een nieuw bord bovenop en je pakt ook altijd het\nbovenste weer weg. Wat het laatst erop kwam, gaat er het eerst af: ",[15,8488,8489],{},"LIFO",[20,8491,8492],{},"last in, first out",[11,8494,8495],{},"De operaties:",[56,8497,8498,8507,8513,8523],{},[59,8499,8500,8503,8504,8506],{},[47,8501,8502],{},"push(x)",": leg ",[47,8505,6675],{}," bovenop de stapel.",[59,8508,8509,8512],{},[47,8510,8511],{},"pop()",": haal het bovenste element weg en geef het terug.",[59,8514,8515,8518,8519,8522],{},[47,8516,8517],{},"peek()"," (of ",[47,8520,8521],{},"top()","): bekijk het bovenste element zonder het weg te halen.",[59,8524,8525,8528],{},[47,8526,8527],{},"isEmpty()",": is de stapel leeg?",[11,8530,8531,8532,8535],{},"We noteren de toestand van een stapel altijd van ",[15,8533,8534],{},"onder naar boven",": het meest rechtse element is\nde bovenkant.",[226,8537,8538,8553],{},[229,8539,8540],{},[232,8541,8542,8544,8547,8550],{},[235,8543,4147],{},[235,8545,8546],{},"Operatie",[235,8548,8549],{},"Teruggegeven",[235,8551,8552],{},"Stapel (onder → boven)",[248,8554,8555,8570,8586,8602,8616,8632,8646,8660],{},[232,8556,8557,8559,8564,8566],{},[253,8558,269],{},[253,8560,8561],{},[47,8562,8563],{},"push(4)",[253,8565,2563],{},[253,8567,8568],{},[47,8569,1044],{},[232,8571,8572,8574,8579,8581],{},[253,8573,1952],{},[253,8575,8576],{},[47,8577,8578],{},"push(7)",[253,8580,2563],{},[253,8582,8583],{},[47,8584,8585],{},"4, 7",[232,8587,8588,8590,8595,8597],{},[253,8589,1970],{},[253,8591,8592],{},[47,8593,8594],{},"push(1)",[253,8596,2563],{},[253,8598,8599],{},[47,8600,8601],{},"4, 7, 1",[232,8603,8604,8606,8610,8612],{},[253,8605,1044],{},[253,8607,8608],{},[47,8609,8511],{},[253,8611,269],{},[253,8613,8614],{},[47,8615,8585],{},[232,8617,8618,8620,8625,8627],{},[253,8619,1025],{},[253,8621,8622],{},[47,8623,8624],{},"push(9)",[253,8626,2563],{},[253,8628,8629],{},[47,8630,8631],{},"4, 7, 9",[232,8633,8634,8636,8640,8642],{},[253,8635,2603],{},[253,8637,8638],{},[47,8639,8511],{},[253,8641,5186],{},[253,8643,8644],{},[47,8645,8585],{},[232,8647,8648,8650,8654,8656],{},[253,8649,4251],{},[253,8651,8652],{},[47,8653,8511],{},[253,8655,4251],{},[253,8657,8658],{},[47,8659,1044],{},[232,8661,8662,8664,8669,8671],{},[253,8663,2089],{},[253,8665,8666],{},[47,8667,8668],{},"push(5)",[253,8670,2563],{},[253,8672,8673],{},[47,8674,8675],{},"4, 5",[39,8677,8679],{"id":8678},"wachtrij-first-in-first-out","Wachtrij: first in, first out",[11,8681,8682,8683,18,8686,8476],{},"Een wachtrij werkt als de rij bij de kassa: wie het eerst aansluit, wordt het eerst geholpen:\n",[15,8684,8685],{},"FIFO",[20,8687,8688],{},"first in, first out",[56,8690,8691,8703,8713],{},[59,8692,8693,8696,8697,136,8699,8702],{},[47,8694,8695],{},"enqueue(x)",": zet ",[47,8698,6675],{},[15,8700,8701],{},"achteraan"," in de rij.",[59,8704,8705,8708,8709,8712],{},[47,8706,8707],{},"dequeue()",": haal het ",[15,8710,8711],{},"voorste"," element weg en geef het terug.",[59,8714,8715,8718],{},[47,8716,8717],{},"front()",": bekijk het voorste element.",[11,8720,8721,8722,8725],{},"De toestand noteren we van ",[15,8723,8724],{},"voor naar achter",": het meest linkse element is als eerste aan de beurt.\nDezelfde reeks als hierboven, maar nu met een wachtrij:",[226,8727,8728,8741],{},[229,8729,8730],{},[232,8731,8732,8734,8736,8738],{},[235,8733,4147],{},[235,8735,8546],{},[235,8737,8549],{},[235,8739,8740],{},"Wachtrij (voor → achter)",[248,8742,8743,8758,8773,8788,8803,8819,8834,8848],{},[232,8744,8745,8747,8752,8754],{},[253,8746,269],{},[253,8748,8749],{},[47,8750,8751],{},"enqueue(4)",[253,8753,2563],{},[253,8755,8756],{},[47,8757,1044],{},[232,8759,8760,8762,8767,8769],{},[253,8761,1952],{},[253,8763,8764],{},[47,8765,8766],{},"enqueue(7)",[253,8768,2563],{},[253,8770,8771],{},[47,8772,8585],{},[232,8774,8775,8777,8782,8784],{},[253,8776,1970],{},[253,8778,8779],{},[47,8780,8781],{},"enqueue(1)",[253,8783,2563],{},[253,8785,8786],{},[47,8787,8601],{},[232,8789,8790,8792,8796,8798],{},[253,8791,1044],{},[253,8793,8794],{},[47,8795,8707],{},[253,8797,1044],{},[253,8799,8800],{},[47,8801,8802],{},"7, 1",[232,8804,8805,8807,8812,8814],{},[253,8806,1025],{},[253,8808,8809],{},[47,8810,8811],{},"enqueue(9)",[253,8813,2563],{},[253,8815,8816],{},[47,8817,8818],{},"7, 1, 9",[232,8820,8821,8823,8827,8829],{},[253,8822,2603],{},[253,8824,8825],{},[47,8826,8707],{},[253,8828,4251],{},[253,8830,8831],{},[47,8832,8833],{},"1, 9",[232,8835,8836,8838,8842,8844],{},[253,8837,4251],{},[253,8839,8840],{},[47,8841,8707],{},[253,8843,269],{},[253,8845,8846],{},[47,8847,5186],{},[232,8849,8850,8852,8857,8859],{},[253,8851,2089],{},[253,8853,8854],{},[47,8855,8856],{},"enqueue(5)",[253,8858,2563],{},[253,8860,8861],{},[47,8862,8863],{},"9, 5",[11,8865,8866,8867,8869,8870,150],{},"Zelfde invoer, totaal ander resultaat: de stapel eindigt met ",[47,8868,8675],{},", de wachtrij met ",[47,8871,8863],{},[39,8873,8875],{"id":8874},"een-stapel-met-een-array-of-lijst","Een stapel met een array of lijst",[11,8877,8878,8879,8882,8883,8886,8887,8890,8891,8893],{},"Een stapel is eenvoudig te bouwen op een dynamische array (Python ",[47,8880,8881],{},"list",", Java ",[47,8884,8885],{},"ArrayList","). De\nbovenkant is het ",[15,8888,8889],{},"einde"," van de lijst: toevoegen en weghalen aan het einde kost ",[47,8892,210],{}," (bij een\ndynamische array gemiddeld, omdat de array af en toe moet groeien).",[369,8895,8896,9130],{},[372,8897,8898],{"v-slot:python":374},[376,8899,8901],{"className":378,"code":8900,"language":380,"meta":374,"style":374},"class Stapel:\n    def __init__(self):\n        self.data = []\n\n    def push(self, x):\n        self.data.append(x)  # bovenkant = einde van de lijst\n\n    def pop(self):\n        if not self.data:\n            raise IndexError(\"pop op lege stapel\")\n        return self.data.pop()\n\n    def peek(self):\n        return self.data[-1]\n\n    def is_empty(self):\n        return len(self.data) == 0\n",[47,8902,8903,8914,8930,8945,8949,8966,8987,8991,9004,9020,9041,9059,9063,9076,9093,9097,9110],{"__ignoreMap":374},[384,8904,8905,8908,8912],{"class":386,"line":387},[384,8906,8907],{"class":450},"class",[384,8909,8911],{"class":8910},"sBMFI"," Stapel",[384,8913,813],{"class":405},[384,8915,8916,8919,8922,8924,8928],{"class":386,"line":414},[384,8917,8918],{"class":450},"    def",[384,8920,8921],{"class":401}," __init__",[384,8923,406],{"class":405},[384,8925,8927],{"class":8926},"s5tWE","self",[384,8929,411],{"class":405},[384,8931,8932,8935,8937,8941,8943],{"class":386,"line":500},[384,8933,8934],{"class":394},"        self",[384,8936,150],{"class":405},[384,8938,8940],{"class":8939},"swJcz","data",[384,8942,2769],{"class":405},[384,8944,4408],{"class":405},[384,8946,8947],{"class":386,"line":602},[384,8948,1703],{"emptyLinePlaceholder":1702},[384,8950,8951,8953,8956,8958,8960,8962,8964],{"class":386,"line":721},[384,8952,8918],{"class":450},[384,8954,8955],{"class":401}," push",[384,8957,406],{"class":405},[384,8959,8927],{"class":8926},[384,8961,568],{"class":405},[384,8963,2749],{"class":1620},[384,8965,411],{"class":405},[384,8967,8968,8970,8972,8974,8976,8978,8980,8982,8984],{"class":386,"line":727},[384,8969,8934],{"class":394},[384,8971,150],{"class":405},[384,8973,8940],{"class":8939},[384,8975,150],{"class":405},[384,8977,4486],{"class":401},[384,8979,406],{"class":405},[384,8981,6675],{"class":401},[384,8983,863],{"class":405},[384,8985,8986],{"class":827},"  # bovenkant = einde van de lijst\n",[384,8988,8989],{"class":386,"line":733},[384,8990,1703],{"emptyLinePlaceholder":1702},[384,8992,8993,8995,8998,9000,9002],{"class":386,"line":1299},[384,8994,8918],{"class":450},[384,8996,8997],{"class":401}," pop",[384,8999,406],{"class":405},[384,9001,8927],{"class":8926},[384,9003,411],{"class":405},[384,9005,9006,9008,9011,9014,9016,9018],{"class":386,"line":2790},[384,9007,577],{"class":390},[384,9009,9010],{"class":405}," not",[384,9012,9013],{"class":394}," self",[384,9015,150],{"class":405},[384,9017,8940],{"class":8939},[384,9019,813],{"class":405},[384,9021,9022,9025,9028,9030,9033,9037,9039],{"class":386,"line":2985},[384,9023,9024],{"class":390},"            raise",[384,9026,9027],{"class":8910}," IndexError",[384,9029,406],{"class":405},[384,9031,9032],{"class":405},"\"",[384,9034,9036],{"class":9035},"sfazB","pop op lege stapel",[384,9038,9032],{"class":405},[384,9040,3219],{"class":405},[384,9042,9043,9045,9047,9049,9051,9053,9056],{"class":386,"line":3009},[384,9044,1651],{"class":390},[384,9046,9013],{"class":394},[384,9048,150],{"class":405},[384,9050,8940],{"class":8939},[384,9052,150],{"class":405},[384,9054,9055],{"class":401},"pop",[384,9057,9058],{"class":405},"()\n",[384,9060,9061],{"class":386,"line":3014},[384,9062,1703],{"emptyLinePlaceholder":1702},[384,9064,9065,9067,9070,9072,9074],{"class":386,"line":3563},[384,9066,8918],{"class":450},[384,9068,9069],{"class":401}," peek",[384,9071,406],{"class":405},[384,9073,8927],{"class":8926},[384,9075,411],{"class":405},[384,9077,9078,9080,9082,9084,9086,9089,9091],{"class":386,"line":3588},[384,9079,1651],{"class":390},[384,9081,9013],{"class":394},[384,9083,150],{"class":405},[384,9085,8940],{"class":8939},[384,9087,9088],{"class":405},"[-",[384,9090,269],{"class":459},[384,9092,432],{"class":405},[384,9094,9095],{"class":386,"line":3606},[384,9096,1703],{"emptyLinePlaceholder":1702},[384,9098,9099,9101,9104,9106,9108],{"class":386,"line":3611},[384,9100,8918],{"class":450},[384,9102,9103],{"class":401}," is_empty",[384,9105,406],{"class":405},[384,9107,8927],{"class":8926},[384,9109,411],{"class":405},[384,9111,9112,9114,9116,9118,9120,9122,9124,9126,9128],{"class":386,"line":4541},[384,9113,1651],{"class":390},[384,9115,2681],{"class":401},[384,9117,406],{"class":405},[384,9119,8927],{"class":394},[384,9121,150],{"class":405},[384,9123,8940],{"class":8939},[384,9125,863],{"class":405},[384,9127,589],{"class":405},[384,9129,1654],{"class":459},[372,9131,9132],{"v-slot:java":374},[376,9133,9135],{"className":437,"code":9134,"language":439,"meta":374,"style":374},"import java.util.ArrayList;\n\nclass Stapel {\n    private final ArrayList\u003CInteger> data = new ArrayList\u003C>();\n\n    void push(int x) {\n        data.add(x); \u002F\u002F bovenkant = einde van de lijst\n    }\n\n    int pop() {\n        if (data.isEmpty()) {\n            throw new IllegalStateException(\"pop op lege stapel\");\n        }\n        return data.remove(data.size() - 1);\n    }\n\n    int peek() {\n        return data.get(data.size() - 1);\n    }\n\n    boolean isEmpty() {\n        return data.isEmpty();\n    }\n}\n",[47,9136,9137,9155,9159,9167,9197,9201,9218,9238,9242,9246,9257,9275,9295,9299,9328,9332,9336,9346,9373,9377,9381,9393,9407,9412],{"__ignoreMap":374},[384,9138,9139,9142,9145,9147,9149,9151,9153],{"class":386,"line":387},[384,9140,9141],{"class":459},"import",[384,9143,9144],{"class":450}," java",[384,9146,150],{"class":405},[384,9148,4694],{"class":450},[384,9150,150],{"class":405},[384,9152,8885],{"class":450},[384,9154,848],{"class":405},[384,9156,9157],{"class":386,"line":414},[384,9158,1703],{"emptyLinePlaceholder":1702},[384,9160,9161,9163,9165],{"class":386,"line":500},[384,9162,8907],{"class":450},[384,9164,8911],{"class":8910},[384,9166,482],{"class":405},[384,9168,9169,9172,9175,9178,9180,9183,9185,9188,9190,9192,9194],{"class":386,"line":602},[384,9170,9171],{"class":450},"    private",[384,9173,9174],{"class":450}," final",[384,9176,9177],{"class":450}," ArrayList",[384,9179,468],{"class":405},[384,9181,9182],{"class":450},"Integer",[384,9184,808],{"class":405},[384,9186,9187],{"class":394}," data ",[384,9189,456],{"class":405},[384,9191,4786],{"class":390},[384,9193,9177],{"class":450},[384,9195,9196],{"class":405},"\u003C>();\n",[384,9198,9199],{"class":386,"line":721},[384,9200,1703],{"emptyLinePlaceholder":1702},[384,9202,9203,9206,9208,9210,9212,9214,9216],{"class":386,"line":727},[384,9204,9205],{"class":450},"    void",[384,9207,8955],{"class":401},[384,9209,406],{"class":405},[384,9211,451],{"class":450},[384,9213,2749],{"class":1620},[384,9215,863],{"class":405},[384,9217,482],{"class":405},[384,9219,9220,9223,9225,9228,9230,9232,9235],{"class":386,"line":733},[384,9221,9222],{"class":394},"        data",[384,9224,150],{"class":405},[384,9226,9227],{"class":401},"add",[384,9229,406],{"class":405},[384,9231,6675],{"class":394},[384,9233,9234],{"class":405},");",[384,9236,9237],{"class":827}," \u002F\u002F bovenkant = einde van de lijst\n",[384,9239,9240],{"class":386,"line":1299},[384,9241,730],{"class":405},[384,9243,9244],{"class":386,"line":2790},[384,9245,1703],{"emptyLinePlaceholder":1702},[384,9247,9248,9250,9252,9255],{"class":386,"line":2985},[384,9249,1417],{"class":450},[384,9251,8997],{"class":401},[384,9253,9254],{"class":405},"()",[384,9256,482],{"class":405},[384,9258,9259,9261,9263,9265,9267,9270,9273],{"class":386,"line":3009},[384,9260,577],{"class":390},[384,9262,18],{"class":405},[384,9264,8940],{"class":394},[384,9266,150],{"class":405},[384,9268,9269],{"class":401},"isEmpty",[384,9271,9272],{"class":405},"())",[384,9274,482],{"class":405},[384,9276,9277,9280,9282,9285,9287,9289,9291,9293],{"class":386,"line":3014},[384,9278,9279],{"class":390},"            throw",[384,9281,4786],{"class":390},[384,9283,9284],{"class":401}," IllegalStateException",[384,9286,406],{"class":405},[384,9288,9032],{"class":405},[384,9290,9036],{"class":9035},[384,9292,9032],{"class":405},[384,9294,5962],{"class":405},[384,9296,9297],{"class":386,"line":3563},[384,9298,724],{"class":405},[384,9300,9301,9303,9306,9308,9311,9313,9315,9317,9320,9322,9324,9326],{"class":386,"line":3588},[384,9302,1651],{"class":390},[384,9304,9305],{"class":394}," data",[384,9307,150],{"class":405},[384,9309,9310],{"class":401},"remove",[384,9312,406],{"class":405},[384,9314,8940],{"class":394},[384,9316,150],{"class":405},[384,9318,9319],{"class":401},"size",[384,9321,9254],{"class":405},[384,9323,5546],{"class":405},[384,9325,565],{"class":459},[384,9327,5962],{"class":405},[384,9329,9330],{"class":386,"line":3606},[384,9331,730],{"class":405},[384,9333,9334],{"class":386,"line":3611},[384,9335,1703],{"emptyLinePlaceholder":1702},[384,9337,9338,9340,9342,9344],{"class":386,"line":4541},[384,9339,1417],{"class":450},[384,9341,9069],{"class":401},[384,9343,9254],{"class":405},[384,9345,482],{"class":405},[384,9347,9348,9350,9352,9354,9357,9359,9361,9363,9365,9367,9369,9371],{"class":386,"line":4562},[384,9349,1651],{"class":390},[384,9351,9305],{"class":394},[384,9353,150],{"class":405},[384,9355,9356],{"class":401},"get",[384,9358,406],{"class":405},[384,9360,8940],{"class":394},[384,9362,150],{"class":405},[384,9364,9319],{"class":401},[384,9366,9254],{"class":405},[384,9368,5546],{"class":405},[384,9370,565],{"class":459},[384,9372,5962],{"class":405},[384,9374,9375],{"class":386,"line":4581},[384,9376,730],{"class":405},[384,9378,9379],{"class":386,"line":5021},[384,9380,1703],{"emptyLinePlaceholder":1702},[384,9382,9383,9386,9389,9391],{"class":386,"line":5030},[384,9384,9385],{"class":450},"    boolean",[384,9387,9388],{"class":401}," isEmpty",[384,9390,9254],{"class":405},[384,9392,482],{"class":405},[384,9394,9396,9398,9400,9402,9404],{"class":386,"line":9395},22,[384,9397,1651],{"class":390},[384,9399,9305],{"class":394},[384,9401,150],{"class":405},[384,9403,9269],{"class":401},[384,9405,9406],{"class":405},"();\n",[384,9408,9410],{"class":386,"line":9409},23,[384,9411,730],{"class":405},[384,9413,9415],{"class":386,"line":9414},24,[384,9416,503],{"class":405},[11,9418,9419,9420,9423,9424,9426,9427,9430,9431,9433,9434,9437,9438,9441],{},"Voor een wachtrij werkt een gewone lijst slecht: ",[47,9421,9422],{},"dequeue"," haalt het ",[15,9425,2523],{}," element weg, en dan\nmoeten alle andere elementen een plek opschuiven. In Python is ",[47,9428,9429],{},"list.pop(0)"," daarom ",[47,9432,119],{},". Gebruik\nvoor een wachtrij ",[47,9435,9436],{},"collections.deque"," (Python) of ",[47,9439,9440],{},"ArrayDeque"," (Java), of bouw er een met een\ngelinkte lijst.",[39,9443,9445],{"id":9444},"gelinkte-lijsten","Gelinkte lijsten",[11,9447,8458,9448,18,9450,9453,9454,9457,9458,18,9461,9464,9465,150],{},[15,9449,6633],{},[20,9451,9452],{},"linked list",") bestaat uit losse knopen (",[20,9455,9456],{},"nodes","). Elke knoop bevat een\nwaarde en een verwijzing naar de volgende knoop. In een ",[15,9459,9460],{},"enkel gelinkte lijst",[20,9462,9463],{},"singly linked\nlist",") wijst elke knoop alleen naar zijn opvolger; de lijst zelf onthoudt alleen de eerste knoop, de\n",[47,9466,9467],{},"head",[376,9469,9472],{"className":9470,"code":9471,"language":5073},[5071],"head → [4 | •] → [7 | •] → [1 | •] → null\n",[47,9473,9471],{"__ignoreMap":374},[11,9475,9476,9477,9482],{},"Het grote voordeel: ",[15,9478,9479,9480],{},"vooraan invoegen of verwijderen kost ",[47,9481,210],{},", want je verandert alleen een\npaar verwijzingen. Niets hoeft op te schuiven.",[56,9484,9485,9496],{},[59,9486,9487,9490,9491,9493,9494,150],{},[15,9488,9489],{},"Vooraan invoegen:"," maak een nieuwe knoop, laat hem naar de oude ",[47,9492,9467],{}," wijzen, maak hem de\nnieuwe ",[47,9495,9467],{},[59,9497,9498,9501,9502,9505,9506,150],{},[15,9499,9500],{},"Vooraan verwijderen:"," maak ",[47,9503,9504],{},"head.next"," de nieuwe ",[47,9507,9467],{},[11,9509,9510,9511,9513,9514,9516,9517,9519,9520,9522,9523,9525],{},"Het nadeel: je kunt niet direct naar index ",[47,9512,429],{}," springen. Om het ",[47,9515,429],{},"-de element te vinden, loop je\nvanaf ",[47,9518,9467],{}," de verwijzingen af: ",[47,9521,119],{},". Daarom werkt ",[28,9524,284],{"href":283}," niet\nop een gelinkte lijst.",[226,9527,9528,9539],{},[229,9529,9530],{},[232,9531,9532,9534,9536],{},[235,9533,8546],{},[235,9535,5119],{},[235,9537,9538],{},"Enkel gelinkte lijst",[248,9540,9541,9556,9569,9588],{},[232,9542,9543,9548,9552],{},[253,9544,9545,9546],{},"element op index ",[47,9547,429],{},[253,9549,9550],{},[47,9551,210],{},[253,9553,9554],{},[47,9555,119],{},[232,9557,9558,9561,9565],{},[253,9559,9560],{},"vooraan invoegen\u002Fverwijderen",[253,9562,9563],{},[47,9564,119],{},[253,9566,9567],{},[47,9568,210],{},[232,9570,9571,9574,9578],{},[253,9572,9573],{},"achteraan invoegen",[253,9575,9576,6209],{},[47,9577,210],{},[253,9579,9580,1907,9582,9585,9586],{},[47,9581,210],{},[47,9583,9584],{},"tail","-verwijzing, anders ",[47,9587,119],{},[232,9589,9590,9593,9597],{},[253,9591,9592],{},"achteraan verwijderen",[253,9594,9595],{},[47,9596,210],{},[253,9598,9599,9601],{},[47,9600,119],{}," (je moet de voorlaatste knoop vinden)",[39,9603,9605],{"id":9604},"stapel-en-wachtrij-met-een-gelinkte-lijst","Stapel en wachtrij met een gelinkte lijst",[11,9607,8458,9608,9610,9611,9614,9615,9617,9618,9620],{},[15,9609,8461],{}," is een gelinkte lijst waarbij je alleen vooraan werkt: ",[47,9612,9613],{},"push"," voegt vooraan in, ",[47,9616,9055],{},"\nverwijdert vooraan. De ",[47,9619,9467],{}," is de bovenkant van de stapel.",[11,9622,8458,9623,9625,9626,9628,9629,9631,9632,9635,9636,6395,9638,9640,9641,9643,9644,150],{},[15,9624,8468],{}," houdt twee verwijzingen bij: ",[47,9627,9467],{}," (voorkant) en ",[47,9630,9584],{}," (achterkant).\n",[47,9633,9634],{},"enqueue"," hangt een knoop achter ",[47,9637,9584],{},[47,9639,9422],{}," haalt ",[47,9642,9467],{}," weg. Allebei ",[47,9645,210],{},[369,9647,9648,10010],{},[372,9649,9650],{"v-slot:python":374},[376,9651,9653],{"className":378,"code":9652,"language":380,"meta":374,"style":374},"class Knoop:\n    def __init__(self, waarde, volgende=None):\n        self.waarde = waarde\n        self.volgende = volgende\n\n\nclass Wachtrij:\n    def __init__(self):\n        self.head = None  # voorkant: hier gaat het eruit\n        self.tail = None  # achterkant: hier komt het erbij\n\n    def enqueue(self, x):\n        knoop = Knoop(x)\n        if self.tail is None:  # lege wachtrij\n            self.head = self.tail = knoop\n        else:\n            self.tail.volgende = knoop\n            self.tail = knoop\n\n    def dequeue(self):\n        if self.head is None:\n            raise IndexError(\"dequeue op lege wachtrij\")\n        x = self.head.waarde\n        self.head = self.head.volgende\n        if self.head is None:  # wachtrij is nu leeg\n            self.tail = None\n        return x\n",[47,9654,9655,9664,9686,9700,9713,9717,9721,9730,9742,9758,9773,9777,9794,9809,9828,9850,9856,9872,9884,9888,9901,9915,9932,9949,9970,9988,10002],{"__ignoreMap":374},[384,9656,9657,9659,9662],{"class":386,"line":387},[384,9658,8907],{"class":450},[384,9660,9661],{"class":8910}," Knoop",[384,9663,813],{"class":405},[384,9665,9666,9668,9670,9672,9674,9676,9679,9681,9684],{"class":386,"line":414},[384,9667,8918],{"class":450},[384,9669,8921],{"class":401},[384,9671,406],{"class":405},[384,9673,8927],{"class":8926},[384,9675,568],{"class":405},[384,9677,9678],{"class":1620}," waarde",[384,9680,568],{"class":405},[384,9682,9683],{"class":1620}," volgende",[384,9685,5515],{"class":405},[384,9687,9688,9690,9692,9695,9697],{"class":386,"line":500},[384,9689,8934],{"class":394},[384,9691,150],{"class":405},[384,9693,9694],{"class":8939},"waarde",[384,9696,2769],{"class":405},[384,9698,9699],{"class":394}," waarde\n",[384,9701,9702,9704,9706,9708,9710],{"class":386,"line":602},[384,9703,8934],{"class":394},[384,9705,150],{"class":405},[384,9707,6240],{"class":8939},[384,9709,2769],{"class":405},[384,9711,9712],{"class":394}," volgende\n",[384,9714,9715],{"class":386,"line":721},[384,9716,1703],{"emptyLinePlaceholder":1702},[384,9718,9719],{"class":386,"line":727},[384,9720,1703],{"emptyLinePlaceholder":1702},[384,9722,9723,9725,9728],{"class":386,"line":733},[384,9724,8907],{"class":450},[384,9726,9727],{"class":8910}," Wachtrij",[384,9729,813],{"class":405},[384,9731,9732,9734,9736,9738,9740],{"class":386,"line":1299},[384,9733,8918],{"class":450},[384,9735,8921],{"class":401},[384,9737,406],{"class":405},[384,9739,8927],{"class":8926},[384,9741,411],{"class":405},[384,9743,9744,9746,9748,9750,9752,9755],{"class":386,"line":2790},[384,9745,8934],{"class":394},[384,9747,150],{"class":405},[384,9749,9467],{"class":8939},[384,9751,2769],{"class":405},[384,9753,9754],{"class":405}," None",[384,9756,9757],{"class":827},"  # voorkant: hier gaat het eruit\n",[384,9759,9760,9762,9764,9766,9768,9770],{"class":386,"line":2985},[384,9761,8934],{"class":394},[384,9763,150],{"class":405},[384,9765,9584],{"class":8939},[384,9767,2769],{"class":405},[384,9769,9754],{"class":405},[384,9771,9772],{"class":827},"  # achterkant: hier komt het erbij\n",[384,9774,9775],{"class":386,"line":3009},[384,9776,1703],{"emptyLinePlaceholder":1702},[384,9778,9779,9781,9784,9786,9788,9790,9792],{"class":386,"line":3014},[384,9780,8918],{"class":450},[384,9782,9783],{"class":401}," enqueue",[384,9785,406],{"class":405},[384,9787,8927],{"class":8926},[384,9789,568],{"class":405},[384,9791,2749],{"class":1620},[384,9793,411],{"class":405},[384,9795,9796,9799,9801,9803,9805,9807],{"class":386,"line":3563},[384,9797,9798],{"class":394},"        knoop ",[384,9800,456],{"class":405},[384,9802,9661],{"class":401},[384,9804,406],{"class":405},[384,9806,6675],{"class":401},[384,9808,3219],{"class":405},[384,9810,9811,9813,9815,9817,9819,9822,9825],{"class":386,"line":3588},[384,9812,577],{"class":390},[384,9814,9013],{"class":394},[384,9816,150],{"class":405},[384,9818,9584],{"class":8939},[384,9820,9821],{"class":405}," is",[384,9823,9824],{"class":405}," None:",[384,9826,9827],{"class":827},"  # lege wachtrij\n",[384,9829,9830,9833,9835,9837,9839,9841,9843,9845,9847],{"class":386,"line":3606},[384,9831,9832],{"class":394},"            self",[384,9834,150],{"class":405},[384,9836,9467],{"class":8939},[384,9838,2769],{"class":405},[384,9840,9013],{"class":394},[384,9842,150],{"class":405},[384,9844,9584],{"class":8939},[384,9846,2769],{"class":405},[384,9848,9849],{"class":394}," knoop\n",[384,9851,9852,9854],{"class":386,"line":3611},[384,9853,4510],{"class":390},[384,9855,813],{"class":405},[384,9857,9858,9860,9862,9864,9866,9868,9870],{"class":386,"line":4541},[384,9859,9832],{"class":394},[384,9861,150],{"class":405},[384,9863,9584],{"class":8939},[384,9865,150],{"class":405},[384,9867,6240],{"class":8939},[384,9869,2769],{"class":405},[384,9871,9849],{"class":394},[384,9873,9874,9876,9878,9880,9882],{"class":386,"line":4562},[384,9875,9832],{"class":394},[384,9877,150],{"class":405},[384,9879,9584],{"class":8939},[384,9881,2769],{"class":405},[384,9883,9849],{"class":394},[384,9885,9886],{"class":386,"line":4581},[384,9887,1703],{"emptyLinePlaceholder":1702},[384,9889,9890,9892,9895,9897,9899],{"class":386,"line":5021},[384,9891,8918],{"class":450},[384,9893,9894],{"class":401}," dequeue",[384,9896,406],{"class":405},[384,9898,8927],{"class":8926},[384,9900,411],{"class":405},[384,9902,9903,9905,9907,9909,9911,9913],{"class":386,"line":5030},[384,9904,577],{"class":390},[384,9906,9013],{"class":394},[384,9908,150],{"class":405},[384,9910,9467],{"class":8939},[384,9912,9821],{"class":405},[384,9914,5528],{"class":405},[384,9916,9917,9919,9921,9923,9925,9928,9930],{"class":386,"line":9395},[384,9918,9024],{"class":390},[384,9920,9027],{"class":8910},[384,9922,406],{"class":405},[384,9924,9032],{"class":405},[384,9926,9927],{"class":9035},"dequeue op lege wachtrij",[384,9929,9032],{"class":405},[384,9931,3219],{"class":405},[384,9933,9934,9936,9938,9940,9942,9944,9946],{"class":386,"line":9409},[384,9935,2693],{"class":394},[384,9937,456],{"class":405},[384,9939,9013],{"class":394},[384,9941,150],{"class":405},[384,9943,9467],{"class":8939},[384,9945,150],{"class":405},[384,9947,9948],{"class":8939},"waarde\n",[384,9950,9951,9953,9955,9957,9959,9961,9963,9965,9967],{"class":386,"line":9414},[384,9952,8934],{"class":394},[384,9954,150],{"class":405},[384,9956,9467],{"class":8939},[384,9958,2769],{"class":405},[384,9960,9013],{"class":394},[384,9962,150],{"class":405},[384,9964,9467],{"class":8939},[384,9966,150],{"class":405},[384,9968,9969],{"class":8939},"volgende\n",[384,9971,9973,9975,9977,9979,9981,9983,9985],{"class":386,"line":9972},25,[384,9974,577],{"class":390},[384,9976,9013],{"class":394},[384,9978,150],{"class":405},[384,9980,9467],{"class":8939},[384,9982,9821],{"class":405},[384,9984,9824],{"class":405},[384,9986,9987],{"class":827},"  # wachtrij is nu leeg\n",[384,9989,9991,9993,9995,9997,9999],{"class":386,"line":9990},26,[384,9992,9832],{"class":394},[384,9994,150],{"class":405},[384,9996,9584],{"class":8939},[384,9998,2769],{"class":405},[384,10000,10001],{"class":405}," None\n",[384,10003,10005,10007],{"class":386,"line":10004},27,[384,10006,1651],{"class":390},[384,10008,10009],{"class":394}," x\n",[372,10011,10012],{"v-slot:java":374},[376,10013,10015],{"className":437,"code":10014,"language":439,"meta":374,"style":374},"class Wachtrij {\n    private static class Knoop {\n        int waarde;\n        Knoop volgende;\n\n        Knoop(int waarde) {\n            this.waarde = waarde;\n        }\n    }\n\n    private Knoop head; \u002F\u002F voorkant: hier gaat het eruit\n    private Knoop tail; \u002F\u002F achterkant: hier komt het erbij\n\n    void enqueue(int x) {\n        Knoop knoop = new Knoop(x);\n        if (tail == null) { \u002F\u002F lege wachtrij\n            head = tail = knoop;\n        } else {\n            tail.volgende = knoop;\n            tail = knoop;\n        }\n    }\n\n    int dequeue() {\n        if (head == null) {\n            throw new IllegalStateException(\"dequeue op lege wachtrij\");\n        }\n        int x = head.waarde;\n        head = head.volgende;\n        if (head == null) { \u002F\u002F wachtrij is nu leeg\n            tail = null;\n        }\n        return x;\n    }\n}\n",[47,10016,10017,10025,10039,10047,10056,10060,10074,10088,10092,10096,10100,10114,10128,10132,10148,10167,10186,10203,10211,10227,10238,10242,10246,10250,10260,10275,10293,10297,10314,10330,10348,10358,10363,10372,10377],{"__ignoreMap":374},[384,10018,10019,10021,10023],{"class":386,"line":387},[384,10020,8907],{"class":450},[384,10022,9727],{"class":8910},[384,10024,482],{"class":405},[384,10026,10027,10029,10032,10035,10037],{"class":386,"line":414},[384,10028,9171],{"class":450},[384,10030,10031],{"class":450}," static",[384,10033,10034],{"class":450}," class",[384,10036,9661],{"class":8910},[384,10038,482],{"class":405},[384,10040,10041,10043,10045],{"class":386,"line":500},[384,10042,2881],{"class":450},[384,10044,9678],{"class":394},[384,10046,848],{"class":405},[384,10048,10049,10052,10054],{"class":386,"line":602},[384,10050,10051],{"class":450},"        Knoop",[384,10053,9683],{"class":394},[384,10055,848],{"class":405},[384,10057,10058],{"class":386,"line":721},[384,10059,1703],{"emptyLinePlaceholder":1702},[384,10061,10062,10064,10066,10068,10070,10072],{"class":386,"line":727},[384,10063,10051],{"class":401},[384,10065,406],{"class":405},[384,10067,451],{"class":450},[384,10069,9678],{"class":1620},[384,10071,863],{"class":405},[384,10073,482],{"class":405},[384,10075,10076,10079,10082,10084,10086],{"class":386,"line":733},[384,10077,10078],{"class":405},"            this.",[384,10080,10081],{"class":394},"waarde ",[384,10083,456],{"class":405},[384,10085,9678],{"class":394},[384,10087,848],{"class":405},[384,10089,10090],{"class":386,"line":1299},[384,10091,724],{"class":405},[384,10093,10094],{"class":386,"line":2790},[384,10095,730],{"class":405},[384,10097,10098],{"class":386,"line":2985},[384,10099,1703],{"emptyLinePlaceholder":1702},[384,10101,10102,10104,10106,10109,10111],{"class":386,"line":3009},[384,10103,9171],{"class":450},[384,10105,9661],{"class":450},[384,10107,10108],{"class":394}," head",[384,10110,463],{"class":405},[384,10112,10113],{"class":827}," \u002F\u002F voorkant: hier gaat het eruit\n",[384,10115,10116,10118,10120,10123,10125],{"class":386,"line":3014},[384,10117,9171],{"class":450},[384,10119,9661],{"class":450},[384,10121,10122],{"class":394}," tail",[384,10124,463],{"class":405},[384,10126,10127],{"class":827}," \u002F\u002F achterkant: hier komt het erbij\n",[384,10129,10130],{"class":386,"line":3563},[384,10131,1703],{"emptyLinePlaceholder":1702},[384,10133,10134,10136,10138,10140,10142,10144,10146],{"class":386,"line":3588},[384,10135,9205],{"class":450},[384,10137,9783],{"class":401},[384,10139,406],{"class":405},[384,10141,451],{"class":450},[384,10143,2749],{"class":1620},[384,10145,863],{"class":405},[384,10147,482],{"class":405},[384,10149,10150,10152,10155,10157,10159,10161,10163,10165],{"class":386,"line":3606},[384,10151,10051],{"class":450},[384,10153,10154],{"class":394}," knoop ",[384,10156,456],{"class":405},[384,10158,4786],{"class":390},[384,10160,9661],{"class":401},[384,10162,406],{"class":405},[384,10164,6675],{"class":394},[384,10166,5962],{"class":405},[384,10168,10169,10171,10173,10176,10178,10181,10183],{"class":386,"line":3611},[384,10170,577],{"class":390},[384,10172,18],{"class":405},[384,10174,10175],{"class":394},"tail ",[384,10177,1642],{"class":405},[384,10179,10180],{"class":405}," null)",[384,10182,1200],{"class":405},[384,10184,10185],{"class":827}," \u002F\u002F lege wachtrij\n",[384,10187,10188,10191,10193,10196,10198,10201],{"class":386,"line":4541},[384,10189,10190],{"class":394},"            head ",[384,10192,456],{"class":405},[384,10194,10195],{"class":394}," tail ",[384,10197,456],{"class":405},[384,10199,10200],{"class":394}," knoop",[384,10202,848],{"class":405},[384,10204,10205,10207,10209],{"class":386,"line":4562},[384,10206,4912],{"class":405},[384,10208,4915],{"class":390},[384,10210,482],{"class":405},[384,10212,10213,10216,10218,10221,10223,10225],{"class":386,"line":4581},[384,10214,10215],{"class":394},"            tail",[384,10217,150],{"class":405},[384,10219,10220],{"class":394},"volgende ",[384,10222,456],{"class":405},[384,10224,10200],{"class":394},[384,10226,848],{"class":405},[384,10228,10229,10232,10234,10236],{"class":386,"line":5021},[384,10230,10231],{"class":394},"            tail ",[384,10233,456],{"class":405},[384,10235,10200],{"class":394},[384,10237,848],{"class":405},[384,10239,10240],{"class":386,"line":5030},[384,10241,724],{"class":405},[384,10243,10244],{"class":386,"line":9395},[384,10245,730],{"class":405},[384,10247,10248],{"class":386,"line":9409},[384,10249,1703],{"emptyLinePlaceholder":1702},[384,10251,10252,10254,10256,10258],{"class":386,"line":9414},[384,10253,1417],{"class":450},[384,10255,9894],{"class":401},[384,10257,9254],{"class":405},[384,10259,482],{"class":405},[384,10261,10262,10264,10266,10269,10271,10273],{"class":386,"line":9972},[384,10263,577],{"class":390},[384,10265,18],{"class":405},[384,10267,10268],{"class":394},"head ",[384,10270,1642],{"class":405},[384,10272,10180],{"class":405},[384,10274,482],{"class":405},[384,10276,10277,10279,10281,10283,10285,10287,10289,10291],{"class":386,"line":9990},[384,10278,9279],{"class":390},[384,10280,4786],{"class":390},[384,10282,9284],{"class":401},[384,10284,406],{"class":405},[384,10286,9032],{"class":405},[384,10288,9927],{"class":9035},[384,10290,9032],{"class":405},[384,10292,5962],{"class":405},[384,10294,10295],{"class":386,"line":10004},[384,10296,724],{"class":405},[384,10298,10300,10302,10304,10306,10308,10310,10312],{"class":386,"line":10299},28,[384,10301,2881],{"class":450},[384,10303,2884],{"class":394},[384,10305,456],{"class":405},[384,10307,10108],{"class":394},[384,10309,150],{"class":405},[384,10311,9694],{"class":394},[384,10313,848],{"class":405},[384,10315,10317,10320,10322,10324,10326,10328],{"class":386,"line":10316},29,[384,10318,10319],{"class":394},"        head ",[384,10321,456],{"class":405},[384,10323,10108],{"class":394},[384,10325,150],{"class":405},[384,10327,6240],{"class":394},[384,10329,848],{"class":405},[384,10331,10333,10335,10337,10339,10341,10343,10345],{"class":386,"line":10332},30,[384,10334,577],{"class":390},[384,10336,18],{"class":405},[384,10338,10268],{"class":394},[384,10340,1642],{"class":405},[384,10342,10180],{"class":405},[384,10344,1200],{"class":405},[384,10346,10347],{"class":827}," \u002F\u002F wachtrij is nu leeg\n",[384,10349,10351,10353,10355],{"class":386,"line":10350},31,[384,10352,10231],{"class":394},[384,10354,456],{"class":405},[384,10356,10357],{"class":405}," null;\n",[384,10359,10361],{"class":386,"line":10360},32,[384,10362,724],{"class":405},[384,10364,10366,10368,10370],{"class":386,"line":10365},33,[384,10367,1651],{"class":390},[384,10369,2749],{"class":394},[384,10371,848],{"class":405},[384,10373,10375],{"class":386,"line":10374},34,[384,10376,730],{"class":405},[384,10378,10380],{"class":386,"line":10379},35,[384,10381,503],{"class":405},[11,10383,10384,10385,10387,10388,10390,10391,10393,10394,10396,10397,10400,10401,10403],{},"Let op de randgevallen: bij de eerste ",[47,10386,9634],{}," moeten ",[47,10389,9467],{}," én ",[47,10392,9584],{}," naar de nieuwe knoop wijzen,\nen als de laatste knoop eruit gaat moet ",[47,10395,9584],{}," weer ",[47,10398,10399],{},"null"," worden. Vergeet je dat, dan wijst ",[47,10402,9584],{},"\nnaar een knoop die niet meer in de lijst zit.",[39,10405,10407],{"id":10406},"toepassing-haakjes-controleren","Toepassing: haakjes controleren",[11,10409,10410,10411,10414,10415,10418,10419,10422],{},"Klopt ",[47,10412,10413],{},"{[()()]}","? En ",[47,10416,10417],{},"([)]","? Elk sluithaakje moet passen bij het ",[15,10420,10421],{},"laatst geopende"," haakje dat nog\nopen staat. \"Laatst geopend, eerst gesloten\": dat is LIFO, dus een stapel.",[11,10424,10425,10426,10428,10429,10431],{},"Het algoritme: openingshaakje → ",[47,10427,9613],{},". Sluithaakje → ",[47,10430,9055],{}," en controleer of het bijbehorende\nopeningshaakje eruit komt. Aan het eind moet de stapel leeg zijn.",[226,10433,10434,10445],{},[229,10435,10436],{},[232,10437,10438,10441,10443],{},[235,10439,10440],{},"Teken",[235,10442,5113],{},[235,10444,8552],{},[248,10446,10447,10460,10473,10486,10502,10514,10528,10542],{},[232,10448,10449,10454,10456],{},[253,10450,10451],{},[47,10452,10453],{},"{",[253,10455,9613],{},[253,10457,10458],{},[47,10459,10453],{},[232,10461,10462,10466,10468],{},[253,10463,10464],{},[47,10465,426],{},[253,10467,9613],{},[253,10469,10470],{},[47,10471,10472],{},"{ [",[232,10474,10475,10479,10481],{},[253,10476,10477],{},[47,10478,406],{},[253,10480,9613],{},[253,10482,10483],{},[47,10484,10485],{},"{ [ (",[232,10487,10488,10492,10498],{},[253,10489,10490],{},[47,10491,863],{},[253,10493,10494,10495,10497],{},"pop ",[47,10496,406],{},", past",[253,10499,10500],{},[47,10501,10472],{},[232,10503,10504,10508,10510],{},[253,10505,10506],{},[47,10507,406],{},[253,10509,9613],{},[253,10511,10512],{},[47,10513,10485],{},[232,10515,10516,10520,10524],{},[253,10517,10518],{},[47,10519,863],{},[253,10521,10494,10522,10497],{},[47,10523,406],{},[253,10525,10526],{},[47,10527,10472],{},[232,10529,10530,10534,10538],{},[253,10531,10532],{},[47,10533,586],{},[253,10535,10494,10536,10497],{},[47,10537,426],{},[253,10539,10540],{},[47,10541,10453],{},[232,10543,10544,10549,10553],{},[253,10545,10546],{},[47,10547,10548],{},"}",[253,10550,10494,10551,10497],{},[47,10552,10453],{},[253,10554,10555],{},"leeg",[11,10557,10558,10559,10561,10562,10564,10565,10567,10568,10570,10571,10573,10574,10577,10578,10580],{},"De stapel is leeg aan het einde: ",[47,10560,10413],{}," klopt. Bij ",[47,10563,10417],{}," gaat het mis bij het derde teken:\n",[47,10566,863],{}," komt binnen, maar ",[47,10569,9055],{}," levert ",[47,10572,426],{}," op. Fout. En bij ",[47,10575,10576],{},"(()"," blijft er aan het eind een ",[47,10579,406],{}," op de\nstapel staan: ook fout.",[369,10582,10583,10791],{},[372,10584,10585],{"v-slot:python":374},[376,10586,10588],{"className":378,"code":10587,"language":380,"meta":374,"style":374},"def haakjes_kloppen(s):\n    paren = {\")\": \"(\", \"]\": \"[\", \"}\": \"{\"}\n    stapel = []\n    for c in s:\n        if c in \"([{\":\n            stapel.append(c)  # openingshaakje: push\n        elif c in paren:\n            # sluithaakje: de bovenkant moet het juiste openingshaakje zijn\n            if not stapel or stapel.pop() != paren[c]:\n                return False\n    return not stapel  # alles moet gesloten zijn\n",[47,10589,10590,10604,10662,10671,10685,10702,10721,10734,10739,10771,10779],{"__ignoreMap":374},[384,10591,10592,10594,10597,10599,10602],{"class":386,"line":387},[384,10593,1612],{"class":450},[384,10595,10596],{"class":401}," haakjes_kloppen",[384,10598,406],{"class":405},[384,10600,10601],{"class":1620},"s",[384,10603,411],{"class":405},[384,10605,10606,10609,10611,10613,10615,10617,10619,10621,10624,10626,10628,10630,10632,10634,10636,10638,10640,10642,10644,10646,10648,10650,10652,10654,10656,10658,10660],{"class":386,"line":414},[384,10607,10608],{"class":394},"    paren ",[384,10610,456],{"class":405},[384,10612,1200],{"class":405},[384,10614,9032],{"class":405},[384,10616,863],{"class":9035},[384,10618,9032],{"class":405},[384,10620,1911],{"class":405},[384,10622,10623],{"class":405}," \"",[384,10625,406],{"class":9035},[384,10627,9032],{"class":405},[384,10629,568],{"class":405},[384,10631,10623],{"class":405},[384,10633,586],{"class":9035},[384,10635,9032],{"class":405},[384,10637,1911],{"class":405},[384,10639,10623],{"class":405},[384,10641,426],{"class":9035},[384,10643,9032],{"class":405},[384,10645,568],{"class":405},[384,10647,10623],{"class":405},[384,10649,10548],{"class":9035},[384,10651,9032],{"class":405},[384,10653,1911],{"class":405},[384,10655,10623],{"class":405},[384,10657,10453],{"class":9035},[384,10659,9032],{"class":405},[384,10661,503],{"class":405},[384,10663,10664,10667,10669],{"class":386,"line":500},[384,10665,10666],{"class":394},"    stapel ",[384,10668,456],{"class":405},[384,10670,4408],{"class":405},[384,10672,10673,10675,10678,10680,10683],{"class":386,"line":602},[384,10674,547],{"class":390},[384,10676,10677],{"class":394}," c ",[384,10679,398],{"class":390},[384,10681,10682],{"class":394}," s",[384,10684,813],{"class":405},[384,10686,10687,10689,10691,10693,10695,10698,10700],{"class":386,"line":721},[384,10688,577],{"class":390},[384,10690,10677],{"class":394},[384,10692,398],{"class":405},[384,10694,10623],{"class":405},[384,10696,10697],{"class":9035},"([{",[384,10699,9032],{"class":405},[384,10701,813],{"class":405},[384,10703,10704,10707,10709,10711,10713,10716,10718],{"class":386,"line":727},[384,10705,10706],{"class":394},"            stapel",[384,10708,150],{"class":405},[384,10710,4486],{"class":401},[384,10712,406],{"class":405},[384,10714,10715],{"class":401},"c",[384,10717,863],{"class":405},[384,10719,10720],{"class":827},"  # openingshaakje: push\n",[384,10722,10723,10725,10727,10729,10732],{"class":386,"line":733},[384,10724,7169],{"class":390},[384,10726,10677],{"class":394},[384,10728,398],{"class":405},[384,10730,10731],{"class":394}," paren",[384,10733,813],{"class":405},[384,10735,10736],{"class":386,"line":1299},[384,10737,10738],{"class":827},"            # sluithaakje: de bovenkant moet het juiste openingshaakje zijn\n",[384,10740,10741,10743,10745,10748,10751,10754,10756,10758,10760,10763,10765,10767,10769],{"class":386,"line":2790},[384,10742,3283],{"class":390},[384,10744,9010],{"class":405},[384,10746,10747],{"class":394}," stapel ",[384,10749,10750],{"class":405},"or",[384,10752,10753],{"class":394}," stapel",[384,10755,150],{"class":405},[384,10757,9055],{"class":401},[384,10759,9254],{"class":405},[384,10761,10762],{"class":405}," !=",[384,10764,10731],{"class":394},[384,10766,426],{"class":405},[384,10768,10715],{"class":394},[384,10770,599],{"class":405},[384,10772,10773,10776],{"class":386,"line":2985},[384,10774,10775],{"class":390},"                return",[384,10777,10778],{"class":405}," False\n",[384,10780,10781,10783,10785,10788],{"class":386,"line":3009},[384,10782,1664],{"class":390},[384,10784,9010],{"class":405},[384,10786,10787],{"class":394}," stapel  ",[384,10789,10790],{"class":827},"# alles moet gesloten zijn\n",[372,10792,10793],{"v-slot:java":374},[376,10794,10796],{"className":437,"code":10795,"language":439,"meta":374,"style":374},"static boolean haakjesKloppen(String s) {\n    java.util.ArrayDeque\u003CCharacter> stapel = new java.util.ArrayDeque\u003C>();\n    for (char c : s.toCharArray()) {\n        if (c == '(' || c == '[' || c == '{') {\n            stapel.push(c); \u002F\u002F openingshaakje: push\n        } else if (c == ')' || c == ']' || c == '}') {\n            char verwacht = c == ')' ? '(' : c == ']' ? '[' : '{';\n            \u002F\u002F sluithaakje: de bovenkant moet het juiste openingshaakje zijn\n            if (stapel.isEmpty() || stapel.pop() != verwacht) {\n                return false;\n            }\n        }\n    }\n    return stapel.isEmpty(); \u002F\u002F alles moet gesloten zijn\n}\n",[47,10797,10798,10819,10857,10881,10929,10946,10994,11054,11059,11092,11099,11103,11107,11111,11127],{"__ignoreMap":374},[384,10799,10800,10802,10805,10808,10810,10813,10815,10817],{"class":386,"line":387},[384,10801,1756],{"class":450},[384,10803,10804],{"class":450}," boolean",[384,10806,10807],{"class":401}," haakjesKloppen",[384,10809,406],{"class":405},[384,10811,10812],{"class":450},"String",[384,10814,10682],{"class":394},[384,10816,863],{"class":405},[384,10818,482],{"class":405},[384,10820,10821,10824,10826,10828,10830,10832,10834,10837,10839,10841,10843,10845,10847,10849,10851,10853,10855],{"class":386,"line":414},[384,10822,10823],{"class":450},"    java",[384,10825,150],{"class":405},[384,10827,4694],{"class":450},[384,10829,150],{"class":405},[384,10831,9440],{"class":450},[384,10833,468],{"class":405},[384,10835,10836],{"class":450},"Character",[384,10838,808],{"class":405},[384,10840,10747],{"class":394},[384,10842,456],{"class":405},[384,10844,4786],{"class":390},[384,10846,9144],{"class":450},[384,10848,150],{"class":405},[384,10850,4694],{"class":450},[384,10852,150],{"class":405},[384,10854,9440],{"class":450},[384,10856,9196],{"class":405},[384,10858,10859,10861,10863,10866,10868,10870,10872,10874,10877,10879],{"class":386,"line":500},[384,10860,547],{"class":390},[384,10862,18],{"class":405},[384,10864,10865],{"class":450},"char",[384,10867,10677],{"class":394},[384,10869,1911],{"class":390},[384,10871,10682],{"class":394},[384,10873,150],{"class":405},[384,10875,10876],{"class":401},"toCharArray",[384,10878,9272],{"class":405},[384,10880,482],{"class":405},[384,10882,10883,10885,10887,10890,10892,10895,10897,10900,10903,10905,10907,10909,10911,10913,10915,10917,10919,10921,10923,10925,10927],{"class":386,"line":602},[384,10884,577],{"class":390},[384,10886,18],{"class":405},[384,10888,10889],{"class":394},"c ",[384,10891,1642],{"class":405},[384,10893,10894],{"class":405}," '",[384,10896,406],{"class":9035},[384,10898,10899],{"class":405},"'",[384,10901,10902],{"class":405}," ||",[384,10904,10677],{"class":394},[384,10906,1642],{"class":405},[384,10908,10894],{"class":405},[384,10910,426],{"class":9035},[384,10912,10899],{"class":405},[384,10914,10902],{"class":405},[384,10916,10677],{"class":394},[384,10918,1642],{"class":405},[384,10920,10894],{"class":405},[384,10922,10453],{"class":9035},[384,10924,10899],{"class":405},[384,10926,863],{"class":405},[384,10928,482],{"class":405},[384,10930,10931,10933,10935,10937,10939,10941,10943],{"class":386,"line":721},[384,10932,10706],{"class":394},[384,10934,150],{"class":405},[384,10936,9613],{"class":401},[384,10938,406],{"class":405},[384,10940,10715],{"class":394},[384,10942,9234],{"class":405},[384,10944,10945],{"class":827}," \u002F\u002F openingshaakje: push\n",[384,10947,10948,10950,10952,10954,10956,10958,10960,10962,10964,10966,10968,10970,10972,10974,10976,10978,10980,10982,10984,10986,10988,10990,10992],{"class":386,"line":727},[384,10949,4912],{"class":405},[384,10951,4915],{"class":390},[384,10953,7384],{"class":390},[384,10955,18],{"class":405},[384,10957,10889],{"class":394},[384,10959,1642],{"class":405},[384,10961,10894],{"class":405},[384,10963,863],{"class":9035},[384,10965,10899],{"class":405},[384,10967,10902],{"class":405},[384,10969,10677],{"class":394},[384,10971,1642],{"class":405},[384,10973,10894],{"class":405},[384,10975,586],{"class":9035},[384,10977,10899],{"class":405},[384,10979,10902],{"class":405},[384,10981,10677],{"class":394},[384,10983,1642],{"class":405},[384,10985,10894],{"class":405},[384,10987,10548],{"class":9035},[384,10989,10899],{"class":405},[384,10991,863],{"class":405},[384,10993,482],{"class":405},[384,10995,10996,10999,11002,11004,11006,11008,11010,11012,11014,11017,11019,11021,11023,11026,11028,11030,11032,11034,11036,11038,11040,11042,11044,11046,11048,11050,11052],{"class":386,"line":733},[384,10997,10998],{"class":450},"            char",[384,11000,11001],{"class":394}," verwacht ",[384,11003,456],{"class":405},[384,11005,10677],{"class":394},[384,11007,1642],{"class":405},[384,11009,10894],{"class":405},[384,11011,863],{"class":9035},[384,11013,10899],{"class":405},[384,11015,11016],{"class":390}," ?",[384,11018,10894],{"class":405},[384,11020,406],{"class":9035},[384,11022,10899],{"class":405},[384,11024,11025],{"class":390}," :",[384,11027,10677],{"class":394},[384,11029,1642],{"class":405},[384,11031,10894],{"class":405},[384,11033,586],{"class":9035},[384,11035,10899],{"class":405},[384,11037,11016],{"class":390},[384,11039,10894],{"class":405},[384,11041,426],{"class":9035},[384,11043,10899],{"class":405},[384,11045,11025],{"class":390},[384,11047,10894],{"class":405},[384,11049,10453],{"class":9035},[384,11051,10899],{"class":405},[384,11053,848],{"class":405},[384,11055,11056],{"class":386,"line":1299},[384,11057,11058],{"class":827},"            \u002F\u002F sluithaakje: de bovenkant moet het juiste openingshaakje zijn\n",[384,11060,11061,11063,11065,11067,11069,11071,11073,11075,11077,11079,11081,11083,11085,11088,11090],{"class":386,"line":2790},[384,11062,3283],{"class":390},[384,11064,18],{"class":405},[384,11066,8461],{"class":394},[384,11068,150],{"class":405},[384,11070,9269],{"class":401},[384,11072,9254],{"class":405},[384,11074,10902],{"class":405},[384,11076,10753],{"class":394},[384,11078,150],{"class":405},[384,11080,9055],{"class":401},[384,11082,9254],{"class":405},[384,11084,10762],{"class":405},[384,11086,11087],{"class":394}," verwacht",[384,11089,863],{"class":405},[384,11091,482],{"class":405},[384,11093,11094,11096],{"class":386,"line":2985},[384,11095,10775],{"class":390},[384,11097,11098],{"class":405}," false;\n",[384,11100,11101],{"class":386,"line":3009},[384,11102,3530],{"class":405},[384,11104,11105],{"class":386,"line":3014},[384,11106,724],{"class":405},[384,11108,11109],{"class":386,"line":3563},[384,11110,730],{"class":405},[384,11112,11113,11115,11117,11119,11121,11124],{"class":386,"line":3588},[384,11114,1664],{"class":390},[384,11116,10753],{"class":394},[384,11118,150],{"class":405},[384,11120,9269],{"class":401},[384,11122,11123],{"class":405},"();",[384,11125,11126],{"class":827}," \u002F\u002F alles moet gesloten zijn\n",[384,11128,11129],{"class":386,"line":3606},[384,11130,503],{"class":405},[39,11132,11134],{"id":11133},"meer-toepassingen","Meer toepassingen",[226,11136,11137,11149],{},[229,11138,11139],{},[232,11140,11141,11144,11147],{},[235,11142,11143],{},"Toepassing",[235,11145,11146],{},"Structuur",[235,11148,7514],{},[248,11150,11151,11161,11173,11184,11194,11207],{},[232,11152,11153,11156,11158],{},[253,11154,11155],{},"Undo in een editor",[253,11157,8461],{},[253,11159,11160],{},"de laatste wijziging maak je als eerste ongedaan",[232,11162,11163,11168,11170],{},[253,11164,11165,11166,863],{},"Functieaanroepen (",[20,11167,8475],{},[253,11169,8461],{},[253,11171,11172],{},"de laatst aangeroepen functie keert als eerste terug",[232,11174,11175,11178,11181],{},[253,11176,11177],{},"DFS in een graaf",[253,11179,11180],{},"stapel (of recursie)",[253,11182,11183],{},"ga zo diep mogelijk, keer terug naar de laatste splitsing",[232,11185,11186,11189,11191],{},[253,11187,11188],{},"Printerwachtrij",[253,11190,8468],{},[253,11192,11193],{},"opdrachten in volgorde van binnenkomst",[232,11195,11196,11202,11204],{},[253,11197,11198,11199],{},"BFS in een ",[28,11200,11201],{"href":35},"graaf",[253,11203,8468],{},[253,11205,11206],{},"knopen per laag verwerken, dichtstbijzijnde eerst",[232,11208,11209,11212,11214],{},[253,11210,11211],{},"Verzoeken op een webserver",[253,11213,8468],{},[253,11215,11216],{},"eerlijk: wie eerst komt, wordt eerst bediend",[11,11218,11219,11220,150],{},"Wil je in plaats van \"eerst binnen\" juist \"kleinste eerst\" verwerken, dan heb je een\nprioriteitswachtrij nodig. Die bouw je met een ",[28,11221,11223],{"href":11222},"\u002Fpracticely\u002Fdsa\u002Fheaps","heap",[39,11225,17],{"id":2398},[226,11227,11228,11251],{},[229,11229,11230],{},[232,11231,11232,11234,11237,11240,11248],{},[235,11233,8546],{},[235,11235,11236],{},"Stapel (array)",[235,11238,11239],{},"Stapel (gelinkte lijst)",[235,11241,11242,11243,4668,11246,863],{},"Wachtrij (",[47,11244,11245],{},"deque",[47,11247,9440],{},[235,11249,11250],{},"Wachtrij (gelinkte lijst met tail)",[248,11252,11253,11278,11302,11328],{},[232,11254,11255,11262,11266,11270,11274],{},[253,11256,11257,11259,11260],{},[47,11258,9613],{}," \u002F ",[47,11261,9634],{},[253,11263,11264,6209],{},[47,11265,210],{},[253,11267,11268],{},[47,11269,210],{},[253,11271,11272,6209],{},[47,11273,210],{},[253,11275,11276],{},[47,11277,210],{},[232,11279,11280,11286,11290,11294,11298],{},[253,11281,11282,11259,11284],{},[47,11283,9055],{},[47,11285,9422],{},[253,11287,11288],{},[47,11289,210],{},[253,11291,11292],{},[47,11293,210],{},[253,11295,11296],{},[47,11297,210],{},[253,11299,11300],{},[47,11301,210],{},[232,11303,11304,11312,11316,11320,11324],{},[253,11305,11306,11259,11309],{},[47,11307,11308],{},"peek",[47,11310,11311],{},"front",[253,11313,11314],{},[47,11315,210],{},[253,11317,11318],{},[47,11319,210],{},[253,11321,11322],{},[47,11323,210],{},[253,11325,11326],{},[47,11327,210],{},[232,11329,11330,11333,11337,11341,11345],{},[253,11331,11332],{},"zoeken naar een waarde",[253,11334,11335],{},[47,11336,119],{},[253,11338,11339],{},[47,11340,119],{},[253,11342,11343],{},[47,11344,119],{},[253,11346,11347],{},[47,11348,119],{},[11,11350,11351,11352,11355,11356,11358],{},"\"Gemiddeld\" (",[20,11353,11354],{},"amortized",") bij de array: meestal is er nog plek, maar af en toe moet de array\nverdubbelen en wordt alles gekopieerd. Verdeeld over alle operaties is dat nog steeds ",[47,11357,210],{}," per\noperatie.",[39,11360,2248],{"id":2247},[129,11362,11363,11379,11391,11409,11418],{},[59,11364,11365,11368,11369,11372,11373,2289,11375,11378],{},[15,11366,11367],{},"De stapel in de verkeerde richting opschrijven."," Wij noteren van onder naar boven: na\n",[47,11370,11371],{},"push(4), push(7)"," is het ",[47,11374,8585],{},[47,11376,11377],{},"7, 4",". Het meest rechtse element gaat er als eerste af.",[59,11380,11381,136,11384,11386,11387,11390],{},[15,11382,11383],{},"Bij de wachtrij aan de verkeerde kant weghalen.",[47,11385,9422],{}," haalt het element weg dat het\nlangst wacht, dus het meest ",[15,11388,11389],{},"linkse"," in de notatie voor → achter.",[59,11392,11393,11396,11397,1057,11400,136,11403,11405,11406,11408],{},[15,11394,11395],{},"Een gewone lijst als wachtrij gebruiken"," en denken dat ",[47,11398,11399],{},"pop(0)",[47,11401,11402],{},"remove(0)",[47,11404,210],{}," is. Het\nis ",[47,11407,119],{},", want alles schuift op.",[59,11410,11411,11414,11415,11417],{},[15,11412,11413],{},"Bij haakjes controleren vergeten te kijken of de stapel aan het eind leeg is."," Dan keur je\n",[47,11416,10576],{}," ten onrechte goed.",[59,11419,11420,11425,11426,11428,11429,150],{},[15,11421,11422,11424],{},[47,11423,9584],{}," niet bijwerken"," in een gelinkte wachtrij als de laatste knoop verdwijnt, of ",[47,11427,9467],{},"\nvergeten bij de eerste ",[47,11430,9634],{},[39,11432,2316],{"id":2315},[56,11434,11435,11445,11456,11465,11473],{},[59,11436,11437,11438,71,11440,188,11442,11444],{},"Stapel = ",[15,11439,8489],{},[47,11441,9613],{},[47,11443,9055],{}," aan dezelfde kant; noteer van onder naar boven.",[59,11446,11447,11448,71,11450,11452,11453,11455],{},"Wachtrij = ",[15,11449,8685],{},[47,11451,9634],{}," achteraan, ",[47,11454,9422],{}," vooraan; noteer van voor naar achter.",[59,11457,11458,11459,11461,11462,11464],{},"Alle kernoperaties zijn ",[47,11460,210],{},", mits je de juiste implementatie kiest (geen ",[47,11463,11399],{}," op een lijst).",[59,11466,11467,11468,11470,11471,150],{},"Een enkel gelinkte lijst kan vooraan invoegen en verwijderen in ",[47,11469,210],{},", maar indexeren kost ",[47,11472,119],{},[59,11474,11475],{},"Stapel: haakjes, undo, call stack, DFS. Wachtrij: printer, BFS, verzoeken verwerken.",[2371,11477,11478],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":374,"searchDepth":414,"depth":414,"links":11480},[11481,11482,11483,11484,11485,11486,11487,11488,11489,11490],{"id":8482,"depth":414,"text":8483},{"id":8678,"depth":414,"text":8679},{"id":8874,"depth":414,"text":8875},{"id":9444,"depth":414,"text":9445},{"id":9604,"depth":414,"text":9605},{"id":10406,"depth":414,"text":10407},{"id":11133,"depth":414,"text":11134},{"id":2398,"depth":414,"text":17},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Stack en queue stap voor stap: push, pop, enqueue en dequeue, implementatie met array en gelinkte lijst, haakjes controleren en code in Python en Java.","i-lucide-layers",{},"\u002Fpracticely-dsa\u002Fstapels-en-wachtrijen",{"title":8453,"description":11491},"practicely-dsa\u002Fstapels-en-wachtrijen","stapels-en-wachtrijen","muo76bpaJ6VLu5iRSvDFur7L2y0vejg1my9MPrCy8rk",{"id":11500,"title":11501,"body":11502,"description":13920,"extension":2392,"icon":13921,"meta":13922,"navigation":1702,"order":721,"path":13923,"seo":13924,"stem":13925,"topic":13926,"__hash__":13927},"practicelyDsa\u002Fpracticely-dsa\u002Fhashtabellen.md","Hashtabellen uitgelegd: hashfuncties, botsingen en linear probing",{"type":8,"value":11503,"toc":13906},[11504,11523,11526,11530,11537,11543,11574,11590,11594,11612,11616,11631,11685,11688,11746,11752,11756,11774,11782,11949,11952,11980,11984,11996,12041,12056,12066,12104,12113,12117,12124,12130,12142,12152,12173,12184,12246,12269,12273,12276,13636,13661,13665,13668,13699,13716,13733,13735,13813,13816,13818,13871,13873,13903],[11,11505,11506,11507,11510,11511,11514,11515,11518,11519,11522],{},"Een hashtabel (",[20,11508,11509],{},"hash table",") bewaart sleutels zo dat je ze in gemiddeld ",[15,11512,11513],{},"constante tijd"," terugvindt.\nGeen lijst doorlopen, geen binair zoeken: je rekent uit waar de sleutel moet staan en kijkt daar.\nElke ",[47,11516,11517],{},"dict"," in Python en elke ",[47,11520,11521],{},"HashMap"," in Java werkt zo.",[11,11524,11525],{},"Je moet dit kennen omdat het overal terugkomt. Op het tentamen vragen ze vrijwel altijd om een tabel\nmet de hand te vullen. In sollicitatiegesprekken is \"gebruik een hashmap\" het antwoord op de helft van\nde programmeervragen. En in de praktijk wil je begrijpen waarom een opzoeking ineens traag wordt.",[39,11527,11529],{"id":11528},"de-hashfunctie","De hashfunctie",[11,11531,11532,11533,11536],{},"Een hashfunctie (",[20,11534,11535],{},"hash function",") zet een sleutel om in een vakjesnummer. Op Practicely gebruiken we\nsteeds dezelfde, eenvoudige functie:",[376,11538,11541],{"className":11539,"code":11540,"language":5073},[5071],"h(k) = k mod m\n",[47,11542,11540],{"__ignoreMap":374},[11,11544,11545,11546,11548,11549,11552,11553,11556,11557,11560,11561,11556,11564,11567,11568,11570,11571,150],{},"Hierin is ",[47,11547,3301],{}," de tabelgrootte, het aantal vakjes. Bij ",[47,11550,11551],{},"m = 7"," komt sleutel ",[47,11554,11555],{},"15"," in vakje ",[47,11558,11559],{},"15 mod 7 = 1","\nen sleutel ",[47,11562,11563],{},"27",[47,11565,11566],{},"27 mod 7 = 6",". De vakjes zijn genummerd van ",[47,11569,2048],{}," tot en met ",[47,11572,11573],{},"m - 1",[11,11575,11576,11577,11579,11580,11583,11584,11586,11587,11589],{},"Een goede hashfunctie verdeelt sleutels gelijkmatig over de tabel. Daarom kiest men voor ",[47,11578,3301],{}," vaak een\npriemgetal: met ",[47,11581,11582],{},"m = 10"," belanden alle sleutels die op een ",[47,11585,2048],{}," eindigen in hetzelfde vakje, met ",[47,11588,11551],{},"\ngebeurt dat veel minder snel.",[39,11591,11593],{"id":11592},"botsingen","Botsingen",[11,11595,11596,11597,11600,11601,188,11603,11605,11606,11608,11609,11611],{},"Er zijn veel meer mogelijke sleutels dan vakjes, dus twee sleutels komen soms in hetzelfde vakje\nuit. Dat heet een botsing (",[20,11598,11599],{},"collision","). ",[47,11602,11555],{},[47,11604,2089],{}," hebben bij ",[47,11607,11551],{}," allebei hashwaarde ",[47,11610,269],{},".\nBotsingen zijn niet te vermijden; de vraag is alleen hoe je ermee omgaat. Er zijn twee klassieke\noplossingen.",[364,11613,11615],{"id":11614},"chaining","Chaining",[11,11617,11618,11619,11622,11623,11625,11626,1907,11629,150],{},"Bij chaining (",[20,11620,11621],{},"separate chaining",") is elk vakje een lijst. Een nieuwe sleutel komt ",[15,11624,8701],{}," de\nlijst van zijn vakje. We voegen in deze volgorde in: ",[47,11627,11628],{},"15, 11, 27, 8, 20, 34",[47,11630,11551],{},[226,11632,11633,11645],{},[229,11634,11635],{},[232,11636,11637,11640],{},[235,11638,11639],{},"Sleutel",[235,11641,11642],{},[47,11643,11644],{},"h(k)",[248,11646,11647,11653,11660,11666,11672,11679],{},[232,11648,11649,11651],{},[253,11650,11555],{},[253,11652,269],{},[232,11654,11655,11658],{},[253,11656,11657],{},"11",[253,11659,1044],{},[232,11661,11662,11664],{},[253,11663,11563],{},[253,11665,2603],{},[232,11667,11668,11670],{},[253,11669,2089],{},[253,11671,269],{},[232,11673,11674,11677],{},[253,11675,11676],{},"20",[253,11678,2603],{},[232,11680,11681,11683],{},[253,11682,6786],{},[253,11684,2603],{},[11,11686,11687],{},"Eindresultaat:",[226,11689,11690,11700],{},[229,11691,11692],{},[232,11693,11694,11697],{},[235,11695,11696],{},"Vakje",[235,11698,11699],{},"Inhoud",[248,11701,11702,11708,11715,11721,11727,11733,11739],{},[232,11703,11704,11706],{},[253,11705,2048],{},[253,11707,1677],{},[232,11709,11710,11712],{},[253,11711,269],{},[253,11713,11714],{},"15 → 8",[232,11716,11717,11719],{},[253,11718,1952],{},[253,11720,1677],{},[232,11722,11723,11725],{},[253,11724,1970],{},[253,11726,1677],{},[232,11728,11729,11731],{},[253,11730,1044],{},[253,11732,11657],{},[232,11734,11735,11737],{},[253,11736,1025],{},[253,11738,1677],{},[232,11740,11741,11743],{},[253,11742,2603],{},[253,11744,11745],{},"27 → 20 → 34",[11,11747,11748,11749,11751],{},"Zoeken naar ",[47,11750,6786],{}," betekent: naar vakje 6 gaan en die lijst doorlopen. Hoe korter de lijsten, hoe sneller.",[364,11753,11755],{"id":11754},"linear-probing","Linear probing",[11,11757,11758,11759,11762,11763,18,11765,11768,11769,18,11771,8476],{},"Bij open adressering (",[20,11760,11761],{},"open addressing",") staat elke sleutel direct in de tabel, zonder lijsten. De\neenvoudigste variant is linear probing: is het vakje bezet, probeer dan het ",[15,11764,6240],{},[47,11766,11767],{},"+1","). Ben je\nbij het laatste vakje, dan ga je verder bij ",[47,11770,2048],{},[20,11772,11773],{},"wrap-around",[11,11775,11776,11777,11779,11780,150],{},"Dezelfde sleutels, dezelfde volgorde, ",[47,11778,11551],{},". Een leeg vakje noteren we als ",[47,11781,1677],{},[226,11783,11784,11812],{},[229,11785,11786],{},[232,11787,11788,11791,11795,11798,11800,11802,11804,11806,11808,11810],{},[235,11789,11790],{},"Invoeging",[235,11792,11793],{},[47,11794,11644],{},[235,11796,11797],{},"Geprobeerde vakjes",[235,11799,2048],{},[235,11801,269],{},[235,11803,1952],{},[235,11805,1970],{},[235,11807,1044],{},[235,11809,1025],{},[235,11811,2603],{},[248,11813,11814,11836,11858,11880,11903,11926],{},[232,11815,11816,11818,11820,11822,11824,11826,11828,11830,11832,11834],{},[253,11817,11555],{},[253,11819,269],{},[253,11821,269],{},[253,11823,1677],{},[253,11825,11555],{},[253,11827,1677],{},[253,11829,1677],{},[253,11831,1677],{},[253,11833,1677],{},[253,11835,1677],{},[232,11837,11838,11840,11842,11844,11846,11848,11850,11852,11854,11856],{},[253,11839,11657],{},[253,11841,1044],{},[253,11843,1044],{},[253,11845,1677],{},[253,11847,11555],{},[253,11849,1677],{},[253,11851,1677],{},[253,11853,11657],{},[253,11855,1677],{},[253,11857,1677],{},[232,11859,11860,11862,11864,11866,11868,11870,11872,11874,11876,11878],{},[253,11861,11563],{},[253,11863,2603],{},[253,11865,2603],{},[253,11867,1677],{},[253,11869,11555],{},[253,11871,1677],{},[253,11873,1677],{},[253,11875,11657],{},[253,11877,1677],{},[253,11879,11563],{},[232,11881,11882,11884,11886,11889,11891,11893,11895,11897,11899,11901],{},[253,11883,2089],{},[253,11885,269],{},[253,11887,11888],{},"1, 2",[253,11890,1677],{},[253,11892,11555],{},[253,11894,2089],{},[253,11896,1677],{},[253,11898,11657],{},[253,11900,1677],{},[253,11902,11563],{},[232,11904,11905,11907,11909,11912,11914,11916,11918,11920,11922,11924],{},[253,11906,11676],{},[253,11908,2603],{},[253,11910,11911],{},"6, 0",[253,11913,11676],{},[253,11915,11555],{},[253,11917,2089],{},[253,11919,1677],{},[253,11921,11657],{},[253,11923,1677],{},[253,11925,11563],{},[232,11927,11928,11930,11932,11935,11937,11939,11941,11943,11945,11947],{},[253,11929,6786],{},[253,11931,2603],{},[253,11933,11934],{},"6, 0, 1, 2, 3",[253,11936,11676],{},[253,11938,11555],{},[253,11940,2089],{},[253,11942,6786],{},[253,11944,11657],{},[253,11946,1677],{},[253,11948,11563],{},[11,11950,11951],{},"Let op drie dingen:",[56,11953,11954,11962,11967],{},[59,11955,11956,11958,11959,11961],{},[47,11957,2089],{}," botst met ",[47,11960,11555],{}," in vakje 1 en schuift één plek op naar vakje 2.",[59,11963,11964,11966],{},[47,11965,11676],{}," hoort in vakje 6, dat is bezet, dus via wrap-around naar vakje 0.",[59,11968,11969,11971,11972,11975,11976,11979],{},[47,11970,6786],{}," hoort ook in vakje 6 en moet vijf vakjes proberen. Bezette vakjes vormen een aaneengesloten\nblok (",[20,11973,11974],{},"cluster","), en elke nieuwe sleutel die in dat blok valt, maakt het blok nog langer. Dat\nverschijnsel heet ",[20,11977,11978],{},"primary clustering"," en is het grote nadeel van linear probing.",[39,11981,11983],{"id":11982},"zoeken-en-verwijderen","Zoeken en verwijderen",[11,11985,11986,11989,11990,11992,11993,11995],{},[15,11987,11988],{},"Zoeken"," volgt exact dezelfde route als invoegen. Begin bij ",[47,11991,11644],{}," en schuif op tot je de sleutel\nvindt of een ",[15,11994,10555],{}," vakje tegenkomt. Een leeg vakje betekent: hier zou de sleutel gestaan hebben, dus\nhij zit niet in de tabel.",[226,11997,11998,12009],{},[229,11999,12000],{},[232,12001,12002,12005,12007],{},[235,12003,12004],{},"Zoek",[235,12006,11797],{},[235,12008,4153],{},[248,12010,12011,12020,12031],{},[232,12012,12013,12015,12017],{},[253,12014,6786],{},[253,12016,11934],{},[253,12018,12019],{},"gevonden in vakje 3",[232,12021,12022,12025,12028],{},[253,12023,12024],{},"22",[253,12026,12027],{},"1, 2, 3, 4, 5",[253,12029,12030],{},"vakje 5 is leeg, dus niet gevonden",[232,12032,12033,12036,12039],{},[253,12034,12035],{},"13",[253,12037,12038],{},"6, 0, 1, 2, 3, 4, 5",[253,12040,12030],{},[11,12042,12043,12046,12047,12049,12050,12052,12053,12055],{},[15,12044,12045],{},"Verwijderen"," is lastiger. Stel dat je ",[47,12048,2089],{}," uit vakje 2 haalt en het vakje gewoon leeg maakt. Zoek je\ndaarna naar ",[47,12051,6786],{},", dan probeer je 6, 0, 1, 2 en stopt bij het lege vakje 2: \"niet gevonden\", terwijl\n",[47,12054,6786],{}," gewoon in vakje 3 staat. Je hebt de keten doorgeknipt.",[11,12057,12058,12059,12062,12063,150],{},"De oplossing is een grafsteen (",[20,12060,12061],{},"tombstone","): een markering \"hier stond iets\". Hieronder genoteerd als ",[47,12064,12065],{},"×",[226,12067,12068,12086],{},[229,12069,12070],{},[232,12071,12072,12074,12076,12078,12080,12082,12084],{},[235,12073,2048],{},[235,12075,269],{},[235,12077,1952],{},[235,12079,1970],{},[235,12081,1044],{},[235,12083,1025],{},[235,12085,2603],{},[248,12087,12088],{},[232,12089,12090,12092,12094,12096,12098,12100,12102],{},[253,12091,11676],{},[253,12093,11555],{},[253,12095,12065],{},[253,12097,6786],{},[253,12099,11657],{},[253,12101,1677],{},[253,12103,11563],{},[11,12105,12106,12107,12109,12110,12112],{},"Bij zoeken loop je door een ",[47,12108,12065],{}," heen; bij invoegen mag je een ",[47,12111,12065],{}," hergebruiken. Bij chaining speelt\ndit probleem niet: daar haal je de sleutel gewoon uit de lijst.",[39,12114,12116],{"id":12115},"load-factor-en-rehashen","Load factor en rehashen",[11,12118,12119,12120,12123],{},"De load factor (",[20,12121,12122],{},"bezettingsgraad",") is",[376,12125,12128],{"className":12126,"code":12127,"language":5073},[5071],"α = n \u002F m\n",[47,12129,12127],{"__ignoreMap":374},[11,12131,1892,12132,12134,12135,12138,12139,12141],{},[47,12133,49],{}," het aantal opgeslagen sleutels. In het voorbeeld hierboven is ",[47,12136,12137],{},"α = 6\u002F7 ≈ 0,86",". Dat is hoog,\nen je ziet het effect: zoeken naar ",[47,12140,12035],{}," kost zeven stappen.",[11,12143,12144,12145,12148,12149,12151],{},"Bij linear probing moet ",[47,12146,12147],{},"α"," altijd kleiner dan 1 blijven (anders is de tabel vol) en in de praktijk\nruim onder 0,7. Bij chaining kan ",[47,12150,12147],{}," boven 1 komen, maar dan worden de lijsten lang.",[11,12153,12154,12155,12157,12158,12161,12162,12165,12166,12168,12169,12172],{},"Daarom groeit een hashtabel automatisch. Wordt ",[47,12156,12147],{}," te groot, dan maak je een nieuwe, grotere tabel\n(vaak ongeveer twee keer zo groot) en voeg je ",[15,12159,12160],{},"alle"," sleutels opnieuw in. Dat heet rehashen\n(",[20,12163,12164],{},"rehashing","). Je kunt de oude array niet zomaar kopiëren: met een nieuwe ",[47,12167,3301],{}," verandert ",[47,12170,12171],{},"k mod m","\nvoor bijna elke sleutel.",[11,12174,12175,12176,12179,12180,12183],{},"Rehashen we onze zes sleutels naar ",[47,12177,12178],{},"m = 13"," (in de volgorde waarin ze in de oude tabel staan:\n",[47,12181,12182],{},"20, 15, 8, 34, 11, 27","), dan krijg je:",[226,12185,12186,12216],{},[229,12187,12188],{},[232,12189,12190,12192,12194,12196,12198,12200,12202,12204,12206,12208,12210,12212,12214],{},[235,12191,2048],{},[235,12193,269],{},[235,12195,1952],{},[235,12197,1970],{},[235,12199,1044],{},[235,12201,1025],{},[235,12203,2603],{},[235,12205,4251],{},[235,12207,2089],{},[235,12209,5186],{},[235,12211,287],{},[235,12213,11657],{},[235,12215,6771],{},[248,12217,12218],{},[232,12219,12220,12222,12224,12226,12228,12230,12232,12234,12236,12238,12240,12242,12244],{},[253,12221,1677],{},[253,12223,11563],{},[253,12225,11555],{},[253,12227,1677],{},[253,12229,1677],{},[253,12231,1677],{},[253,12233,1677],{},[253,12235,11676],{},[253,12237,2089],{},[253,12239,6786],{},[253,12241,1677],{},[253,12243,11657],{},[253,12245,1677],{},[11,12247,12248,12249,188,12251,12253,12254,12257,12258,12260,12261,18,12264,12266,12267,150],{},"Nog maar één botsing (",[47,12250,6786],{},[47,12252,2089],{},", allebei vakje 8) en ",[47,12255,12256],{},"α = 6\u002F13 ≈ 0,46",". Rehashen kost ",[47,12259,119],{},", maar\nomdat het steeds zeldzamer gebeurt naarmate de tabel groeit, is invoegen ",[20,12262,12263],{},"gemiddeld over alle\noperaties",[20,12265,11354],{},") nog steeds ",[47,12268,210],{},[39,12270,12272],{"id":12271},"code-hashtabel-met-linear-probing","Code: hashtabel met linear probing",[11,12274,12275],{},"Een minimale hashtabel voor gehele getallen, met tombstones. Hij rehasht niet automatisch, zodat hij\nprecies dezelfde tabellen oplevert als de voorbeelden hierboven.",[369,12277,12278,12953],{},[372,12279,12280],{"v-slot:python":374},[376,12281,12283],{"className":378,"code":12282,"language":380,"meta":374,"style":374},"LEEG = None\nWEG = \"×\"  # tombstone\n\n\nclass HashTabel:\n    def __init__(self, m):\n        self.m = m\n        self.vakjes = [LEEG] * m\n\n    def _route(self, k):\n        # alle vakjes in probeervolgorde: h(k), h(k)+1, ... met wrap-around\n        start = k % self.m\n        for stap in range(self.m):\n            yield (start + stap) % self.m\n\n    def zoek(self, k):\n        for i in self._route(k):\n            if self.vakjes[i] is LEEG:\n                return -1  # leeg vakje: sleutel bestaat niet\n            if self.vakjes[i] == k:\n                return i\n        return -1\n\n    def voeg_toe(self, k):\n        if self.zoek(k) != -1:\n            return  # al aanwezig\n        for i in self._route(k):\n            if self.vakjes[i] is LEEG or self.vakjes[i] == WEG:\n                self.vakjes[i] = k\n                return\n        raise OverflowError(\"tabel is vol\")\n\n    def verwijder(self, k):\n        i = self.zoek(k)\n        if i != -1:\n            self.vakjes[i] = WEG  # niet LEEG, anders breekt de zoekketen\n\n\nt = HashTabel(7)\nfor k in [15, 11, 27, 8, 20, 34]:\n    t.voeg_toe(k)\nprint([\"-\" if v is LEEG else v for v in t.vakjes])\n# [20, 15, 8, 34, 11, '-', 27]\n",[47,12284,12285,12294,12310,12314,12318,12327,12344,12357,12381,12385,12402,12407,12426,12447,12473,12477,12494,12515,12538,12549,12571,12577,12585,12589,12606,12631,12638,12658,12700,12720,12725,12744,12748,12765,12784,12799,12822,12827,12832,12848,12888,12905,12947],{"__ignoreMap":374},[384,12286,12287,12290,12292],{"class":386,"line":387},[384,12288,12289],{"class":394},"LEEG ",[384,12291,456],{"class":405},[384,12293,10001],{"class":405},[384,12295,12296,12299,12301,12303,12305,12307],{"class":386,"line":414},[384,12297,12298],{"class":394},"WEG ",[384,12300,456],{"class":405},[384,12302,10623],{"class":405},[384,12304,12065],{"class":9035},[384,12306,9032],{"class":405},[384,12308,12309],{"class":827},"  # tombstone\n",[384,12311,12312],{"class":386,"line":500},[384,12313,1703],{"emptyLinePlaceholder":1702},[384,12315,12316],{"class":386,"line":602},[384,12317,1703],{"emptyLinePlaceholder":1702},[384,12319,12320,12322,12325],{"class":386,"line":721},[384,12321,8907],{"class":450},[384,12323,12324],{"class":8910}," HashTabel",[384,12326,813],{"class":405},[384,12328,12329,12331,12333,12335,12337,12339,12342],{"class":386,"line":727},[384,12330,8918],{"class":450},[384,12332,8921],{"class":401},[384,12334,406],{"class":405},[384,12336,8927],{"class":8926},[384,12338,568],{"class":405},[384,12340,12341],{"class":1620}," m",[384,12343,411],{"class":405},[384,12345,12346,12348,12350,12352,12354],{"class":386,"line":733},[384,12347,8934],{"class":394},[384,12349,150],{"class":405},[384,12351,3301],{"class":8939},[384,12353,2769],{"class":405},[384,12355,12356],{"class":394}," m\n",[384,12358,12359,12361,12363,12366,12368,12371,12374,12376,12379],{"class":386,"line":1299},[384,12360,8934],{"class":394},[384,12362,150],{"class":405},[384,12364,12365],{"class":8939},"vakjes",[384,12367,2769],{"class":405},[384,12369,12370],{"class":405}," [",[384,12372,12373],{"class":394},"LEEG",[384,12375,586],{"class":405},[384,12377,12378],{"class":405}," *",[384,12380,12356],{"class":394},[384,12382,12383],{"class":386,"line":2790},[384,12384,1703],{"emptyLinePlaceholder":1702},[384,12386,12387,12389,12392,12394,12396,12398,12400],{"class":386,"line":2985},[384,12388,8918],{"class":450},[384,12390,12391],{"class":401}," _route",[384,12393,406],{"class":405},[384,12395,8927],{"class":8926},[384,12397,568],{"class":405},[384,12399,2872],{"class":1620},[384,12401,411],{"class":405},[384,12403,12404],{"class":386,"line":3009},[384,12405,12406],{"class":827},"        # alle vakjes in probeervolgorde: h(k), h(k)+1, ... met wrap-around\n",[384,12408,12409,12412,12414,12416,12419,12421,12423],{"class":386,"line":3014},[384,12410,12411],{"class":394},"        start ",[384,12413,456],{"class":405},[384,12415,2668],{"class":394},[384,12417,12418],{"class":405},"%",[384,12420,9013],{"class":394},[384,12422,150],{"class":405},[384,12424,12425],{"class":8939},"m\n",[384,12427,12428,12430,12433,12435,12437,12439,12441,12443,12445],{"class":386,"line":3563},[384,12429,3262],{"class":390},[384,12431,12432],{"class":394}," stap ",[384,12434,398],{"class":390},[384,12436,402],{"class":401},[384,12438,406],{"class":405},[384,12440,8927],{"class":394},[384,12442,150],{"class":405},[384,12444,3301],{"class":8939},[384,12446,411],{"class":405},[384,12448,12449,12452,12454,12457,12459,12462,12464,12467,12469,12471],{"class":386,"line":3588},[384,12450,12451],{"class":390},"            yield",[384,12453,18],{"class":405},[384,12455,12456],{"class":394},"start ",[384,12458,562],{"class":405},[384,12460,12461],{"class":394}," stap",[384,12463,863],{"class":405},[384,12465,12466],{"class":405}," %",[384,12468,9013],{"class":394},[384,12470,150],{"class":405},[384,12472,12425],{"class":8939},[384,12474,12475],{"class":386,"line":3606},[384,12476,1703],{"emptyLinePlaceholder":1702},[384,12478,12479,12481,12484,12486,12488,12490,12492],{"class":386,"line":3611},[384,12480,8918],{"class":450},[384,12482,12483],{"class":401}," zoek",[384,12485,406],{"class":405},[384,12487,8927],{"class":8926},[384,12489,568],{"class":405},[384,12491,2872],{"class":1620},[384,12493,411],{"class":405},[384,12495,12496,12498,12500,12502,12504,12506,12509,12511,12513],{"class":386,"line":4541},[384,12497,3262],{"class":390},[384,12499,395],{"class":394},[384,12501,398],{"class":390},[384,12503,9013],{"class":394},[384,12505,150],{"class":405},[384,12507,12508],{"class":401},"_route",[384,12510,406],{"class":405},[384,12512,2487],{"class":401},[384,12514,411],{"class":405},[384,12516,12517,12519,12521,12523,12525,12527,12529,12531,12533,12536],{"class":386,"line":4562},[384,12518,3283],{"class":390},[384,12520,9013],{"class":394},[384,12522,150],{"class":405},[384,12524,12365],{"class":8939},[384,12526,426],{"class":405},[384,12528,429],{"class":8939},[384,12530,586],{"class":405},[384,12532,9821],{"class":405},[384,12534,12535],{"class":394}," LEEG",[384,12537,813],{"class":405},[384,12539,12540,12542,12544,12546],{"class":386,"line":4581},[384,12541,10775],{"class":390},[384,12543,5546],{"class":405},[384,12545,269],{"class":459},[384,12547,12548],{"class":827},"  # leeg vakje: sleutel bestaat niet\n",[384,12550,12551,12553,12555,12557,12559,12561,12563,12565,12567,12569],{"class":386,"line":5021},[384,12552,3283],{"class":390},[384,12554,9013],{"class":394},[384,12556,150],{"class":405},[384,12558,12365],{"class":8939},[384,12560,426],{"class":405},[384,12562,429],{"class":8939},[384,12564,586],{"class":405},[384,12566,589],{"class":405},[384,12568,2872],{"class":394},[384,12570,813],{"class":405},[384,12572,12573,12575],{"class":386,"line":5030},[384,12574,10775],{"class":390},[384,12576,5485],{"class":394},[384,12578,12579,12581,12583],{"class":386,"line":9395},[384,12580,1651],{"class":390},[384,12582,5546],{"class":405},[384,12584,7805],{"class":459},[384,12586,12587],{"class":386,"line":9409},[384,12588,1703],{"emptyLinePlaceholder":1702},[384,12590,12591,12593,12596,12598,12600,12602,12604],{"class":386,"line":9414},[384,12592,8918],{"class":450},[384,12594,12595],{"class":401}," voeg_toe",[384,12597,406],{"class":405},[384,12599,8927],{"class":8926},[384,12601,568],{"class":405},[384,12603,2872],{"class":1620},[384,12605,411],{"class":405},[384,12607,12608,12610,12612,12614,12617,12619,12621,12623,12625,12627,12629],{"class":386,"line":9972},[384,12609,577],{"class":390},[384,12611,9013],{"class":394},[384,12613,150],{"class":405},[384,12615,12616],{"class":401},"zoek",[384,12618,406],{"class":405},[384,12620,2487],{"class":401},[384,12622,863],{"class":405},[384,12624,10762],{"class":405},[384,12626,5546],{"class":405},[384,12628,269],{"class":459},[384,12630,813],{"class":405},[384,12632,12633,12635],{"class":386,"line":9990},[384,12634,6483],{"class":390},[384,12636,12637],{"class":827},"  # al aanwezig\n",[384,12639,12640,12642,12644,12646,12648,12650,12652,12654,12656],{"class":386,"line":10004},[384,12641,3262],{"class":390},[384,12643,395],{"class":394},[384,12645,398],{"class":390},[384,12647,9013],{"class":394},[384,12649,150],{"class":405},[384,12651,12508],{"class":401},[384,12653,406],{"class":405},[384,12655,2487],{"class":401},[384,12657,411],{"class":405},[384,12659,12660,12662,12664,12666,12668,12670,12672,12674,12676,12679,12681,12683,12685,12687,12689,12691,12693,12695,12698],{"class":386,"line":10299},[384,12661,3283],{"class":390},[384,12663,9013],{"class":394},[384,12665,150],{"class":405},[384,12667,12365],{"class":8939},[384,12669,426],{"class":405},[384,12671,429],{"class":8939},[384,12673,586],{"class":405},[384,12675,9821],{"class":405},[384,12677,12678],{"class":394}," LEEG ",[384,12680,10750],{"class":405},[384,12682,9013],{"class":394},[384,12684,150],{"class":405},[384,12686,12365],{"class":8939},[384,12688,426],{"class":405},[384,12690,429],{"class":8939},[384,12692,586],{"class":405},[384,12694,589],{"class":405},[384,12696,12697],{"class":394}," WEG",[384,12699,813],{"class":405},[384,12701,12702,12705,12707,12709,12711,12713,12715,12717],{"class":386,"line":10316},[384,12703,12704],{"class":394},"                self",[384,12706,150],{"class":405},[384,12708,12365],{"class":8939},[384,12710,426],{"class":405},[384,12712,429],{"class":8939},[384,12714,586],{"class":405},[384,12716,2769],{"class":405},[384,12718,12719],{"class":394}," k\n",[384,12721,12722],{"class":386,"line":10332},[384,12723,12724],{"class":390},"                return\n",[384,12726,12727,12730,12733,12735,12737,12740,12742],{"class":386,"line":10350},[384,12728,12729],{"class":390},"        raise",[384,12731,12732],{"class":8910}," OverflowError",[384,12734,406],{"class":405},[384,12736,9032],{"class":405},[384,12738,12739],{"class":9035},"tabel is vol",[384,12741,9032],{"class":405},[384,12743,3219],{"class":405},[384,12745,12746],{"class":386,"line":10360},[384,12747,1703],{"emptyLinePlaceholder":1702},[384,12749,12750,12752,12755,12757,12759,12761,12763],{"class":386,"line":10365},[384,12751,8918],{"class":450},[384,12753,12754],{"class":401}," verwijder",[384,12756,406],{"class":405},[384,12758,8927],{"class":8926},[384,12760,568],{"class":405},[384,12762,2872],{"class":1620},[384,12764,411],{"class":405},[384,12766,12767,12770,12772,12774,12776,12778,12780,12782],{"class":386,"line":10374},[384,12768,12769],{"class":394},"        i ",[384,12771,456],{"class":405},[384,12773,9013],{"class":394},[384,12775,150],{"class":405},[384,12777,12616],{"class":401},[384,12779,406],{"class":405},[384,12781,2487],{"class":401},[384,12783,3219],{"class":405},[384,12785,12786,12788,12790,12793,12795,12797],{"class":386,"line":10379},[384,12787,577],{"class":390},[384,12789,395],{"class":394},[384,12791,12792],{"class":405},"!=",[384,12794,5546],{"class":405},[384,12796,269],{"class":459},[384,12798,813],{"class":405},[384,12800,12802,12804,12806,12808,12810,12812,12814,12816,12819],{"class":386,"line":12801},36,[384,12803,9832],{"class":394},[384,12805,150],{"class":405},[384,12807,12365],{"class":8939},[384,12809,426],{"class":405},[384,12811,429],{"class":8939},[384,12813,586],{"class":405},[384,12815,2769],{"class":405},[384,12817,12818],{"class":394}," WEG  ",[384,12820,12821],{"class":827},"# niet LEEG, anders breekt de zoekketen\n",[384,12823,12825],{"class":386,"line":12824},37,[384,12826,1703],{"emptyLinePlaceholder":1702},[384,12828,12830],{"class":386,"line":12829},38,[384,12831,1703],{"emptyLinePlaceholder":1702},[384,12833,12835,12838,12840,12842,12844,12846],{"class":386,"line":12834},39,[384,12836,12837],{"class":394},"t ",[384,12839,456],{"class":405},[384,12841,12324],{"class":401},[384,12843,406],{"class":405},[384,12845,4251],{"class":459},[384,12847,3219],{"class":405},[384,12849,12851,12853,12855,12857,12859,12861,12863,12866,12868,12871,12873,12876,12878,12881,12883,12886],{"class":386,"line":12850},40,[384,12852,391],{"class":390},[384,12854,2668],{"class":394},[384,12856,398],{"class":390},[384,12858,12370],{"class":405},[384,12860,11555],{"class":459},[384,12862,568],{"class":405},[384,12864,12865],{"class":459}," 11",[384,12867,568],{"class":405},[384,12869,12870],{"class":459}," 27",[384,12872,568],{"class":405},[384,12874,12875],{"class":459}," 8",[384,12877,568],{"class":405},[384,12879,12880],{"class":459}," 20",[384,12882,568],{"class":405},[384,12884,12885],{"class":459}," 34",[384,12887,599],{"class":405},[384,12889,12891,12894,12896,12899,12901,12903],{"class":386,"line":12890},41,[384,12892,12893],{"class":394},"    t",[384,12895,150],{"class":405},[384,12897,12898],{"class":401},"voeg_toe",[384,12900,406],{"class":405},[384,12902,2487],{"class":401},[384,12904,3219],{"class":405},[384,12906,12908,12910,12912,12914,12916,12918,12920,12923,12925,12927,12930,12932,12934,12936,12938,12941,12943,12945],{"class":386,"line":12907},42,[384,12909,1708],{"class":401},[384,12911,1716],{"class":405},[384,12913,9032],{"class":405},[384,12915,1677],{"class":9035},[384,12917,9032],{"class":405},[384,12919,7384],{"class":390},[384,12921,12922],{"class":401}," v ",[384,12924,5525],{"class":405},[384,12926,12678],{"class":401},[384,12928,12929],{"class":390},"else",[384,12931,12922],{"class":401},[384,12933,391],{"class":390},[384,12935,12922],{"class":401},[384,12937,398],{"class":390},[384,12939,12940],{"class":401}," t",[384,12942,150],{"class":405},[384,12944,12365],{"class":8939},[384,12946,4373],{"class":405},[384,12948,12950],{"class":386,"line":12949},43,[384,12951,12952],{"class":827},"# [20, 15, 8, 34, 11, '-', 27]\n",[372,12954,12955],{"v-slot:java":374},[376,12956,12958],{"className":437,"code":12957,"language":439,"meta":374,"style":374},"import java.util.Arrays;\n\nstatic class HashTabel {\n    private static final int LEEG = Integer.MIN_VALUE;\n    private static final int WEG = Integer.MIN_VALUE + 1; \u002F\u002F tombstone\n    private final int m;\n    private final int[] vakjes;\n\n    HashTabel(int m) {\n        this.m = m;\n        this.vakjes = new int[m];\n        Arrays.fill(vakjes, LEEG);\n    }\n\n    private int h(int k) {\n        return Math.floorMod(k, m); \u002F\u002F ook correct voor negatieve sleutels\n    }\n\n    int zoek(int k) {\n        for (int stap = 0; stap \u003C m; stap++) {\n            int i = (h(k) + stap) % m;\n            if (vakjes[i] == LEEG) return -1; \u002F\u002F leeg vakje: sleutel bestaat niet\n            if (vakjes[i] == k) return i;\n        }\n        return -1;\n    }\n\n    void voegToe(int k) {\n        if (zoek(k) != -1) return; \u002F\u002F al aanwezig\n        for (int stap = 0; stap \u003C m; stap++) {\n            int i = (h(k) + stap) % m;\n            if (vakjes[i] == LEEG || vakjes[i] == WEG) {\n                vakjes[i] = k;\n                return;\n            }\n        }\n        throw new IllegalStateException(\"tabel is vol\");\n    }\n\n    void verwijder(int k) {\n        int i = zoek(k);\n        if (i != -1) vakjes[i] = WEG; \u002F\u002F niet LEEG, anders breekt de zoekketen\n    }\n}\n",[47,12959,12960,12976,12980,12990,13014,13045,13057,13072,13076,13091,13105,13124,13144,13148,13152,13171,13196,13200,13204,13220,13250,13281,13313,13339,13343,13353,13357,13361,13378,13407,13437,13467,13504,13521,13527,13531,13535,13554,13558,13562,13578,13594,13627,13631],{"__ignoreMap":374},[384,12961,12962,12964,12966,12968,12970,12972,12974],{"class":386,"line":387},[384,12963,9141],{"class":459},[384,12965,9144],{"class":450},[384,12967,150],{"class":405},[384,12969,4694],{"class":450},[384,12971,150],{"class":405},[384,12973,4699],{"class":450},[384,12975,848],{"class":405},[384,12977,12978],{"class":386,"line":414},[384,12979,1703],{"emptyLinePlaceholder":1702},[384,12981,12982,12984,12986,12988],{"class":386,"line":500},[384,12983,1756],{"class":450},[384,12985,10034],{"class":450},[384,12987,12324],{"class":8910},[384,12989,482],{"class":405},[384,12991,12992,12994,12996,12998,13000,13002,13004,13007,13009,13012],{"class":386,"line":602},[384,12993,9171],{"class":450},[384,12995,10031],{"class":450},[384,12997,9174],{"class":450},[384,12999,1759],{"class":450},[384,13001,12678],{"class":394},[384,13003,456],{"class":405},[384,13005,13006],{"class":394}," Integer",[384,13008,150],{"class":405},[384,13010,13011],{"class":394},"MIN_VALUE",[384,13013,848],{"class":405},[384,13015,13016,13018,13020,13022,13024,13027,13029,13031,13033,13036,13038,13040,13042],{"class":386,"line":721},[384,13017,9171],{"class":450},[384,13019,10031],{"class":450},[384,13021,9174],{"class":450},[384,13023,1759],{"class":450},[384,13025,13026],{"class":394}," WEG ",[384,13028,456],{"class":405},[384,13030,13006],{"class":394},[384,13032,150],{"class":405},[384,13034,13035],{"class":394},"MIN_VALUE ",[384,13037,562],{"class":405},[384,13039,565],{"class":459},[384,13041,463],{"class":405},[384,13043,13044],{"class":827}," \u002F\u002F tombstone\n",[384,13046,13047,13049,13051,13053,13055],{"class":386,"line":727},[384,13048,9171],{"class":450},[384,13050,9174],{"class":450},[384,13052,1759],{"class":450},[384,13054,12341],{"class":394},[384,13056,848],{"class":405},[384,13058,13059,13061,13063,13065,13067,13070],{"class":386,"line":733},[384,13060,9171],{"class":450},[384,13062,9174],{"class":450},[384,13064,1759],{"class":450},[384,13066,1768],{"class":405},[384,13068,13069],{"class":394}," vakjes",[384,13071,848],{"class":405},[384,13073,13074],{"class":386,"line":1299},[384,13075,1703],{"emptyLinePlaceholder":1702},[384,13077,13078,13081,13083,13085,13087,13089],{"class":386,"line":2790},[384,13079,13080],{"class":401},"    HashTabel",[384,13082,406],{"class":405},[384,13084,451],{"class":450},[384,13086,12341],{"class":1620},[384,13088,863],{"class":405},[384,13090,482],{"class":405},[384,13092,13093,13096,13099,13101,13103],{"class":386,"line":2985},[384,13094,13095],{"class":405},"        this.",[384,13097,13098],{"class":394},"m ",[384,13100,456],{"class":405},[384,13102,12341],{"class":394},[384,13104,848],{"class":405},[384,13106,13107,13109,13112,13114,13116,13118,13120,13122],{"class":386,"line":3009},[384,13108,13095],{"class":405},[384,13110,13111],{"class":394},"vakjes ",[384,13113,456],{"class":405},[384,13115,4786],{"class":390},[384,13117,1759],{"class":450},[384,13119,426],{"class":405},[384,13121,3301],{"class":394},[384,13123,497],{"class":405},[384,13125,13126,13129,13131,13134,13136,13138,13140,13142],{"class":386,"line":3014},[384,13127,13128],{"class":394},"        Arrays",[384,13130,150],{"class":405},[384,13132,13133],{"class":401},"fill",[384,13135,406],{"class":405},[384,13137,12365],{"class":394},[384,13139,568],{"class":405},[384,13141,12535],{"class":394},[384,13143,5962],{"class":405},[384,13145,13146],{"class":386,"line":3563},[384,13147,730],{"class":405},[384,13149,13150],{"class":386,"line":3588},[384,13151,1703],{"emptyLinePlaceholder":1702},[384,13153,13154,13156,13158,13161,13163,13165,13167,13169],{"class":386,"line":3606},[384,13155,9171],{"class":450},[384,13157,1759],{"class":450},[384,13159,13160],{"class":401}," h",[384,13162,406],{"class":405},[384,13164,451],{"class":450},[384,13166,2872],{"class":1620},[384,13168,863],{"class":405},[384,13170,482],{"class":405},[384,13172,13173,13175,13178,13180,13183,13185,13187,13189,13191,13193],{"class":386,"line":3611},[384,13174,1651],{"class":390},[384,13176,13177],{"class":394}," Math",[384,13179,150],{"class":405},[384,13181,13182],{"class":401},"floorMod",[384,13184,406],{"class":405},[384,13186,2487],{"class":394},[384,13188,568],{"class":405},[384,13190,12341],{"class":394},[384,13192,9234],{"class":405},[384,13194,13195],{"class":827}," \u002F\u002F ook correct voor negatieve sleutels\n",[384,13197,13198],{"class":386,"line":4541},[384,13199,730],{"class":405},[384,13201,13202],{"class":386,"line":4562},[384,13203,1703],{"emptyLinePlaceholder":1702},[384,13205,13206,13208,13210,13212,13214,13216,13218],{"class":386,"line":4581},[384,13207,1417],{"class":450},[384,13209,12483],{"class":401},[384,13211,406],{"class":405},[384,13213,451],{"class":450},[384,13215,2872],{"class":1620},[384,13217,863],{"class":405},[384,13219,482],{"class":405},[384,13221,13222,13224,13226,13228,13230,13232,13234,13236,13238,13240,13242,13244,13246,13248],{"class":386,"line":5021},[384,13223,3262],{"class":390},[384,13225,18],{"class":405},[384,13227,451],{"class":450},[384,13229,12432],{"class":394},[384,13231,456],{"class":405},[384,13233,460],{"class":459},[384,13235,463],{"class":405},[384,13237,12432],{"class":394},[384,13239,468],{"class":405},[384,13241,12341],{"class":394},[384,13243,463],{"class":405},[384,13245,12461],{"class":394},[384,13247,479],{"class":405},[384,13249,482],{"class":405},[384,13251,13252,13254,13256,13258,13260,13263,13265,13267,13269,13271,13273,13275,13277,13279],{"class":386,"line":5030},[384,13253,5762],{"class":450},[384,13255,395],{"class":394},[384,13257,456],{"class":405},[384,13259,18],{"class":405},[384,13261,13262],{"class":401},"h",[384,13264,406],{"class":405},[384,13266,2487],{"class":394},[384,13268,863],{"class":405},[384,13270,1684],{"class":405},[384,13272,12461],{"class":394},[384,13274,863],{"class":405},[384,13276,12466],{"class":405},[384,13278,12341],{"class":394},[384,13280,848],{"class":405},[384,13282,13283,13285,13287,13289,13291,13293,13295,13297,13299,13301,13304,13306,13308,13310],{"class":386,"line":9395},[384,13284,3283],{"class":390},[384,13286,18],{"class":405},[384,13288,12365],{"class":394},[384,13290,426],{"class":405},[384,13292,429],{"class":394},[384,13294,586],{"class":405},[384,13296,589],{"class":405},[384,13298,12535],{"class":394},[384,13300,863],{"class":405},[384,13302,13303],{"class":390}," return",[384,13305,5546],{"class":405},[384,13307,269],{"class":459},[384,13309,463],{"class":405},[384,13311,13312],{"class":827}," \u002F\u002F leeg vakje: sleutel bestaat niet\n",[384,13314,13315,13317,13319,13321,13323,13325,13327,13329,13331,13333,13335,13337],{"class":386,"line":9409},[384,13316,3283],{"class":390},[384,13318,18],{"class":405},[384,13320,12365],{"class":394},[384,13322,426],{"class":405},[384,13324,429],{"class":394},[384,13326,586],{"class":405},[384,13328,589],{"class":405},[384,13330,2872],{"class":394},[384,13332,863],{"class":405},[384,13334,13303],{"class":390},[384,13336,476],{"class":394},[384,13338,848],{"class":405},[384,13340,13341],{"class":386,"line":9414},[384,13342,724],{"class":405},[384,13344,13345,13347,13349,13351],{"class":386,"line":9972},[384,13346,1651],{"class":390},[384,13348,5546],{"class":405},[384,13350,269],{"class":459},[384,13352,848],{"class":405},[384,13354,13355],{"class":386,"line":9990},[384,13356,730],{"class":405},[384,13358,13359],{"class":386,"line":10004},[384,13360,1703],{"emptyLinePlaceholder":1702},[384,13362,13363,13365,13368,13370,13372,13374,13376],{"class":386,"line":10299},[384,13364,9205],{"class":450},[384,13366,13367],{"class":401}," voegToe",[384,13369,406],{"class":405},[384,13371,451],{"class":450},[384,13373,2872],{"class":1620},[384,13375,863],{"class":405},[384,13377,482],{"class":405},[384,13379,13380,13382,13384,13386,13388,13390,13392,13394,13396,13398,13400,13402,13404],{"class":386,"line":10316},[384,13381,577],{"class":390},[384,13383,18],{"class":405},[384,13385,12616],{"class":401},[384,13387,406],{"class":405},[384,13389,2487],{"class":394},[384,13391,863],{"class":405},[384,13393,10762],{"class":405},[384,13395,5546],{"class":405},[384,13397,269],{"class":459},[384,13399,863],{"class":405},[384,13401,13303],{"class":390},[384,13403,463],{"class":405},[384,13405,13406],{"class":827}," \u002F\u002F al aanwezig\n",[384,13408,13409,13411,13413,13415,13417,13419,13421,13423,13425,13427,13429,13431,13433,13435],{"class":386,"line":10332},[384,13410,3262],{"class":390},[384,13412,18],{"class":405},[384,13414,451],{"class":450},[384,13416,12432],{"class":394},[384,13418,456],{"class":405},[384,13420,460],{"class":459},[384,13422,463],{"class":405},[384,13424,12432],{"class":394},[384,13426,468],{"class":405},[384,13428,12341],{"class":394},[384,13430,463],{"class":405},[384,13432,12461],{"class":394},[384,13434,479],{"class":405},[384,13436,482],{"class":405},[384,13438,13439,13441,13443,13445,13447,13449,13451,13453,13455,13457,13459,13461,13463,13465],{"class":386,"line":10350},[384,13440,5762],{"class":450},[384,13442,395],{"class":394},[384,13444,456],{"class":405},[384,13446,18],{"class":405},[384,13448,13262],{"class":401},[384,13450,406],{"class":405},[384,13452,2487],{"class":394},[384,13454,863],{"class":405},[384,13456,1684],{"class":405},[384,13458,12461],{"class":394},[384,13460,863],{"class":405},[384,13462,12466],{"class":405},[384,13464,12341],{"class":394},[384,13466,848],{"class":405},[384,13468,13469,13471,13473,13475,13477,13479,13481,13483,13485,13488,13490,13492,13494,13496,13498,13500,13502],{"class":386,"line":10360},[384,13470,3283],{"class":390},[384,13472,18],{"class":405},[384,13474,12365],{"class":394},[384,13476,426],{"class":405},[384,13478,429],{"class":394},[384,13480,586],{"class":405},[384,13482,589],{"class":405},[384,13484,12678],{"class":394},[384,13486,13487],{"class":405},"||",[384,13489,13069],{"class":394},[384,13491,426],{"class":405},[384,13493,429],{"class":394},[384,13495,586],{"class":405},[384,13497,589],{"class":405},[384,13499,12697],{"class":394},[384,13501,863],{"class":405},[384,13503,482],{"class":405},[384,13505,13506,13509,13511,13513,13515,13517,13519],{"class":386,"line":10365},[384,13507,13508],{"class":394},"                vakjes",[384,13510,426],{"class":405},[384,13512,429],{"class":394},[384,13514,586],{"class":405},[384,13516,2769],{"class":405},[384,13518,2872],{"class":394},[384,13520,848],{"class":405},[384,13522,13523,13525],{"class":386,"line":10374},[384,13524,10775],{"class":390},[384,13526,848],{"class":405},[384,13528,13529],{"class":386,"line":10379},[384,13530,3530],{"class":405},[384,13532,13533],{"class":386,"line":12801},[384,13534,724],{"class":405},[384,13536,13537,13540,13542,13544,13546,13548,13550,13552],{"class":386,"line":12824},[384,13538,13539],{"class":390},"        throw",[384,13541,4786],{"class":390},[384,13543,9284],{"class":401},[384,13545,406],{"class":405},[384,13547,9032],{"class":405},[384,13549,12739],{"class":9035},[384,13551,9032],{"class":405},[384,13553,5962],{"class":405},[384,13555,13556],{"class":386,"line":12829},[384,13557,730],{"class":405},[384,13559,13560],{"class":386,"line":12834},[384,13561,1703],{"emptyLinePlaceholder":1702},[384,13563,13564,13566,13568,13570,13572,13574,13576],{"class":386,"line":12850},[384,13565,9205],{"class":450},[384,13567,12754],{"class":401},[384,13569,406],{"class":405},[384,13571,451],{"class":450},[384,13573,2872],{"class":1620},[384,13575,863],{"class":405},[384,13577,482],{"class":405},[384,13579,13580,13582,13584,13586,13588,13590,13592],{"class":386,"line":12890},[384,13581,2881],{"class":450},[384,13583,395],{"class":394},[384,13585,456],{"class":405},[384,13587,12483],{"class":401},[384,13589,406],{"class":405},[384,13591,2487],{"class":394},[384,13593,5962],{"class":405},[384,13595,13596,13598,13600,13602,13604,13606,13608,13610,13612,13614,13616,13618,13620,13622,13624],{"class":386,"line":12907},[384,13597,577],{"class":390},[384,13599,18],{"class":405},[384,13601,559],{"class":394},[384,13603,12792],{"class":405},[384,13605,5546],{"class":405},[384,13607,269],{"class":459},[384,13609,863],{"class":405},[384,13611,13069],{"class":394},[384,13613,426],{"class":405},[384,13615,429],{"class":394},[384,13617,586],{"class":405},[384,13619,2769],{"class":405},[384,13621,12697],{"class":394},[384,13623,463],{"class":405},[384,13625,13626],{"class":827}," \u002F\u002F niet LEEG, anders breekt de zoekketen\n",[384,13628,13629],{"class":386,"line":12949},[384,13630,730],{"class":405},[384,13632,13634],{"class":386,"line":13633},44,[384,13635,503],{"class":405},[11,13637,13638,13639,13642,13643,13645,13646,188,13648,13650,13651,6672,13654,13657,13658,150],{},"In Python geeft ",[47,13640,13641],{},"k % m"," voor een negatieve ",[47,13644,2487],{}," altijd een uitkomst tussen ",[47,13647,2048],{},[47,13649,11573],{},". In Java is\n",[47,13652,13653],{},"-3 % 7",[47,13655,13656],{},"-3","; daarom gebruikt de Java-versie ",[47,13659,13660],{},"Math.floorMod",[39,13662,13664],{"id":13663},"in-de-praktijk-python-dict-en-java-hashmap","In de praktijk: Python dict en Java HashMap",[11,13666,13667],{},"Je schrijft zelden je eigen hashtabel, maar je gebruikt er dagelijks een.",[56,13669,13670,13684],{},[59,13671,13672,13680,13681,13683],{},[15,13673,13674,13675,188,13677],{},"Python ",[47,13676,11517],{},[47,13678,13679],{},"set"," gebruiken open adressering, maar niet met ",[47,13682,11767],{},": de volgende plek wordt\nberekend uit meer bits van de hash, zodat clusters minder snel ontstaan. De tabel groeit zodra hij\nvoor ongeveer twee derde gevuld is.",[59,13685,13686,13691,13692,13695,13696,13698],{},[15,13687,13688,13689],{},"Java ",[47,13690,11521],{}," gebruikt chaining. De standaard maximale load factor is ",[47,13693,13694],{},"0,75","; daarboven\nverdubbelt de tabel. Wordt één lijst langer dan acht elementen (en is de tabel groot genoeg), dan\nmaakt Java er een gebalanceerde boom van, zodat ook het slechtste geval ",[47,13697,214],{}," blijft.",[11,13700,13701,13702,1057,13705,13708,13709,13711,13712,13715],{},"Voor objecten als sleutel roepen beide ",[47,13703,13704],{},"hash()",[47,13706,13707],{},"hashCode()"," aan. Daarom moet je in Java\n",[47,13710,13707],{}," overschrijven als je ",[47,13713,13714],{},"equals()"," overschrijft: twee gelijke objecten moeten in hetzelfde\nvakje uitkomen, anders vindt de map ze niet terug.",[11,13717,13718,13719,13721,13722,13724,13725,13727,13728,13730,13731,8476],{},"Het opzoeken van een sleutel in een ",[47,13720,11517],{}," is dus geen lineair zoeken zoals in\n",[28,13723,8449],{"href":283},", maar een berekening. Dat maakt het verschil tussen een ",[47,13726,108],{},"- en een\n",[47,13729,119],{},"-oplossing bij veel sollicitatievragen (zie ",[28,13732,2398],{"href":2421},[39,13734,17],{"id":2398},[226,13736,13737,13748],{},[229,13738,13739],{},[232,13740,13741,13743,13745],{},[235,13742,8546],{},[235,13744,6079],{},[235,13746,13747],{},"Slechtste geval",[248,13749,13750,13762,13776,13788,13800],{},[232,13751,13752,13754,13758],{},[253,13753,11988],{},[253,13755,13756],{},[47,13757,210],{},[253,13759,13760],{},[47,13761,119],{},[232,13763,13764,13767,13772],{},[253,13765,13766],{},"Invoegen",[253,13768,13769,13771],{},[47,13770,210],{}," (amortized)",[253,13773,13774],{},[47,13775,119],{},[232,13777,13778,13780,13784],{},[253,13779,12045],{},[253,13781,13782],{},[47,13783,210],{},[253,13785,13786],{},[47,13787,119],{},[232,13789,13790,13793,13796],{},[253,13791,13792],{},"Rehashen",[253,13794,13795],{},"—",[253,13797,13798],{},[47,13799,119],{},[232,13801,13802,13805,13809],{},[253,13803,13804],{},"Geheugen",[253,13806,13807],{},[47,13808,119],{},[253,13810,13811],{},[47,13812,119],{},[11,13814,13815],{},"Het slechtste geval treedt op als (bijna) alle sleutels dezelfde hashwaarde krijgen: dan heb je één\nlange lijst (chaining) of één lang cluster (probing), en ben je terug bij lineair zoeken. Met een\ngoede hashfunctie en een lage load factor is dat in de praktijk zeldzaam.",[39,13817,2248],{"id":2247},[129,13819,13820,13834,13843,13857,13863],{},[59,13821,13822,13825,13826,13828,13829,13831,13832,150],{},[15,13823,13824],{},"Wrap-around vergeten."," Valt een sleutel bij ",[47,13827,11551],{}," op vakje 6 en dat is bezet, dan is de\nvolgende poging vakje ",[47,13830,2048],{},", niet vakje ",[47,13833,4251],{},[59,13835,13836,13839,13840,13842],{},[15,13837,13838],{},"Stoppen bij het eerste bezette vakje tijdens zoeken."," Je stopt pas bij de sleutel zelf of bij\neen ",[15,13841,10555],{}," vakje. Een bezet vakje met een andere sleutel betekent: doorzoeken.",[59,13844,13845,13848,13849,13851,13852,2289,13854,150],{},[15,13846,13847],{},"Bij chaining vooraan invoegen."," In onze conventie komt een nieuwe sleutel ",[15,13850,8701],{}," de lijst:\n",[47,13853,11745],{},[47,13855,13856],{},"34 → 20 → 27",[59,13858,13859,13862],{},[15,13860,13861],{},"Een verwijderd vakje leeg maken bij linear probing."," Daarmee knip je zoekketens door. Gebruik\neen tombstone.",[59,13864,13865,13868,13869,150],{},[15,13866,13867],{},"Bij rehashen de oude posities kopiëren."," Na het vergroten moet je elke sleutel opnieuw hashen\nmet de nieuwe ",[47,13870,3301],{},[39,13872,2316],{"id":2315},[56,13874,13875,13884,13887,13890,13897],{},[59,13876,13877,13878,13881,13882,150],{},"Een hashtabel berekent de plek van een sleutel met ",[47,13879,13880],{},"h(k) = k mod m","; zoeken en invoegen kosten\ngemiddeld ",[47,13883,210],{},[59,13885,13886],{},"Botsingen los je op met chaining (lijst per vakje, achteraan toevoegen) of linear probing\n(volgende vakje, met wrap-around).",[59,13888,13889],{},"Bij linear probing stopt zoeken pas bij de sleutel of een leeg vakje; verwijderen gaat met een\ntombstone.",[59,13891,13892,13893,13896],{},"Houd de load factor ",[47,13894,13895],{},"α = n\u002Fm"," laag; wordt hij te hoog, dan rehash je naar een grotere tabel.",[59,13898,13899,13900,13902],{},"Slechtste geval is ",[47,13901,119],{},", als alle sleutels op dezelfde plek uitkomen.",[2371,13904,13905],{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":374,"searchDepth":414,"depth":414,"links":13907},[13908,13909,13913,13914,13915,13916,13917,13918,13919],{"id":11528,"depth":414,"text":11529},{"id":11592,"depth":414,"text":11593,"children":13910},[13911,13912],{"id":11614,"depth":500,"text":11615},{"id":11754,"depth":500,"text":11755},{"id":11982,"depth":414,"text":11983},{"id":12115,"depth":414,"text":12116},{"id":12271,"depth":414,"text":12272},{"id":13663,"depth":414,"text":13664},{"id":2398,"depth":414,"text":17},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Hoe werkt een hashtabel? Leer hashfuncties, botsingen, chaining en linear probing stap voor stap, plus load factor, rehashen en code in Python en Java.","i-lucide-hash",{},"\u002Fpracticely-dsa\u002Fhashtabellen",{"title":11501,"description":13920},"practicely-dsa\u002Fhashtabellen","hashtabellen","EsIg57LVwl5TrF3wO864vy4tqQTkxKMgwpo2Nn07vnU",{"id":13929,"title":13930,"body":13931,"description":16751,"extension":2392,"icon":16752,"meta":16753,"navigation":1702,"order":727,"path":16754,"seo":16755,"stem":16756,"topic":16757,"__hash__":16758},"practicelyDsa\u002Fpracticely-dsa\u002Fheaps.md","Heaps uitgelegd: binaire heap, sift-up, sift-down en priority queues",{"type":8,"value":13932,"toc":16739},[13933,13946,13953,13957,13960,13978,13984,13987,14037,14044,14050,14063,14067,14070,14085,14092,14225,14236,14240,14243,14268,14274,14359,14366,14380,14383,15867,15871,15890,15900,15961,15969,15973,15987,15991,15994,16534,16567,16569,16638,16640,16691,16693,16736],[11,13934,13935,13936,13938,13939,13942,13943,13945],{},"Een hoop (",[20,13937,11223],{},") is een datastructuur die maar één ding heel goed doet: steeds het kleinste (of\ngrootste) element snel teruggeven. Daarmee is hij de motor achter elke prioriteitswachtrij\n(",[20,13940,13941],{},"priority queue","): de taakplanner van een besturingssysteem, het algoritme van Dijkstra\n(zie ",[28,13944,36],{"href":35},") en \"geef me de tien grootste waarden uit een miljoen\".",[11,13947,13948,13949,13952],{},"Op het tentamen krijg je bijna altijd een trace-opgave: \"voeg deze getallen in, hoe ziet de array\neruit?\" In sollicitaties is \"gebruik een heap\" het standaardantwoord op top-k-vragen. Op deze pagina\nwerken we met een ",[15,13950,13951],{},"min-heap",": het kleinste element staat bovenaan.",[39,13954,13956],{"id":13955},"een-volledige-boom-in-een-array","Een volledige boom in een array",[11,13958,13959],{},"Een binaire heap is een binaire boom met twee eigenschappen:",[129,13961,13962,13972],{},[59,13963,13964,13967,13968,13971],{},[15,13965,13966],{},"Vorm:"," de boom is volledig (",[20,13969,13970],{},"complete","). Alle niveaus zijn vol, behalve misschien het onderste,\nen dat wordt van links naar rechts gevuld.",[59,13973,13974,13977],{},[15,13975,13976],{},"Heap-eigenschap:"," elke ouder is kleiner dan of gelijk aan zijn kinderen. De wortel is dus\naltijd het minimum.",[11,13979,13980,13981,13983],{},"Let op: tussen broers of tussen verschillende takken geldt ",[15,13982,8244],{}," volgorde. Een heap is niet\ngesorteerd.",[11,13985,13986],{},"Omdat de boom volledig is, hoef je geen pointers op te slaan. Je zet de knopen niveau voor niveau in\neen array (0-geïndexeerd), en rekent de familie uit:",[226,13988,13989,13999],{},[229,13990,13991],{},[232,13992,13993,13996],{},[235,13994,13995],{},"Gezocht",[235,13997,13998],{},"Formule",[248,14000,14001,14013,14025],{},[232,14002,14003,14008],{},[253,14004,14005,14006],{},"ouder van ",[47,14007,429],{},[253,14009,14010],{},[47,14011,14012],{},"⌊(i - 1) \u002F 2⌋",[232,14014,14015,14020],{},[253,14016,14017,14018],{},"linkerkind van ",[47,14019,429],{},[253,14021,14022],{},[47,14023,14024],{},"2i + 1",[232,14026,14027,14032],{},[253,14028,14029,14030],{},"rechterkind van ",[47,14031,429],{},[253,14033,14034],{},[47,14035,14036],{},"2i + 2",[11,14038,14039,14040,14043],{},"Voorbeeld: de array ",[47,14041,14042],{},"[1, 6, 2, 10, 13, 3, 5]"," is deze boom:",[376,14045,14048],{"className":14046,"code":14047,"language":5073},[5071],"            1          index 0\n         \u002F     \\\n        6       2      index 1, 2\n       \u002F \\     \u002F \\\n     10   13  3   5    index 3, 4, 5, 6\n",[47,14049,14047],{"__ignoreMap":374},[11,14051,14052,14053,14055,14056,14059,14060,14062],{},"Het kind op index 4 (",[47,14054,12035],{},") heeft als ouder ",[47,14057,14058],{},"⌊(4 - 1) \u002F 2⌋ = 1",", en dat is ",[47,14061,2603],{},". Klopt.",[39,14064,14066],{"id":14065},"invoegen-met-sift-up","Invoegen met sift-up",[11,14068,14069],{},"Invoegen gaat in twee stappen:",[129,14071,14072,14078],{},[59,14073,14074,14075,14077],{},"Zet het nieuwe element ",[15,14076,8701],{}," de array (de eerste vrije plek in de boom).",[59,14079,14080,14081,14084],{},"Laat het omhoog zakken (",[20,14082,14083],{},"sift-up","): zolang het kleiner is dan zijn ouder, wissel je ze om.",[11,14086,14087,14088,14091],{},"We voegen ",[47,14089,14090],{},"3, 6, 2, 10, 13, 1, 5"," in een lege min-heap in:",[226,14093,14094,14104],{},[229,14095,14096],{},[232,14097,14098,14100,14102],{},[235,14099,4147],{},[235,14101,5113],{},[235,14103,5119],{},[248,14105,14106,14118,14130,14142,14154,14166,14178,14190,14202,14214],{},[232,14107,14108,14110,14113],{},[253,14109,269],{},[253,14111,14112],{},"voeg 3 toe",[253,14114,14115],{},[47,14116,14117],{},"[3]",[232,14119,14120,14122,14125],{},[253,14121,1952],{},[253,14123,14124],{},"voeg 6 toe, 6 > 3: klaar",[253,14126,14127],{},[47,14128,14129],{},"[3, 6]",[232,14131,14132,14134,14137],{},[253,14133,1970],{},[253,14135,14136],{},"voeg 2 toe",[253,14138,14139],{},[47,14140,14141],{},"[3, 6, 2]",[232,14143,14144,14146,14149],{},[253,14145],{},[253,14147,14148],{},"2 \u003C ouder 3: wissel",[253,14150,14151],{},[47,14152,14153],{},"[2, 6, 3]",[232,14155,14156,14158,14161],{},[253,14157,1044],{},[253,14159,14160],{},"voeg 10 toe, 10 > 6: klaar",[253,14162,14163],{},[47,14164,14165],{},"[2, 6, 3, 10]",[232,14167,14168,14170,14173],{},[253,14169,1025],{},[253,14171,14172],{},"voeg 13 toe, 13 > 6: klaar",[253,14174,14175],{},[47,14176,14177],{},"[2, 6, 3, 10, 13]",[232,14179,14180,14182,14185],{},[253,14181,2603],{},[253,14183,14184],{},"voeg 1 toe (index 5)",[253,14186,14187],{},[47,14188,14189],{},"[2, 6, 3, 10, 13, 1]",[232,14191,14192,14194,14197],{},[253,14193],{},[253,14195,14196],{},"1 \u003C ouder 3 (index 2): wissel",[253,14198,14199],{},[47,14200,14201],{},"[2, 6, 1, 10, 13, 3]",[232,14203,14204,14206,14209],{},[253,14205],{},[253,14207,14208],{},"1 \u003C ouder 2 (index 0): wissel",[253,14210,14211],{},[47,14212,14213],{},"[1, 6, 2, 10, 13, 3]",[232,14215,14216,14218,14221],{},[253,14217,4251],{},[253,14219,14220],{},"voeg 5 toe (index 6), 5 > ouder 2: klaar",[253,14222,14223],{},[47,14224,14042],{},[11,14226,14227,14228,14230,14231,14233,14234,150],{},"Elke wissel brengt het element één niveau omhoog. Een boom met ",[47,14229,49],{}," knopen heeft ongeveer ",[47,14232,195],{},"\nniveaus, dus invoegen kost hoogstens ",[47,14235,214],{},[39,14237,14239],{"id":14238},"het-minimum-verwijderen-met-sift-down","Het minimum verwijderen met sift-down",[11,14241,14242],{},"Het minimum staat altijd op index 0. Het weghalen gaat zo:",[129,14244,14245,14248,14254],{},[59,14246,14247],{},"Onthoud de wortel (dat is het antwoord).",[59,14249,14250,14251,14253],{},"Verplaats het ",[15,14252,2516],{}," element naar de wortel en maak de array één korter.",[59,14255,14256,14257,14260,14261,14264,14265,150],{},"Laat het omlaag zakken (",[20,14258,14259],{},"sift-down","): wissel met het ",[15,14262,14263],{},"kleinste kind"," zolang dat kind kleiner is.\nZijn beide kinderen gelijk, kies dan het ",[15,14266,14267],{},"linker",[11,14269,14270,14271,14273],{},"Vanaf ",[47,14272,14042],{}," halen we twee keer het minimum weg:",[226,14275,14276,14286],{},[229,14277,14278],{},[232,14279,14280,14282,14284],{},[235,14281,4147],{},[235,14283,5113],{},[235,14285,5119],{},[248,14287,14288,14300,14312,14324,14336,14348],{},[232,14289,14290,14292,14295],{},[253,14291,269],{},[253,14293,14294],{},"verwijder 1, laatste (5) naar de wortel",[253,14296,14297],{},[47,14298,14299],{},"[5, 6, 2, 10, 13, 3]",[232,14301,14302,14304,14307],{},[253,14303],{},[253,14305,14306],{},"kinderen 6 en 2, kleinste is 2 \u003C 5: wissel",[253,14308,14309],{},[47,14310,14311],{},"[2, 6, 5, 10, 13, 3]",[232,14313,14314,14316,14319],{},[253,14315],{},[253,14317,14318],{},"kind (index 5) is 3 \u003C 5: wissel",[253,14320,14321],{},[47,14322,14323],{},"[2, 6, 3, 10, 13, 5]",[232,14325,14326,14328,14331],{},[253,14327,1952],{},[253,14329,14330],{},"verwijder 2, laatste (5) naar de wortel",[253,14332,14333],{},[47,14334,14335],{},"[5, 6, 3, 10, 13]",[232,14337,14338,14340,14343],{},[253,14339],{},[253,14341,14342],{},"kinderen 6 en 3, kleinste is 3 \u003C 5: wissel",[253,14344,14345],{},[47,14346,14347],{},"[3, 6, 5, 10, 13]",[232,14349,14350,14352,14355],{},[253,14351],{},[253,14353,14354],{},"5 op index 2 heeft geen kinderen: klaar",[253,14356,14357],{},[47,14358,14347],{},[11,14360,14361,14362,14365],{},"Waarom met het ",[15,14363,14364],{},"kleinste"," kind wisselen? Wissel je met het grootste, dan wordt dat de ouder van het\nkleinere kind, en is de heap-eigenschap direct kapot.",[11,14367,14368,14369,14372,14373,14376,14377,150],{},"Een gelijkspel ziet er zo uit: uit ",[47,14370,14371],{},"[1, 3, 3, 5]"," het minimum halen geeft eerst ",[47,14374,14375],{},"[5, 3, 3]",". Beide\nkinderen zijn 3, dus wissel je met het linker: ",[47,14378,14379],{},"[3, 5, 3]",[39,14381,14382],{"id":47},"Code",[369,14384,14385,15129],{},[372,14386,14387],{"v-slot:python":374},[376,14388,14390],{"className":378,"code":14389,"language":380,"meta":374,"style":374},"class MinHeap:\n    def __init__(self):\n        self.a = []\n\n    def voeg_toe(self, x):\n        self.a.append(x)  # achteraan\n        i = len(self.a) - 1\n        while i > 0:  # sift-up\n            ouder = (i - 1) \u002F\u002F 2\n            if self.a[i] >= self.a[ouder]:\n                break\n            self.a[i], self.a[ouder] = self.a[ouder], self.a[i]\n            i = ouder\n\n    def verwijder_min(self):\n        minimum = self.a[0]\n        laatste = self.a.pop()\n        if self.a:\n            self.a[0] = laatste  # laatste naar de wortel\n            self._sift_down(0)\n        return minimum\n\n    def _sift_down(self, i):\n        n = len(self.a)\n        while True:\n            links, rechts = 2 * i + 1, 2 * i + 2\n            kleinste = i\n            if links \u003C n and self.a[links] \u003C self.a[kleinste]:\n                kleinste = links\n            # strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n            if rechts \u003C n and self.a[rechts] \u003C self.a[kleinste]:\n                kleinste = rechts\n            if kleinste == i:\n                return\n            self.a[i], self.a[kleinste] = self.a[kleinste], self.a[i]\n            i = kleinste\n\n\nh = MinHeap()\nfor x in [3, 6, 2, 10, 13, 1, 5]:\n    h.voeg_toe(x)\nprint(h.a)                # [1, 6, 2, 10, 13, 3, 5]\nprint(h.verwijder_min())  # 1\nprint(h.a)                # [2, 6, 3, 10, 13, 5]\n",[47,14391,14392,14401,14413,14425,14429,14445,14466,14488,14503,14524,14556,14561,14613,14622,14626,14639,14658,14677,14689,14711,14726,14733,14737,14754,14773,14780,14813,14822,14861,14871,14876,14914,14923,14936,14940,14992,15001,15005,15009,15020,15062,15077,15094,15112],{"__ignoreMap":374},[384,14393,14394,14396,14399],{"class":386,"line":387},[384,14395,8907],{"class":450},[384,14397,14398],{"class":8910}," MinHeap",[384,14400,813],{"class":405},[384,14402,14403,14405,14407,14409,14411],{"class":386,"line":414},[384,14404,8918],{"class":450},[384,14406,8921],{"class":401},[384,14408,406],{"class":405},[384,14410,8927],{"class":8926},[384,14412,411],{"class":405},[384,14414,14415,14417,14419,14421,14423],{"class":386,"line":500},[384,14416,8934],{"class":394},[384,14418,150],{"class":405},[384,14420,28],{"class":8939},[384,14422,2769],{"class":405},[384,14424,4408],{"class":405},[384,14426,14427],{"class":386,"line":602},[384,14428,1703],{"emptyLinePlaceholder":1702},[384,14430,14431,14433,14435,14437,14439,14441,14443],{"class":386,"line":721},[384,14432,8918],{"class":450},[384,14434,12595],{"class":401},[384,14436,406],{"class":405},[384,14438,8927],{"class":8926},[384,14440,568],{"class":405},[384,14442,2749],{"class":1620},[384,14444,411],{"class":405},[384,14446,14447,14449,14451,14453,14455,14457,14459,14461,14463],{"class":386,"line":727},[384,14448,8934],{"class":394},[384,14450,150],{"class":405},[384,14452,28],{"class":8939},[384,14454,150],{"class":405},[384,14456,4486],{"class":401},[384,14458,406],{"class":405},[384,14460,6675],{"class":401},[384,14462,863],{"class":405},[384,14464,14465],{"class":827},"  # achteraan\n",[384,14467,14468,14470,14472,14474,14476,14478,14480,14482,14484,14486],{"class":386,"line":733},[384,14469,12769],{"class":394},[384,14471,456],{"class":405},[384,14473,2681],{"class":401},[384,14475,406],{"class":405},[384,14477,8927],{"class":394},[384,14479,150],{"class":405},[384,14481,28],{"class":8939},[384,14483,863],{"class":405},[384,14485,5546],{"class":405},[384,14487,918],{"class":459},[384,14489,14490,14492,14494,14496,14498,14500],{"class":386,"line":1299},[384,14491,2725],{"class":390},[384,14493,395],{"class":394},[384,14495,808],{"class":405},[384,14497,460],{"class":459},[384,14499,1911],{"class":405},[384,14501,14502],{"class":827},"  # sift-up\n",[384,14504,14505,14508,14510,14512,14514,14516,14518,14520,14522],{"class":386,"line":2790},[384,14506,14507],{"class":394},"            ouder ",[384,14509,456],{"class":405},[384,14511,18],{"class":405},[384,14513,559],{"class":394},[384,14515,1677],{"class":405},[384,14517,565],{"class":459},[384,14519,863],{"class":405},[384,14521,4349],{"class":405},[384,14523,1375],{"class":459},[384,14525,14526,14528,14530,14532,14534,14536,14538,14540,14543,14545,14547,14549,14551,14554],{"class":386,"line":2985},[384,14527,3283],{"class":390},[384,14529,9013],{"class":394},[384,14531,150],{"class":405},[384,14533,28],{"class":8939},[384,14535,426],{"class":405},[384,14537,429],{"class":8939},[384,14539,586],{"class":405},[384,14541,14542],{"class":405}," >=",[384,14544,9013],{"class":394},[384,14546,150],{"class":405},[384,14548,28],{"class":8939},[384,14550,426],{"class":405},[384,14552,14553],{"class":8939},"ouder",[384,14555,599],{"class":405},[384,14557,14558],{"class":386,"line":3009},[384,14559,14560],{"class":390},"                break\n",[384,14562,14563,14565,14567,14569,14571,14573,14575,14577,14579,14581,14583,14585,14587,14589,14591,14593,14595,14597,14599,14601,14603,14605,14607,14609,14611],{"class":386,"line":3014},[384,14564,9832],{"class":394},[384,14566,150],{"class":405},[384,14568,28],{"class":8939},[384,14570,426],{"class":405},[384,14572,429],{"class":8939},[384,14574,1735],{"class":405},[384,14576,9013],{"class":394},[384,14578,150],{"class":405},[384,14580,28],{"class":8939},[384,14582,426],{"class":405},[384,14584,14553],{"class":8939},[384,14586,586],{"class":405},[384,14588,2769],{"class":405},[384,14590,9013],{"class":394},[384,14592,150],{"class":405},[384,14594,28],{"class":8939},[384,14596,426],{"class":405},[384,14598,14553],{"class":8939},[384,14600,1735],{"class":405},[384,14602,9013],{"class":394},[384,14604,150],{"class":405},[384,14606,28],{"class":8939},[384,14608,426],{"class":405},[384,14610,429],{"class":8939},[384,14612,432],{"class":405},[384,14614,14615,14617,14619],{"class":386,"line":3563},[384,14616,4501],{"class":394},[384,14618,456],{"class":405},[384,14620,14621],{"class":394}," ouder\n",[384,14623,14624],{"class":386,"line":3588},[384,14625,1703],{"emptyLinePlaceholder":1702},[384,14627,14628,14630,14633,14635,14637],{"class":386,"line":3606},[384,14629,8918],{"class":450},[384,14631,14632],{"class":401}," verwijder_min",[384,14634,406],{"class":405},[384,14636,8927],{"class":8926},[384,14638,411],{"class":405},[384,14640,14641,14644,14646,14648,14650,14652,14654,14656],{"class":386,"line":3611},[384,14642,14643],{"class":394},"        minimum ",[384,14645,456],{"class":405},[384,14647,9013],{"class":394},[384,14649,150],{"class":405},[384,14651,28],{"class":8939},[384,14653,426],{"class":405},[384,14655,2048],{"class":459},[384,14657,432],{"class":405},[384,14659,14660,14663,14665,14667,14669,14671,14673,14675],{"class":386,"line":4541},[384,14661,14662],{"class":394},"        laatste ",[384,14664,456],{"class":405},[384,14666,9013],{"class":394},[384,14668,150],{"class":405},[384,14670,28],{"class":8939},[384,14672,150],{"class":405},[384,14674,9055],{"class":401},[384,14676,9058],{"class":405},[384,14678,14679,14681,14683,14685,14687],{"class":386,"line":4562},[384,14680,577],{"class":390},[384,14682,9013],{"class":394},[384,14684,150],{"class":405},[384,14686,28],{"class":8939},[384,14688,813],{"class":405},[384,14690,14691,14693,14695,14697,14699,14701,14703,14705,14708],{"class":386,"line":4581},[384,14692,9832],{"class":394},[384,14694,150],{"class":405},[384,14696,28],{"class":8939},[384,14698,426],{"class":405},[384,14700,2048],{"class":459},[384,14702,586],{"class":405},[384,14704,2769],{"class":405},[384,14706,14707],{"class":394}," laatste  ",[384,14709,14710],{"class":827},"# laatste naar de wortel\n",[384,14712,14713,14715,14717,14720,14722,14724],{"class":386,"line":5021},[384,14714,9832],{"class":394},[384,14716,150],{"class":405},[384,14718,14719],{"class":401},"_sift_down",[384,14721,406],{"class":405},[384,14723,2048],{"class":459},[384,14725,3219],{"class":405},[384,14727,14728,14730],{"class":386,"line":5030},[384,14729,1651],{"class":390},[384,14731,14732],{"class":394}," minimum\n",[384,14734,14735],{"class":386,"line":9395},[384,14736,1703],{"emptyLinePlaceholder":1702},[384,14738,14739,14741,14744,14746,14748,14750,14752],{"class":386,"line":9409},[384,14740,8918],{"class":450},[384,14742,14743],{"class":401}," _sift_down",[384,14745,406],{"class":405},[384,14747,8927],{"class":8926},[384,14749,568],{"class":405},[384,14751,476],{"class":1620},[384,14753,411],{"class":405},[384,14755,14756,14759,14761,14763,14765,14767,14769,14771],{"class":386,"line":9414},[384,14757,14758],{"class":394},"        n ",[384,14760,456],{"class":405},[384,14762,2681],{"class":401},[384,14764,406],{"class":405},[384,14766,8927],{"class":394},[384,14768,150],{"class":405},[384,14770,28],{"class":8939},[384,14772,3219],{"class":405},[384,14774,14775,14777],{"class":386,"line":9972},[384,14776,2725],{"class":390},[384,14778,14779],{"class":405}," True:\n",[384,14781,14782,14785,14787,14789,14791,14793,14795,14797,14799,14801,14803,14805,14807,14809,14811],{"class":386,"line":9990},[384,14783,14784],{"class":394},"            links",[384,14786,568],{"class":405},[384,14788,4729],{"class":394},[384,14790,456],{"class":405},[384,14792,824],{"class":459},[384,14794,12378],{"class":405},[384,14796,395],{"class":394},[384,14798,562],{"class":405},[384,14800,565],{"class":459},[384,14802,568],{"class":405},[384,14804,824],{"class":459},[384,14806,12378],{"class":405},[384,14808,395],{"class":394},[384,14810,562],{"class":405},[384,14812,1375],{"class":459},[384,14814,14815,14818,14820],{"class":386,"line":10004},[384,14816,14817],{"class":394},"            kleinste ",[384,14819,456],{"class":405},[384,14821,5485],{"class":394},[384,14823,14824,14826,14828,14830,14832,14835,14837,14839,14841,14843,14845,14847,14849,14851,14853,14855,14857,14859],{"class":386,"line":10299},[384,14825,3283],{"class":390},[384,14827,4681],{"class":394},[384,14829,468],{"class":405},[384,14831,1639],{"class":394},[384,14833,14834],{"class":405},"and",[384,14836,9013],{"class":394},[384,14838,150],{"class":405},[384,14840,28],{"class":8939},[384,14842,426],{"class":405},[384,14844,4435],{"class":8939},[384,14846,586],{"class":405},[384,14848,3294],{"class":405},[384,14850,9013],{"class":394},[384,14852,150],{"class":405},[384,14854,28],{"class":8939},[384,14856,426],{"class":405},[384,14858,14364],{"class":8939},[384,14860,599],{"class":405},[384,14862,14863,14866,14868],{"class":386,"line":10316},[384,14864,14865],{"class":394},"                kleinste ",[384,14867,456],{"class":405},[384,14869,14870],{"class":394}," links\n",[384,14872,14873],{"class":386,"line":10332},[384,14874,14875],{"class":827},"            # strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n",[384,14877,14878,14880,14882,14884,14886,14888,14890,14892,14894,14896,14898,14900,14902,14904,14906,14908,14910,14912],{"class":386,"line":10350},[384,14879,3283],{"class":390},[384,14881,4729],{"class":394},[384,14883,468],{"class":405},[384,14885,1639],{"class":394},[384,14887,14834],{"class":405},[384,14889,9013],{"class":394},[384,14891,150],{"class":405},[384,14893,28],{"class":8939},[384,14895,426],{"class":405},[384,14897,4450],{"class":8939},[384,14899,586],{"class":405},[384,14901,3294],{"class":405},[384,14903,9013],{"class":394},[384,14905,150],{"class":405},[384,14907,28],{"class":8939},[384,14909,426],{"class":405},[384,14911,14364],{"class":8939},[384,14913,599],{"class":405},[384,14915,14916,14918,14920],{"class":386,"line":10360},[384,14917,14865],{"class":394},[384,14919,456],{"class":405},[384,14921,14922],{"class":394}," rechts\n",[384,14924,14925,14927,14930,14932,14934],{"class":386,"line":10365},[384,14926,3283],{"class":390},[384,14928,14929],{"class":394}," kleinste ",[384,14931,1642],{"class":405},[384,14933,476],{"class":394},[384,14935,813],{"class":405},[384,14937,14938],{"class":386,"line":10374},[384,14939,12724],{"class":390},[384,14941,14942,14944,14946,14948,14950,14952,14954,14956,14958,14960,14962,14964,14966,14968,14970,14972,14974,14976,14978,14980,14982,14984,14986,14988,14990],{"class":386,"line":10379},[384,14943,9832],{"class":394},[384,14945,150],{"class":405},[384,14947,28],{"class":8939},[384,14949,426],{"class":405},[384,14951,429],{"class":8939},[384,14953,1735],{"class":405},[384,14955,9013],{"class":394},[384,14957,150],{"class":405},[384,14959,28],{"class":8939},[384,14961,426],{"class":405},[384,14963,14364],{"class":8939},[384,14965,586],{"class":405},[384,14967,2769],{"class":405},[384,14969,9013],{"class":394},[384,14971,150],{"class":405},[384,14973,28],{"class":8939},[384,14975,426],{"class":405},[384,14977,14364],{"class":8939},[384,14979,1735],{"class":405},[384,14981,9013],{"class":394},[384,14983,150],{"class":405},[384,14985,28],{"class":8939},[384,14987,426],{"class":405},[384,14989,429],{"class":8939},[384,14991,432],{"class":405},[384,14993,14994,14996,14998],{"class":386,"line":12801},[384,14995,4501],{"class":394},[384,14997,456],{"class":405},[384,14999,15000],{"class":394}," kleinste\n",[384,15002,15003],{"class":386,"line":12824},[384,15004,1703],{"emptyLinePlaceholder":1702},[384,15006,15007],{"class":386,"line":12829},[384,15008,1703],{"emptyLinePlaceholder":1702},[384,15010,15011,15014,15016,15018],{"class":386,"line":12834},[384,15012,15013],{"class":394},"h ",[384,15015,456],{"class":405},[384,15017,14398],{"class":401},[384,15019,9058],{"class":405},[384,15021,15022,15024,15026,15028,15030,15032,15034,15037,15039,15041,15043,15046,15048,15051,15053,15055,15057,15060],{"class":386,"line":12850},[384,15023,391],{"class":390},[384,15025,2884],{"class":394},[384,15027,398],{"class":390},[384,15029,12370],{"class":405},[384,15031,1970],{"class":459},[384,15033,568],{"class":405},[384,15035,15036],{"class":459}," 6",[384,15038,568],{"class":405},[384,15040,824],{"class":459},[384,15042,568],{"class":405},[384,15044,15045],{"class":459}," 10",[384,15047,568],{"class":405},[384,15049,15050],{"class":459}," 13",[384,15052,568],{"class":405},[384,15054,565],{"class":459},[384,15056,568],{"class":405},[384,15058,15059],{"class":459}," 5",[384,15061,599],{"class":405},[384,15063,15064,15067,15069,15071,15073,15075],{"class":386,"line":12890},[384,15065,15066],{"class":394},"    h",[384,15068,150],{"class":405},[384,15070,12898],{"class":401},[384,15072,406],{"class":405},[384,15074,6675],{"class":401},[384,15076,3219],{"class":405},[384,15078,15079,15081,15083,15085,15087,15089,15091],{"class":386,"line":12907},[384,15080,1708],{"class":401},[384,15082,406],{"class":405},[384,15084,13262],{"class":401},[384,15086,150],{"class":405},[384,15088,28],{"class":8939},[384,15090,863],{"class":405},[384,15092,15093],{"class":827},"                # [1, 6, 2, 10, 13, 3, 5]\n",[384,15095,15096,15098,15100,15102,15104,15107,15109],{"class":386,"line":12949},[384,15097,1708],{"class":401},[384,15099,406],{"class":405},[384,15101,13262],{"class":401},[384,15103,150],{"class":405},[384,15105,15106],{"class":401},"verwijder_min",[384,15108,9272],{"class":405},[384,15110,15111],{"class":827},"  # 1\n",[384,15113,15114,15116,15118,15120,15122,15124,15126],{"class":386,"line":13633},[384,15115,1708],{"class":401},[384,15117,406],{"class":405},[384,15119,13262],{"class":401},[384,15121,150],{"class":405},[384,15123,28],{"class":8939},[384,15125,863],{"class":405},[384,15127,15128],{"class":827},"                # [2, 6, 3, 10, 13, 5]\n",[372,15130,15131],{"v-slot:java":374},[376,15132,15134],{"className":437,"code":15133,"language":439,"meta":374,"style":374},"import java.util.ArrayList;\nimport java.util.List;\n\nstatic class MinHeap {\n    final List\u003CInteger> a = new ArrayList\u003C>();\n\n    void voegToe(int x) {\n        a.add(x); \u002F\u002F achteraan\n        int i = a.size() - 1;\n        while (i > 0) { \u002F\u002F sift-up\n            int ouder = (i - 1) \u002F 2;\n            if (a.get(i) >= a.get(ouder)) break;\n            wissel(i, ouder);\n            i = ouder;\n        }\n    }\n\n    int verwijderMin() {\n        int minimum = a.get(0);\n        int laatste = a.remove(a.size() - 1);\n        if (!a.isEmpty()) {\n            a.set(0, laatste); \u002F\u002F laatste naar de wortel\n            siftDown(0);\n        }\n        return minimum;\n    }\n\n    private void siftDown(int i) {\n        int n = a.size();\n        while (true) {\n            int links = 2 * i + 1, rechts = 2 * i + 2, kleinste = i;\n            if (links \u003C n && a.get(links) \u003C a.get(kleinste)) kleinste = links;\n            \u002F\u002F strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n            if (rechts \u003C n && a.get(rechts) \u003C a.get(kleinste)) kleinste = rechts;\n            if (kleinste == i) return;\n            wissel(i, kleinste);\n            i = kleinste;\n        }\n    }\n\n    private void wissel(int i, int j) {\n        int t = a.get(i);\n        a.set(i, a.get(j));\n        a.set(j, t);\n    }\n}\n",[47,15135,15136,15152,15169,15173,15183,15208,15212,15228,15245,15267,15286,15311,15348,15364,15374,15378,15382,15386,15397,15418,15449,15466,15488,15499,15503,15512,15516,15520,15539,15555,15564,15608,15657,15662,15711,15730,15745,15755,15759,15763,15767,15792,15813,15839,15857,15862],{"__ignoreMap":374},[384,15137,15138,15140,15142,15144,15146,15148,15150],{"class":386,"line":387},[384,15139,9141],{"class":459},[384,15141,9144],{"class":450},[384,15143,150],{"class":405},[384,15145,4694],{"class":450},[384,15147,150],{"class":405},[384,15149,8885],{"class":450},[384,15151,848],{"class":405},[384,15153,15154,15156,15158,15160,15162,15164,15167],{"class":386,"line":414},[384,15155,9141],{"class":459},[384,15157,9144],{"class":450},[384,15159,150],{"class":405},[384,15161,4694],{"class":450},[384,15163,150],{"class":405},[384,15165,15166],{"class":450},"List",[384,15168,848],{"class":405},[384,15170,15171],{"class":386,"line":500},[384,15172,1703],{"emptyLinePlaceholder":1702},[384,15174,15175,15177,15179,15181],{"class":386,"line":602},[384,15176,1756],{"class":450},[384,15178,10034],{"class":450},[384,15180,14398],{"class":8910},[384,15182,482],{"class":405},[384,15184,15185,15188,15191,15193,15195,15197,15200,15202,15204,15206],{"class":386,"line":721},[384,15186,15187],{"class":450},"    final",[384,15189,15190],{"class":450}," List",[384,15192,468],{"class":405},[384,15194,9182],{"class":450},[384,15196,808],{"class":405},[384,15198,15199],{"class":394}," a ",[384,15201,456],{"class":405},[384,15203,4786],{"class":390},[384,15205,9177],{"class":450},[384,15207,9196],{"class":405},[384,15209,15210],{"class":386,"line":727},[384,15211,1703],{"emptyLinePlaceholder":1702},[384,15213,15214,15216,15218,15220,15222,15224,15226],{"class":386,"line":733},[384,15215,9205],{"class":450},[384,15217,13367],{"class":401},[384,15219,406],{"class":405},[384,15221,451],{"class":450},[384,15223,2749],{"class":1620},[384,15225,863],{"class":405},[384,15227,482],{"class":405},[384,15229,15230,15232,15234,15236,15238,15240,15242],{"class":386,"line":1299},[384,15231,2793],{"class":394},[384,15233,150],{"class":405},[384,15235,9227],{"class":401},[384,15237,406],{"class":405},[384,15239,6675],{"class":394},[384,15241,9234],{"class":405},[384,15243,15244],{"class":827}," \u002F\u002F achteraan\n",[384,15246,15247,15249,15251,15253,15255,15257,15259,15261,15263,15265],{"class":386,"line":2790},[384,15248,2881],{"class":450},[384,15250,395],{"class":394},[384,15252,456],{"class":405},[384,15254,423],{"class":394},[384,15256,150],{"class":405},[384,15258,9319],{"class":401},[384,15260,9254],{"class":405},[384,15262,5546],{"class":405},[384,15264,565],{"class":459},[384,15266,848],{"class":405},[384,15268,15269,15271,15273,15275,15277,15279,15281,15283],{"class":386,"line":2985},[384,15270,2725],{"class":390},[384,15272,18],{"class":405},[384,15274,559],{"class":394},[384,15276,808],{"class":405},[384,15278,460],{"class":459},[384,15280,863],{"class":405},[384,15282,1200],{"class":405},[384,15284,15285],{"class":827}," \u002F\u002F sift-up\n",[384,15287,15288,15290,15293,15295,15297,15299,15301,15303,15305,15307,15309],{"class":386,"line":3009},[384,15289,5762],{"class":450},[384,15291,15292],{"class":394}," ouder ",[384,15294,456],{"class":405},[384,15296,18],{"class":405},[384,15298,559],{"class":394},[384,15300,1677],{"class":405},[384,15302,565],{"class":459},[384,15304,863],{"class":405},[384,15306,7338],{"class":405},[384,15308,824],{"class":459},[384,15310,848],{"class":405},[384,15312,15313,15315,15317,15319,15321,15323,15325,15327,15329,15331,15333,15335,15337,15339,15341,15343,15346],{"class":386,"line":3014},[384,15314,3283],{"class":390},[384,15316,18],{"class":405},[384,15318,28],{"class":394},[384,15320,150],{"class":405},[384,15322,9356],{"class":401},[384,15324,406],{"class":405},[384,15326,429],{"class":394},[384,15328,863],{"class":405},[384,15330,14542],{"class":405},[384,15332,423],{"class":394},[384,15334,150],{"class":405},[384,15336,9356],{"class":401},[384,15338,406],{"class":405},[384,15340,14553],{"class":394},[384,15342,1741],{"class":405},[384,15344,15345],{"class":390}," break",[384,15347,848],{"class":405},[384,15349,15350,15353,15355,15357,15359,15362],{"class":386,"line":3563},[384,15351,15352],{"class":401},"            wissel",[384,15354,406],{"class":405},[384,15356,429],{"class":394},[384,15358,568],{"class":405},[384,15360,15361],{"class":394}," ouder",[384,15363,5962],{"class":405},[384,15365,15366,15368,15370,15372],{"class":386,"line":3588},[384,15367,4501],{"class":394},[384,15369,456],{"class":405},[384,15371,15361],{"class":394},[384,15373,848],{"class":405},[384,15375,15376],{"class":386,"line":3606},[384,15377,724],{"class":405},[384,15379,15380],{"class":386,"line":3611},[384,15381,730],{"class":405},[384,15383,15384],{"class":386,"line":4541},[384,15385,1703],{"emptyLinePlaceholder":1702},[384,15387,15388,15390,15393,15395],{"class":386,"line":4562},[384,15389,1417],{"class":450},[384,15391,15392],{"class":401}," verwijderMin",[384,15394,9254],{"class":405},[384,15396,482],{"class":405},[384,15398,15399,15401,15404,15406,15408,15410,15412,15414,15416],{"class":386,"line":4581},[384,15400,2881],{"class":450},[384,15402,15403],{"class":394}," minimum ",[384,15405,456],{"class":405},[384,15407,423],{"class":394},[384,15409,150],{"class":405},[384,15411,9356],{"class":401},[384,15413,406],{"class":405},[384,15415,2048],{"class":459},[384,15417,5962],{"class":405},[384,15419,15420,15422,15425,15427,15429,15431,15433,15435,15437,15439,15441,15443,15445,15447],{"class":386,"line":5021},[384,15421,2881],{"class":450},[384,15423,15424],{"class":394}," laatste ",[384,15426,456],{"class":405},[384,15428,423],{"class":394},[384,15430,150],{"class":405},[384,15432,9310],{"class":401},[384,15434,406],{"class":405},[384,15436,28],{"class":394},[384,15438,150],{"class":405},[384,15440,9319],{"class":401},[384,15442,9254],{"class":405},[384,15444,5546],{"class":405},[384,15446,565],{"class":459},[384,15448,5962],{"class":405},[384,15450,15451,15453,15456,15458,15460,15462,15464],{"class":386,"line":5030},[384,15452,577],{"class":390},[384,15454,15455],{"class":405}," (!",[384,15457,28],{"class":394},[384,15459,150],{"class":405},[384,15461,9269],{"class":401},[384,15463,9272],{"class":405},[384,15465,482],{"class":405},[384,15467,15468,15470,15472,15474,15476,15478,15480,15483,15485],{"class":386,"line":9395},[384,15469,2756],{"class":394},[384,15471,150],{"class":405},[384,15473,13679],{"class":401},[384,15475,406],{"class":405},[384,15477,2048],{"class":459},[384,15479,568],{"class":405},[384,15481,15482],{"class":394}," laatste",[384,15484,9234],{"class":405},[384,15486,15487],{"class":827}," \u002F\u002F laatste naar de wortel\n",[384,15489,15490,15493,15495,15497],{"class":386,"line":9409},[384,15491,15492],{"class":401},"            siftDown",[384,15494,406],{"class":405},[384,15496,2048],{"class":459},[384,15498,5962],{"class":405},[384,15500,15501],{"class":386,"line":9414},[384,15502,724],{"class":405},[384,15504,15505,15507,15510],{"class":386,"line":9972},[384,15506,1651],{"class":390},[384,15508,15509],{"class":394}," minimum",[384,15511,848],{"class":405},[384,15513,15514],{"class":386,"line":9990},[384,15515,730],{"class":405},[384,15517,15518],{"class":386,"line":10004},[384,15519,1703],{"emptyLinePlaceholder":1702},[384,15521,15522,15524,15526,15529,15531,15533,15535,15537],{"class":386,"line":10299},[384,15523,9171],{"class":450},[384,15525,2825],{"class":450},[384,15527,15528],{"class":401}," siftDown",[384,15530,406],{"class":405},[384,15532,451],{"class":450},[384,15534,476],{"class":1620},[384,15536,863],{"class":405},[384,15538,482],{"class":405},[384,15540,15541,15543,15545,15547,15549,15551,15553],{"class":386,"line":10316},[384,15542,2881],{"class":450},[384,15544,1639],{"class":394},[384,15546,456],{"class":405},[384,15548,423],{"class":394},[384,15550,150],{"class":405},[384,15552,9319],{"class":401},[384,15554,9406],{"class":405},[384,15556,15557,15559,15562],{"class":386,"line":10332},[384,15558,2725],{"class":390},[384,15560,15561],{"class":405}," (true)",[384,15563,482],{"class":405},[384,15565,15566,15568,15570,15572,15574,15576,15578,15580,15582,15584,15586,15588,15590,15592,15594,15596,15598,15600,15602,15604,15606],{"class":386,"line":10350},[384,15567,5762],{"class":450},[384,15569,4681],{"class":394},[384,15571,456],{"class":405},[384,15573,824],{"class":459},[384,15575,12378],{"class":405},[384,15577,395],{"class":394},[384,15579,562],{"class":405},[384,15581,565],{"class":459},[384,15583,568],{"class":405},[384,15585,4729],{"class":394},[384,15587,456],{"class":405},[384,15589,824],{"class":459},[384,15591,12378],{"class":405},[384,15593,395],{"class":394},[384,15595,562],{"class":405},[384,15597,824],{"class":459},[384,15599,568],{"class":405},[384,15601,14929],{"class":394},[384,15603,456],{"class":405},[384,15605,476],{"class":394},[384,15607,848],{"class":405},[384,15609,15610,15612,15614,15617,15619,15621,15623,15625,15627,15629,15631,15633,15635,15637,15639,15641,15643,15645,15647,15649,15651,15653,15655],{"class":386,"line":10360},[384,15611,3283],{"class":390},[384,15613,18],{"class":405},[384,15615,15616],{"class":394},"links ",[384,15618,468],{"class":405},[384,15620,1639],{"class":394},[384,15622,4845],{"class":405},[384,15624,423],{"class":394},[384,15626,150],{"class":405},[384,15628,9356],{"class":401},[384,15630,406],{"class":405},[384,15632,4435],{"class":394},[384,15634,863],{"class":405},[384,15636,3294],{"class":405},[384,15638,423],{"class":394},[384,15640,150],{"class":405},[384,15642,9356],{"class":401},[384,15644,406],{"class":405},[384,15646,14364],{"class":394},[384,15648,1741],{"class":405},[384,15650,14929],{"class":394},[384,15652,456],{"class":405},[384,15654,4459],{"class":394},[384,15656,848],{"class":405},[384,15658,15659],{"class":386,"line":10365},[384,15660,15661],{"class":827},"            \u002F\u002F strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n",[384,15663,15664,15666,15668,15671,15673,15675,15677,15679,15681,15683,15685,15687,15689,15691,15693,15695,15697,15699,15701,15703,15705,15707,15709],{"class":386,"line":10374},[384,15665,3283],{"class":390},[384,15667,18],{"class":405},[384,15669,15670],{"class":394},"rechts ",[384,15672,468],{"class":405},[384,15674,1639],{"class":394},[384,15676,4845],{"class":405},[384,15678,423],{"class":394},[384,15680,150],{"class":405},[384,15682,9356],{"class":401},[384,15684,406],{"class":405},[384,15686,4450],{"class":394},[384,15688,863],{"class":405},[384,15690,3294],{"class":405},[384,15692,423],{"class":394},[384,15694,150],{"class":405},[384,15696,9356],{"class":401},[384,15698,406],{"class":405},[384,15700,14364],{"class":394},[384,15702,1741],{"class":405},[384,15704,14929],{"class":394},[384,15706,456],{"class":405},[384,15708,4470],{"class":394},[384,15710,848],{"class":405},[384,15712,15713,15715,15717,15720,15722,15724,15726,15728],{"class":386,"line":10379},[384,15714,3283],{"class":390},[384,15716,18],{"class":405},[384,15718,15719],{"class":394},"kleinste ",[384,15721,1642],{"class":405},[384,15723,476],{"class":394},[384,15725,863],{"class":405},[384,15727,13303],{"class":390},[384,15729,848],{"class":405},[384,15731,15732,15734,15736,15738,15740,15743],{"class":386,"line":12801},[384,15733,15352],{"class":401},[384,15735,406],{"class":405},[384,15737,429],{"class":394},[384,15739,568],{"class":405},[384,15741,15742],{"class":394}," kleinste",[384,15744,5962],{"class":405},[384,15746,15747,15749,15751,15753],{"class":386,"line":12824},[384,15748,4501],{"class":394},[384,15750,456],{"class":405},[384,15752,15742],{"class":394},[384,15754,848],{"class":405},[384,15756,15757],{"class":386,"line":12829},[384,15758,724],{"class":405},[384,15760,15761],{"class":386,"line":12834},[384,15762,730],{"class":405},[384,15764,15765],{"class":386,"line":12850},[384,15766,1703],{"emptyLinePlaceholder":1702},[384,15768,15769,15771,15773,15776,15778,15780,15782,15784,15786,15788,15790],{"class":386,"line":12890},[384,15770,9171],{"class":450},[384,15772,2825],{"class":450},[384,15774,15775],{"class":401}," wissel",[384,15777,406],{"class":405},[384,15779,451],{"class":450},[384,15781,476],{"class":1620},[384,15783,568],{"class":405},[384,15785,1759],{"class":450},[384,15787,678],{"class":1620},[384,15789,863],{"class":405},[384,15791,482],{"class":405},[384,15793,15794,15796,15799,15801,15803,15805,15807,15809,15811],{"class":386,"line":12907},[384,15795,2881],{"class":450},[384,15797,15798],{"class":394}," t ",[384,15800,456],{"class":405},[384,15802,423],{"class":394},[384,15804,150],{"class":405},[384,15806,9356],{"class":401},[384,15808,406],{"class":405},[384,15810,429],{"class":394},[384,15812,5962],{"class":405},[384,15814,15815,15817,15819,15821,15823,15825,15827,15829,15831,15833,15835,15837],{"class":386,"line":12949},[384,15816,2793],{"class":394},[384,15818,150],{"class":405},[384,15820,13679],{"class":401},[384,15822,406],{"class":405},[384,15824,429],{"class":394},[384,15826,568],{"class":405},[384,15828,423],{"class":394},[384,15830,150],{"class":405},[384,15832,9356],{"class":401},[384,15834,406],{"class":405},[384,15836,596],{"class":394},[384,15838,4720],{"class":405},[384,15840,15841,15843,15845,15847,15849,15851,15853,15855],{"class":386,"line":13633},[384,15842,2793],{"class":394},[384,15844,150],{"class":405},[384,15846,13679],{"class":401},[384,15848,406],{"class":405},[384,15850,596],{"class":394},[384,15852,568],{"class":405},[384,15854,12940],{"class":394},[384,15856,5962],{"class":405},[384,15858,15860],{"class":386,"line":15859},45,[384,15861,730],{"class":405},[384,15863,15865],{"class":386,"line":15864},46,[384,15866,503],{"class":405},[39,15868,15870],{"id":15869},"heapify-een-hele-array-in-on","Heapify: een hele array in O(n)",[11,15872,15873,15874,15876,15877,15879,15880,15883,15884,15887,15888,150],{},"Heb je al een array, dan kun je de elementen één voor één invoegen: ",[47,15875,49],{}," keer ",[47,15878,214],{},". Het kan\nsneller. Bij heapify (",[20,15881,15882],{},"bottom-up heap construction",") roep je sift-down aan op elke knoop die kinderen\nheeft, van achter naar voren: van index ",[47,15885,15886],{},"⌊n\u002F2⌋ - 1"," terug naar ",[47,15889,2048],{},[11,15891,738,15892,15895,15896,15899],{},[47,15893,15894],{},"[9, 4, 7, 1, 8, 2, 6]"," (dus ",[47,15897,15898],{},"n = 7",", start bij index 2):",[226,15901,15902,15913],{},[229,15903,15904],{},[232,15905,15906,15908,15911],{},[235,15907,4147],{},[235,15909,15910],{},"Sift-down op",[235,15912,5119],{},[248,15914,15915,15925,15937,15949],{},[232,15916,15917,15919,15921],{},[253,15918,2560],{},[253,15920],{},[253,15922,15923],{},[47,15924,15894],{},[232,15926,15927,15929,15932],{},[253,15928,269],{},[253,15930,15931],{},"index 2 (7): wissel met kind 2",[253,15933,15934],{},[47,15935,15936],{},"[9, 4, 2, 1, 8, 7, 6]",[232,15938,15939,15941,15944],{},[253,15940,1952],{},[253,15942,15943],{},"index 1 (4): wissel met kind 1",[253,15945,15946],{},[47,15947,15948],{},"[9, 1, 2, 4, 8, 7, 6]",[232,15950,15951,15953,15956],{},[253,15952,1970],{},[253,15954,15955],{},"index 0 (9): wissel met 1, daarna met 4",[253,15957,15958],{},[47,15959,15960],{},"[1, 4, 2, 9, 8, 7, 6]",[11,15962,1859,15963,15965,15966,15968],{},[47,15964,119],{}," en niet ",[47,15967,219],{},", omdat de meeste knopen onderaan zitten en nauwelijks hoeven te\nzakken. De helft van de knopen zijn bladeren en zakken helemaal niet.",[39,15970,15972],{"id":15971},"heapsort","Heapsort",[11,15974,15975,15976,15978,15979,15981,15982,15984,15985,150],{},"Heapsort gebruikt dezelfde bouwstenen: maak met heapify een heap en haal dan ",[47,15977,49],{}," keer de wortel weg.\nMet een min-heap komen de elementen er oplopend uit. De klassieke in-place variant gebruikt een\nmax-heap en zet het weggehaalde maximum steeds achteraan in dezelfde array. Heapsort is altijd\n",[47,15980,219],{},", ook in het slechtste geval, en gebruikt ",[47,15983,210],{}," extra geheugen, maar is niet stabiel.\nMeer over sorteeralgoritmen lees je bij ",[28,15986,31],{"href":30},[39,15988,15990],{"id":15989},"priority-queues-in-python-en-java","Priority queues in Python en Java",[11,15992,15993],{},"In de praktijk gebruik je de ingebouwde heap.",[369,15995,15996,16248],{},[372,15997,15998],{"v-slot:python":374},[376,15999,16001],{"className":378,"code":16000,"language":380,"meta":374,"style":374},"import heapq\n\ntaken = []\nheapq.heappush(taken, (2, \"mail beantwoorden\"))\nheapq.heappush(taken, (1, \"server herstarten\"))\nheapq.heappush(taken, (3, \"koffie halen\"))\n\nwhile taken:\n    prioriteit, taak = heapq.heappop(taken)  # kleinste prioriteit eerst\n    print(prioriteit, taak)\n\n# een bestaande lijst in O(n) omzetten\ngetallen = [9, 4, 7, 1, 8, 2, 6]\nheapq.heapify(getallen)\nprint(getallen)  # [1, 4, 2, 9, 8, 7, 6]\n",[47,16002,16003,16010,16014,16023,16056,16085,16114,16118,16127,16156,16173,16177,16182,16219,16235],{"__ignoreMap":374},[384,16004,16005,16007],{"class":386,"line":387},[384,16006,9141],{"class":390},[384,16008,16009],{"class":394}," heapq\n",[384,16011,16012],{"class":386,"line":414},[384,16013,1703],{"emptyLinePlaceholder":1702},[384,16015,16016,16019,16021],{"class":386,"line":500},[384,16017,16018],{"class":394},"taken ",[384,16020,456],{"class":405},[384,16022,4408],{"class":405},[384,16024,16025,16028,16030,16033,16035,16038,16040,16042,16044,16046,16048,16051,16053],{"class":386,"line":602},[384,16026,16027],{"class":394},"heapq",[384,16029,150],{"class":405},[384,16031,16032],{"class":401},"heappush",[384,16034,406],{"class":405},[384,16036,16037],{"class":401},"taken",[384,16039,568],{"class":405},[384,16041,18],{"class":405},[384,16043,1952],{"class":459},[384,16045,568],{"class":405},[384,16047,10623],{"class":405},[384,16049,16050],{"class":9035},"mail beantwoorden",[384,16052,9032],{"class":405},[384,16054,16055],{"class":405},"))\n",[384,16057,16058,16060,16062,16064,16066,16068,16070,16072,16074,16076,16078,16081,16083],{"class":386,"line":721},[384,16059,16027],{"class":394},[384,16061,150],{"class":405},[384,16063,16032],{"class":401},[384,16065,406],{"class":405},[384,16067,16037],{"class":401},[384,16069,568],{"class":405},[384,16071,18],{"class":405},[384,16073,269],{"class":459},[384,16075,568],{"class":405},[384,16077,10623],{"class":405},[384,16079,16080],{"class":9035},"server herstarten",[384,16082,9032],{"class":405},[384,16084,16055],{"class":405},[384,16086,16087,16089,16091,16093,16095,16097,16099,16101,16103,16105,16107,16110,16112],{"class":386,"line":727},[384,16088,16027],{"class":394},[384,16090,150],{"class":405},[384,16092,16032],{"class":401},[384,16094,406],{"class":405},[384,16096,16037],{"class":401},[384,16098,568],{"class":405},[384,16100,18],{"class":405},[384,16102,1970],{"class":459},[384,16104,568],{"class":405},[384,16106,10623],{"class":405},[384,16108,16109],{"class":9035},"koffie halen",[384,16111,9032],{"class":405},[384,16113,16055],{"class":405},[384,16115,16116],{"class":386,"line":733},[384,16117,1703],{"emptyLinePlaceholder":1702},[384,16119,16120,16122,16125],{"class":386,"line":1299},[384,16121,803],{"class":390},[384,16123,16124],{"class":394}," taken",[384,16126,813],{"class":405},[384,16128,16129,16132,16134,16137,16139,16142,16144,16147,16149,16151,16153],{"class":386,"line":2790},[384,16130,16131],{"class":394},"    prioriteit",[384,16133,568],{"class":405},[384,16135,16136],{"class":394}," taak ",[384,16138,456],{"class":405},[384,16140,16141],{"class":394}," heapq",[384,16143,150],{"class":405},[384,16145,16146],{"class":401},"heappop",[384,16148,406],{"class":405},[384,16150,16037],{"class":401},[384,16152,863],{"class":405},[384,16154,16155],{"class":827},"  # kleinste prioriteit eerst\n",[384,16157,16158,16161,16163,16166,16168,16171],{"class":386,"line":2985},[384,16159,16160],{"class":401},"    print",[384,16162,406],{"class":405},[384,16164,16165],{"class":401},"prioriteit",[384,16167,568],{"class":405},[384,16169,16170],{"class":401}," taak",[384,16172,3219],{"class":405},[384,16174,16175],{"class":386,"line":3009},[384,16176,1703],{"emptyLinePlaceholder":1702},[384,16178,16179],{"class":386,"line":3014},[384,16180,16181],{"class":827},"# een bestaande lijst in O(n) omzetten\n",[384,16183,16184,16187,16189,16191,16193,16195,16197,16199,16201,16203,16205,16207,16209,16211,16213,16215,16217],{"class":386,"line":3563},[384,16185,16186],{"class":394},"getallen ",[384,16188,456],{"class":405},[384,16190,12370],{"class":405},[384,16192,5186],{"class":459},[384,16194,568],{"class":405},[384,16196,1738],{"class":459},[384,16198,568],{"class":405},[384,16200,1727],{"class":459},[384,16202,568],{"class":405},[384,16204,565],{"class":459},[384,16206,568],{"class":405},[384,16208,12875],{"class":459},[384,16210,568],{"class":405},[384,16212,824],{"class":459},[384,16214,568],{"class":405},[384,16216,15036],{"class":459},[384,16218,432],{"class":405},[384,16220,16221,16223,16225,16228,16230,16233],{"class":386,"line":3588},[384,16222,16027],{"class":394},[384,16224,150],{"class":405},[384,16226,16227],{"class":401},"heapify",[384,16229,406],{"class":405},[384,16231,16232],{"class":401},"getallen",[384,16234,3219],{"class":405},[384,16236,16237,16239,16241,16243,16245],{"class":386,"line":3606},[384,16238,1708],{"class":401},[384,16240,406],{"class":405},[384,16242,16232],{"class":401},[384,16244,863],{"class":405},[384,16246,16247],{"class":827},"  # [1, 4, 2, 9, 8, 7, 6]\n",[372,16249,16250],{"v-slot:java":374},[376,16251,16253],{"className":437,"code":16252,"language":439,"meta":374,"style":374},"import java.util.PriorityQueue;\n\nstatic void prioriteiten() {\n    \u002F\u002F min-heap op prioriteit; een int[] is {prioriteit, taaknummer}\n    PriorityQueue\u003Cint[]> taken = new PriorityQueue\u003C>((x, y) -> Integer.compare(x[0], y[0]));\n    taken.add(new int[] {2, 101});\n    taken.add(new int[] {1, 102});\n    taken.add(new int[] {3, 103});\n\n    while (!taken.isEmpty()) {\n        int[] t = taken.poll(); \u002F\u002F kleinste prioriteit eerst\n        System.out.println(t[0] + \" \" + t[1]);\n    }\n}\n",[47,16254,16255,16272,16276,16289,16294,16357,16387,16414,16441,16445,16461,16483,16526,16530],{"__ignoreMap":374},[384,16256,16257,16259,16261,16263,16265,16267,16270],{"class":386,"line":387},[384,16258,9141],{"class":459},[384,16260,9144],{"class":450},[384,16262,150],{"class":405},[384,16264,4694],{"class":450},[384,16266,150],{"class":405},[384,16268,16269],{"class":450},"PriorityQueue",[384,16271,848],{"class":405},[384,16273,16274],{"class":386,"line":414},[384,16275,1703],{"emptyLinePlaceholder":1702},[384,16277,16278,16280,16282,16285,16287],{"class":386,"line":500},[384,16279,1756],{"class":450},[384,16281,2825],{"class":450},[384,16283,16284],{"class":401}," prioriteiten",[384,16286,9254],{"class":405},[384,16288,482],{"class":405},[384,16290,16291],{"class":386,"line":602},[384,16292,16293],{"class":827},"    \u002F\u002F min-heap op prioriteit; een int[] is {prioriteit, taaknummer}\n",[384,16295,16296,16299,16301,16303,16306,16309,16311,16313,16316,16319,16321,16323,16326,16328,16331,16333,16335,16338,16340,16342,16344,16346,16348,16350,16352,16354],{"class":386,"line":721},[384,16297,16298],{"class":450},"    PriorityQueue",[384,16300,468],{"class":405},[384,16302,451],{"class":450},[384,16304,16305],{"class":405},"[]>",[384,16307,16308],{"class":394}," taken ",[384,16310,456],{"class":405},[384,16312,4786],{"class":390},[384,16314,16315],{"class":450}," PriorityQueue",[384,16317,16318],{"class":405},"\u003C>((",[384,16320,6675],{"class":394},[384,16322,568],{"class":405},[384,16324,16325],{"class":394}," y",[384,16327,863],{"class":405},[384,16329,16330],{"class":450}," ->",[384,16332,13006],{"class":394},[384,16334,150],{"class":405},[384,16336,16337],{"class":401},"compare",[384,16339,406],{"class":405},[384,16341,6675],{"class":394},[384,16343,426],{"class":405},[384,16345,2048],{"class":459},[384,16347,1735],{"class":405},[384,16349,16325],{"class":394},[384,16351,426],{"class":405},[384,16353,2048],{"class":459},[384,16355,16356],{"class":405},"]));\n",[384,16358,16359,16362,16364,16366,16368,16371,16373,16375,16377,16379,16381,16384],{"class":386,"line":727},[384,16360,16361],{"class":394},"    taken",[384,16363,150],{"class":405},[384,16365,9227],{"class":401},[384,16367,406],{"class":405},[384,16369,16370],{"class":390},"new",[384,16372,1759],{"class":450},[384,16374,1768],{"class":405},[384,16376,1200],{"class":405},[384,16378,1952],{"class":459},[384,16380,568],{"class":405},[384,16382,16383],{"class":459}," 101",[384,16385,16386],{"class":405},"});\n",[384,16388,16389,16391,16393,16395,16397,16399,16401,16403,16405,16407,16409,16412],{"class":386,"line":733},[384,16390,16361],{"class":394},[384,16392,150],{"class":405},[384,16394,9227],{"class":401},[384,16396,406],{"class":405},[384,16398,16370],{"class":390},[384,16400,1759],{"class":450},[384,16402,1768],{"class":405},[384,16404,1200],{"class":405},[384,16406,269],{"class":459},[384,16408,568],{"class":405},[384,16410,16411],{"class":459}," 102",[384,16413,16386],{"class":405},[384,16415,16416,16418,16420,16422,16424,16426,16428,16430,16432,16434,16436,16439],{"class":386,"line":1299},[384,16417,16361],{"class":394},[384,16419,150],{"class":405},[384,16421,9227],{"class":401},[384,16423,406],{"class":405},[384,16425,16370],{"class":390},[384,16427,1759],{"class":450},[384,16429,1768],{"class":405},[384,16431,1200],{"class":405},[384,16433,1970],{"class":459},[384,16435,568],{"class":405},[384,16437,16438],{"class":459}," 103",[384,16440,16386],{"class":405},[384,16442,16443],{"class":386,"line":2790},[384,16444,1703],{"emptyLinePlaceholder":1702},[384,16446,16447,16449,16451,16453,16455,16457,16459],{"class":386,"line":2985},[384,16448,1357],{"class":390},[384,16450,15455],{"class":405},[384,16452,16037],{"class":394},[384,16454,150],{"class":405},[384,16456,9269],{"class":401},[384,16458,9272],{"class":405},[384,16460,482],{"class":405},[384,16462,16463,16465,16467,16469,16471,16473,16475,16478,16480],{"class":386,"line":3009},[384,16464,2881],{"class":450},[384,16466,1768],{"class":405},[384,16468,15798],{"class":394},[384,16470,456],{"class":405},[384,16472,16124],{"class":394},[384,16474,150],{"class":405},[384,16476,16477],{"class":401},"poll",[384,16479,11123],{"class":405},[384,16481,16482],{"class":827}," \u002F\u002F kleinste prioriteit eerst\n",[384,16484,16485,16488,16490,16493,16495,16498,16500,16503,16505,16507,16509,16511,16513,16515,16517,16519,16521,16523],{"class":386,"line":3014},[384,16486,16487],{"class":394},"        System",[384,16489,150],{"class":405},[384,16491,16492],{"class":394},"out",[384,16494,150],{"class":405},[384,16496,16497],{"class":401},"println",[384,16499,406],{"class":405},[384,16501,16502],{"class":394},"t",[384,16504,426],{"class":405},[384,16506,2048],{"class":459},[384,16508,586],{"class":405},[384,16510,1684],{"class":405},[384,16512,10623],{"class":405},[384,16514,10623],{"class":405},[384,16516,1684],{"class":405},[384,16518,12940],{"class":394},[384,16520,426],{"class":405},[384,16522,269],{"class":459},[384,16524,16525],{"class":405},"]);\n",[384,16527,16528],{"class":386,"line":3563},[384,16529,730],{"class":405},[384,16531,16532],{"class":386,"line":3588},[384,16533,503],{"class":405},[11,16535,16536,16538,16539,16542,16543,16545,16546,16549,16550,16553,16554,16556,16557,136,16559,7475,16562,16564,16565,150],{},[47,16537,16027],{}," werkt op een gewone lijst en is altijd een min-heap; voor een max-heap sla je ",[47,16540,16541],{},"-x"," op. Java's\n",[47,16544,16269],{}," is standaard ook een min-heap; met ",[47,16547,16548],{},"Comparator.reverseOrder()"," maak je er een max-heap\nvan. Let op: ",[47,16551,16552],{},"heapq.heappop"," gebruikt intern een andere, snellere variant van sift-down. Het minimum\nklopt altijd, maar bij gelijke waarden kan de array er anders uitzien dan met de tentamenmethode\n(",[47,16555,14371],{}," wordt bij ",[47,16558,16027],{},[47,16560,16561],{},"[3, 3, 5]",[47,16563,14379],{},"). Traceer op het tentamen dus\nmet de hand, niet met ",[47,16566,16027],{},[39,16568,17],{"id":2398},[226,16570,16571,16580],{},[229,16572,16573],{},[232,16574,16575,16577],{},[235,16576,8546],{},[235,16578,16579],{},"Tijd",[248,16581,16582,16591,16600,16609,16621,16629],{},[232,16583,16584,16587],{},[253,16585,16586],{},"Minimum bekijken",[253,16588,16589],{},[47,16590,210],{},[232,16592,16593,16596],{},[253,16594,16595],{},"Invoegen (sift-up)",[253,16597,16598],{},[47,16599,214],{},[232,16601,16602,16605],{},[253,16603,16604],{},"Minimum verwijderen (sift-down)",[253,16606,16607],{},[47,16608,214],{},[232,16610,16611,16617],{},[253,16612,16613,16614,16616],{},"Heapify van ",[47,16615,49],{}," elementen",[253,16618,16619],{},[47,16620,119],{},[232,16622,16623,16625],{},[253,16624,15972],{},[253,16626,16627],{},[47,16628,219],{},[232,16630,16631,16634],{},[253,16632,16633],{},"Willekeurig element zoeken",[253,16635,16636],{},[47,16637,119],{},[39,16639,2248],{"id":2247},[129,16641,16642,16651,16660,16677,16685],{},[59,16643,16644,16647,16648,16650],{},[15,16645,16646],{},"Met het verkeerde kind wisselen."," Bij sift-down wissel je met het ",[15,16649,14364],{}," kind, niet met\nhet linker of met het eerste kind dat kleiner is dan de ouder. Bij gelijke kinderen: het linker.",[59,16652,16653,16656,16657,16659],{},[15,16654,16655],{},"De wortel weghalen en alles opschuiven."," Je verplaatst het ",[15,16658,2516],{}," element naar de wortel;\nde rest van de array blijft staan.",[59,16661,16662,16665,16666,188,16668,16670,16671,188,16674,16676],{},[15,16663,16664],{},"Verkeerde indexformules."," Bij een 0-geïndexeerde array zijn de kinderen ",[47,16667,14024],{},[47,16669,14036],{},".\nDe formules ",[47,16672,16673],{},"2i",[47,16675,14024],{}," horen bij een 1-geïndexeerde heap.",[59,16678,16679,136,16682,16684],{},[15,16680,16681],{},"Denken dat een heap gesorteerd is.",[47,16683,14042],{}," is een geldige heap, maar geen\ngesorteerde array.",[59,16686,16687,16690],{},[15,16688,16689],{},"Te vroeg stoppen met sift-up of sift-down."," Een element kan meerdere niveaus moeten verhuizen;\ncontroleer na elke wissel opnieuw.",[39,16692,2316],{"id":2315},[56,16694,16695,16702,16715,16720,16728],{},[59,16696,16697,16698,16701],{},"Een binaire min-heap is een volledige boom in een array waarin elke ouder ",[47,16699,16700],{},"≤"," zijn kinderen is.",[59,16703,16704,16705,140,16707,16710,16711,188,16713,150],{},"Ouder van ",[47,16706,429],{},[47,16708,16709],{},"⌊(i - 1)\u002F2⌋",", kinderen zijn ",[47,16712,14024],{},[47,16714,14036],{},[59,16716,16717,16718,150],{},"Invoegen: achteraan toevoegen en sift-up. Minimum verwijderen: laatste naar de wortel en sift-down\nmet het kleinste kind (bij gelijkspel links). Beide ",[47,16719,214],{},[59,16721,16722,16723,16725,16726,150],{},"Heapify bouwt een heap in ",[47,16724,119],{},"; heapsort sorteert in ",[47,16727,219],{},[59,16729,16730,16731,9437,16733,16735],{},"Gebruik in de praktijk ",[47,16732,16027],{},[47,16734,16269],{}," (Java) als prioriteitswachtrij.",[2371,16737,16738],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":374,"searchDepth":414,"depth":414,"links":16740},[16741,16742,16743,16744,16745,16746,16747,16748,16749,16750],{"id":13955,"depth":414,"text":13956},{"id":14065,"depth":414,"text":14066},{"id":14238,"depth":414,"text":14239},{"id":47,"depth":414,"text":14382},{"id":15869,"depth":414,"text":15870},{"id":15971,"depth":414,"text":15972},{"id":15989,"depth":414,"text":15990},{"id":2398,"depth":414,"text":17},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Wat is een binaire heap? Leer invoegen met sift-up, het minimum verwijderen met sift-down, heapify en heapsort, stap voor stap met code in Python en Java.","i-lucide-triangle",{},"\u002Fpracticely-dsa\u002Fheaps",{"title":13930,"description":16751},"practicely-dsa\u002Fheaps","heaps","tehA8rYAMeP8QOZWDsroQdXlbmGCA7-KZP3piHQR8n0",{"id":16760,"title":16761,"body":16762,"description":19942,"extension":2392,"icon":19943,"meta":19944,"navigation":1702,"order":733,"path":19945,"seo":19946,"stem":19947,"topic":19948,"__hash__":19949},"practicelyDsa\u002Fpracticely-dsa\u002Fbinaire-zoekbomen.md","Binaire zoekbomen uitgelegd: invoegen, verwijderen en de vier doorloopvolgordes",{"type":8,"value":16763,"toc":19928},[16764,16774,16781,16785,16792,16811,16814,16817,16823,16829,16936,16939,16945,16948,16950,16953,16988,16997,17001,17004,17016,17033,17039,17058,17082,17088,17091,17095,17102,17169,17180,17211,17213,19630,19634,19647,19684,19690,19697,19701,19708,19728,19747,19749,19827,19836,19838,19899,19901,19925],[11,16765,16766,16767,16770,16771,16773],{},"Een binaire zoekboom (",[20,16768,16769],{},"binary search tree",", BST) combineert het beste van een gesorteerde array en een\ngelinkte lijst. Je kunt erin zoeken zoals bij ",[28,16772,284],{"href":283},", maar invoegen en\nverwijderen gaan zonder alles op te schuiven.",[11,16775,16776,16777,16780],{},"Op het tentamen is dit een vaste kluif: \"voeg deze sleutels in, teken de boom\", \"verwijder 3\",\n\"geef de inorder-volgorde\". In sollicitaties zijn boomvragen populair omdat ze recursief denken\ntesten. En in de praktijk zitten gebalanceerde zoekbomen achter ",[47,16778,16779],{},"TreeMap"," in Java, database-indexen\nen de bestandssystemen op je laptop.",[39,16782,16784],{"id":16783},"de-bst-eigenschap","De BST-eigenschap",[11,16786,16787,16788,16791],{},"Elke knoop heeft een sleutel en hoogstens twee kinderen. Voor ",[15,16789,16790],{},"elke"," knoop geldt:",[56,16793,16794,16803],{},[59,16795,16796,16797,16799,16800,463],{},"alle sleutels in de ",[15,16798,14267],{}," deelboom zijn ",[15,16801,16802],{},"kleiner",[59,16804,16796,16805,16799,16808,150],{},[15,16806,16807],{},"rechter",[15,16809,16810],{},"groter",[11,16812,16813],{},"Dat geldt dus voor de hele deelboom, niet alleen voor de directe kinderen. In de opgaven komen geen\ndubbele sleutels voor.",[39,16815,13766],{"id":16816},"invoegen",[11,16818,16819,16820,150],{},"Begin bij de wortel. Is de nieuwe sleutel kleiner, ga naar links; groter, ga naar rechts. Kom je bij\neen lege plek, dan hang je de nieuwe knoop daar op. Een nieuwe sleutel wordt dus ",[15,16821,16822],{},"altijd een blad",[11,16824,14087,16825,16828],{},[47,16826,16827],{},"8, 3, 10, 1, 6, 14, 4, 7, 13"," in deze volgorde in:",[226,16830,16831,16843],{},[229,16832,16833],{},[232,16834,16835,16837,16840],{},[235,16836,11639],{},[235,16838,16839],{},"Route",[235,16841,16842],{},"Wordt",[248,16844,16845,16855,16865,16875,16885,16895,16906,16916,16926],{},[232,16846,16847,16849,16852],{},[253,16848,2089],{},[253,16850,16851],{},"lege boom",[253,16853,16854],{},"wortel",[232,16856,16857,16859,16862],{},[253,16858,1970],{},[253,16860,16861],{},"8 → links",[253,16863,16864],{},"linkerkind van 8",[232,16866,16867,16869,16872],{},[253,16868,287],{},[253,16870,16871],{},"8 → rechts",[253,16873,16874],{},"rechterkind van 8",[232,16876,16877,16879,16882],{},[253,16878,269],{},[253,16880,16881],{},"8 → links, 3 → links",[253,16883,16884],{},"linkerkind van 3",[232,16886,16887,16889,16892],{},[253,16888,2603],{},[253,16890,16891],{},"8 → links, 3 → rechts",[253,16893,16894],{},"rechterkind van 3",[232,16896,16897,16900,16903],{},[253,16898,16899],{},"14",[253,16901,16902],{},"8 → rechts, 10 → rechts",[253,16904,16905],{},"rechterkind van 10",[232,16907,16908,16910,16913],{},[253,16909,1044],{},[253,16911,16912],{},"8 → links, 3 → rechts, 6 → links",[253,16914,16915],{},"linkerkind van 6",[232,16917,16918,16920,16923],{},[253,16919,4251],{},[253,16921,16922],{},"8 → links, 3 → rechts, 6 → rechts",[253,16924,16925],{},"rechterkind van 6",[232,16927,16928,16930,16933],{},[253,16929,12035],{},[253,16931,16932],{},"8 → rechts, 10 → rechts, 14 → links",[253,16934,16935],{},"linkerkind van 14",[11,16937,16938],{},"Het resultaat, de voorbeeldboom voor de rest van deze pagina:",[376,16940,16943],{"className":16941,"code":16942,"language":5073},[5071],"            8\n          \u002F   \\\n         3     10\n        \u002F \\      \\\n       1   6      14\n          \u002F \\    \u002F\n         4   7  13\n",[47,16944,16942],{"__ignoreMap":374},[11,16946,16947],{},"De invoegvolgorde bepaalt de vorm. Dezelfde sleutels in een andere volgorde geven een andere boom.",[39,16949,11988],{"id":8449},[11,16951,16952],{},"Zoeken volgt dezelfde route als invoegen. Bij elke knoop vergelijk je en ga je links of rechts.",[226,16954,16955,16966],{},[229,16956,16957],{},[232,16958,16959,16961,16964],{},[235,16960,12004],{},[235,16962,16963],{},"Bezochte knopen",[235,16965,4153],{},[248,16967,16968,16978],{},[232,16969,16970,16972,16975],{},[253,16971,4251],{},[253,16973,16974],{},"8, 3, 6, 7",[253,16976,16977],{},"gevonden",[232,16979,16980,16982,16985],{},[253,16981,1025],{},[253,16983,16984],{},"8, 3, 6, 4",[253,16986,16987],{},"4 heeft geen rechterkind: niet gevonden",[11,16989,16990,16991,136,16994,16996],{},"Je bezoekt hoogstens één knoop per niveau. Het aantal stappen is dus de ",[15,16992,16993],{},"hoogte",[47,16995,13262],{}," van de boom.",[39,16998,17000],{"id":16999},"verwijderen-drie-gevallen","Verwijderen: drie gevallen",[11,17002,17003],{},"Zoek eerst de knoop. Wat je daarna doet, hangt af van het aantal kinderen.",[11,17005,17006,17009,17010,17012,17013,17015],{},[15,17007,17008],{},"Geval 1: blad (geen kinderen)."," Haal de knoop gewoon weg. Verwijder ",[47,17011,12035],{},": het linkerkind van ",[47,17014,16899],{},"\nwordt leeg, de rest van de boom blijft hetzelfde.",[11,17017,17018,17021,17022,17024,17025,17027,17028,17030,17031,150],{},[15,17019,17020],{},"Geval 2: één kind."," Het kind schuift op naar de plek van de knoop. Verwijder ",[47,17023,287],{},": de deelboom\n",[47,17026,16899],{}," (met ",[47,17029,12035],{},") wordt het rechterkind van ",[47,17032,2089],{},[376,17034,17037],{"className":17035,"code":17036,"language":5073},[5071],"            8\n          \u002F   \\\n         3     14\n        \u002F \\    \u002F\n       1   6  13\n          \u002F \\\n         4   7\n",[47,17038,17036],{"__ignoreMap":374},[11,17040,17041,17044,17045,18,17048,17051,17052,17054,17055,17057],{},[15,17042,17043],{},"Geval 3: twee kinderen."," Zoek de ",[15,17046,17047],{},"opvolger",[20,17049,17050],{},"in-order successor","): de ",[15,17053,14364],{}," sleutel in de\n",[15,17056,16807],{}," deelboom. Die vind je door één keer naar rechts te gaan en dan zo ver mogelijk naar links.\nKopieer de sleutel van de opvolger naar de knoop en verwijder daarna de opvolger uit de rechter\ndeelboom. De opvolger heeft nooit een linkerkind, dus dat is altijd geval 1 of 2.",[11,17059,17060,17061,17063,17064,140,17066,17069,17070,17072,17073,17075,17076,17078,17079,17081],{},"Verwijder ",[47,17062,1970],{}," uit de oorspronkelijke boom. De rechter deelboom van ",[47,17065,1970],{},[47,17067,17068],{},"6, 4, 7","; de kleinste\ndaarin is ",[47,17071,1044],{},". Dus ",[47,17074,1044],{}," komt op de plek van ",[47,17077,1970],{},", en het blad ",[47,17080,1044],{}," verdwijnt:",[376,17083,17086],{"className":17084,"code":17085,"language":5073},[5071],"            8\n          \u002F   \\\n         4     10\n        \u002F \\      \\\n       1   6      14\n            \\    \u002F\n             7  13\n",[47,17087,17085],{"__ignoreMap":374},[11,17089,17090],{},"Waarom werkt dit? De opvolger is groter dan alles links en kleiner dan alles wat rechts overblijft,\ndus de BST-eigenschap blijft intact.",[39,17092,17094],{"id":17093},"de-vier-doorloopvolgordes","De vier doorloopvolgordes",[11,17096,17097,17098,17101],{},"Een boom doorlopen (",[20,17099,17100],{},"traversal",") betekent elke knoop één keer bezoeken. Voor de voorbeeldboom:",[226,17103,17104,17116],{},[229,17105,17106],{},[232,17107,17108,17111,17114],{},[235,17109,17110],{},"Volgorde",[235,17112,17113],{},"Regel",[235,17115,4153],{},[248,17117,17118,17131,17144,17157],{},[232,17119,17120,17123,17126],{},[253,17121,17122],{},"Preorder",[253,17124,17125],{},"knoop, links, rechts",[253,17127,17128],{},[47,17129,17130],{},"8, 3, 1, 6, 4, 7, 10, 14, 13",[232,17132,17133,17136,17139],{},[253,17134,17135],{},"Inorder",[253,17137,17138],{},"links, knoop, rechts",[253,17140,17141],{},[47,17142,17143],{},"1, 3, 4, 6, 7, 8, 10, 13, 14",[232,17145,17146,17149,17152],{},[253,17147,17148],{},"Postorder",[253,17150,17151],{},"links, rechts, knoop",[253,17153,17154],{},[47,17155,17156],{},"1, 4, 7, 6, 3, 13, 14, 10, 8",[232,17158,17159,17162,17165],{},[253,17160,17161],{},"Level-order",[253,17163,17164],{},"per niveau, van links naar rechts",[253,17166,17167],{},[47,17168,16827],{},[11,17170,17171,17172,6395,17174,188,17176,17179],{},"Ezelsbruggetje: ",[20,17173,376],{},[20,17175,398],{},[20,17177,17178],{},"post"," zeggen wanneer de knoop zelf aan de beurt is: vóór, tussen of\nna zijn deelbomen.",[56,17181,17182,17190,17195,17200],{},[59,17183,17184,17186,17187,17189],{},[15,17185,17135],{}," geeft bij een BST altijd de ",[15,17188,6650],{}," volgorde. Handige controle voor je\nantwoord.",[59,17191,17192,17194],{},[15,17193,17122],{}," is handig om een boom te kopiëren of op te slaan: voeg je de preorder-volgorde\nopnieuw in, dan krijg je exact dezelfde boom terug.",[59,17196,17197,17199],{},[15,17198,17148],{}," verwerkt kinderen vóór de ouder, bijvoorbeeld bij het opruimen van een boom of het\nuitrekenen van een expressieboom.",[59,17201,17202,17204,17205,17207,17208,8476],{},[15,17203,17161],{}," is breedte-eerst zoeken en gebruikt een wachtrij, net als BFS bij\n",[28,17206,36],{"href":35}," (zie ook ",[28,17209,17210],{"href":6632},"stapels en wachtrijen",[39,17212,14382],{"id":47},[369,17214,17215,18339],{},[372,17216,17217],{"v-slot:python":374},[376,17218,17220],{"className":378,"code":17219,"language":380,"meta":374,"style":374},"from collections import deque\n\n\nclass Knoop:\n    def __init__(self, sleutel):\n        self.sleutel = sleutel\n        self.links = None\n        self.rechts = None\n\n\ndef voeg_toe(knoop, sleutel):\n    if knoop is None:\n        return Knoop(sleutel)  # nieuwe sleutel wordt een blad\n    if sleutel \u003C knoop.sleutel:\n        knoop.links = voeg_toe(knoop.links, sleutel)\n    elif sleutel > knoop.sleutel:\n        knoop.rechts = voeg_toe(knoop.rechts, sleutel)\n    return knoop\n\n\ndef zoek(knoop, sleutel):\n    while knoop is not None and knoop.sleutel != sleutel:\n        knoop = knoop.links if sleutel \u003C knoop.sleutel else knoop.rechts\n    return knoop\n\n\ndef verwijder(knoop, sleutel):\n    if knoop is None:\n        return None\n    if sleutel \u003C knoop.sleutel:\n        knoop.links = verwijder(knoop.links, sleutel)\n    elif sleutel > knoop.sleutel:\n        knoop.rechts = verwijder(knoop.rechts, sleutel)\n    else:\n        if knoop.links is None:  # blad of alleen rechterkind\n            return knoop.rechts\n        if knoop.rechts is None:  # alleen linkerkind\n            return knoop.links\n        opvolger = knoop.rechts  # twee kinderen: kleinste in rechter deelboom\n        while opvolger.links is not None:\n            opvolger = opvolger.links\n        knoop.sleutel = opvolger.sleutel\n        knoop.rechts = verwijder(knoop.rechts, opvolger.sleutel)\n    return knoop\n\n\ndef preorder(k):\n    return [] if k is None else [k.sleutel] + preorder(k.links) + preorder(k.rechts)\n\n\ndef inorder(k):\n    return [] if k is None else inorder(k.links) + [k.sleutel] + inorder(k.rechts)\n\n\ndef postorder(k):\n    return [] if k is None else postorder(k.links) + postorder(k.rechts) + [k.sleutel]\n\n\ndef level_order(wortel):\n    resultaat, wachtrij = [], deque([wortel] if wortel else [])\n    while wachtrij:\n        k = wachtrij.popleft()\n        resultaat.append(k.sleutel)\n        for kind in (k.links, k.rechts):\n            if kind is not None:\n                wachtrij.append(kind)\n    return resultaat\n\n\nwortel = None\nfor s in [8, 3, 10, 1, 6, 14, 4, 7, 13]:\n    wortel = voeg_toe(wortel, s)\nprint(inorder(wortel))  # [1, 3, 4, 6, 7, 8, 10, 13, 14]\n",[47,17221,17222,17235,17239,17243,17251,17268,17282,17294,17306,17310,17314,17331,17341,17356,17373,17400,17417,17443,17449,17453,17457,17473,17499,17532,17538,17542,17546,17562,17572,17578,17594,17620,17636,17662,17669,17686,17696,17713,17724,17740,17757,17770,17787,17817,17823,17827,17831,17845,17901,17906,17911,17925,17980,17985,17990,18004,18059,18064,18069,18083,18118,18128,18145,18165,18193,18206,18223,18231,18236,18241,18251,18300,18320],{"__ignoreMap":374},[384,17223,17224,17227,17230,17232],{"class":386,"line":387},[384,17225,17226],{"class":390},"from",[384,17228,17229],{"class":394}," collections ",[384,17231,9141],{"class":390},[384,17233,17234],{"class":394}," deque\n",[384,17236,17237],{"class":386,"line":414},[384,17238,1703],{"emptyLinePlaceholder":1702},[384,17240,17241],{"class":386,"line":500},[384,17242,1703],{"emptyLinePlaceholder":1702},[384,17244,17245,17247,17249],{"class":386,"line":602},[384,17246,8907],{"class":450},[384,17248,9661],{"class":8910},[384,17250,813],{"class":405},[384,17252,17253,17255,17257,17259,17261,17263,17266],{"class":386,"line":721},[384,17254,8918],{"class":450},[384,17256,8921],{"class":401},[384,17258,406],{"class":405},[384,17260,8927],{"class":8926},[384,17262,568],{"class":405},[384,17264,17265],{"class":1620}," sleutel",[384,17267,411],{"class":405},[384,17269,17270,17272,17274,17277,17279],{"class":386,"line":727},[384,17271,8934],{"class":394},[384,17273,150],{"class":405},[384,17275,17276],{"class":8939},"sleutel",[384,17278,2769],{"class":405},[384,17280,17281],{"class":394}," sleutel\n",[384,17283,17284,17286,17288,17290,17292],{"class":386,"line":733},[384,17285,8934],{"class":394},[384,17287,150],{"class":405},[384,17289,4435],{"class":8939},[384,17291,2769],{"class":405},[384,17293,10001],{"class":405},[384,17295,17296,17298,17300,17302,17304],{"class":386,"line":1299},[384,17297,8934],{"class":394},[384,17299,150],{"class":405},[384,17301,4450],{"class":8939},[384,17303,2769],{"class":405},[384,17305,10001],{"class":405},[384,17307,17308],{"class":386,"line":2790},[384,17309,1703],{"emptyLinePlaceholder":1702},[384,17311,17312],{"class":386,"line":2985},[384,17313,1703],{"emptyLinePlaceholder":1702},[384,17315,17316,17318,17320,17322,17325,17327,17329],{"class":386,"line":3009},[384,17317,1612],{"class":450},[384,17319,12595],{"class":401},[384,17321,406],{"class":405},[384,17323,17324],{"class":1620},"knoop",[384,17326,568],{"class":405},[384,17328,17265],{"class":1620},[384,17330,411],{"class":405},[384,17332,17333,17335,17337,17339],{"class":386,"line":3014},[384,17334,1636],{"class":390},[384,17336,10154],{"class":394},[384,17338,5525],{"class":405},[384,17340,5528],{"class":405},[384,17342,17343,17345,17347,17349,17351,17353],{"class":386,"line":3563},[384,17344,1651],{"class":390},[384,17346,9661],{"class":401},[384,17348,406],{"class":405},[384,17350,17276],{"class":401},[384,17352,863],{"class":405},[384,17354,17355],{"class":827},"  # nieuwe sleutel wordt een blad\n",[384,17357,17358,17360,17363,17365,17367,17369,17371],{"class":386,"line":3588},[384,17359,1636],{"class":390},[384,17361,17362],{"class":394}," sleutel ",[384,17364,468],{"class":405},[384,17366,10200],{"class":394},[384,17368,150],{"class":405},[384,17370,17276],{"class":8939},[384,17372,813],{"class":405},[384,17374,17375,17378,17380,17382,17384,17386,17388,17390,17392,17394,17396,17398],{"class":386,"line":3606},[384,17376,17377],{"class":394},"        knoop",[384,17379,150],{"class":405},[384,17381,4435],{"class":8939},[384,17383,2769],{"class":405},[384,17385,12595],{"class":401},[384,17387,406],{"class":405},[384,17389,17324],{"class":401},[384,17391,150],{"class":405},[384,17393,4435],{"class":8939},[384,17395,568],{"class":405},[384,17397,17265],{"class":401},[384,17399,3219],{"class":405},[384,17401,17402,17405,17407,17409,17411,17413,17415],{"class":386,"line":3611},[384,17403,17404],{"class":390},"    elif",[384,17406,17362],{"class":394},[384,17408,808],{"class":405},[384,17410,10200],{"class":394},[384,17412,150],{"class":405},[384,17414,17276],{"class":8939},[384,17416,813],{"class":405},[384,17418,17419,17421,17423,17425,17427,17429,17431,17433,17435,17437,17439,17441],{"class":386,"line":4541},[384,17420,17377],{"class":394},[384,17422,150],{"class":405},[384,17424,4450],{"class":8939},[384,17426,2769],{"class":405},[384,17428,12595],{"class":401},[384,17430,406],{"class":405},[384,17432,17324],{"class":401},[384,17434,150],{"class":405},[384,17436,4450],{"class":8939},[384,17438,568],{"class":405},[384,17440,17265],{"class":401},[384,17442,3219],{"class":405},[384,17444,17445,17447],{"class":386,"line":4562},[384,17446,1664],{"class":390},[384,17448,9849],{"class":394},[384,17450,17451],{"class":386,"line":4581},[384,17452,1703],{"emptyLinePlaceholder":1702},[384,17454,17455],{"class":386,"line":5021},[384,17456,1703],{"emptyLinePlaceholder":1702},[384,17458,17459,17461,17463,17465,17467,17469,17471],{"class":386,"line":5030},[384,17460,1612],{"class":450},[384,17462,12483],{"class":401},[384,17464,406],{"class":405},[384,17466,17324],{"class":1620},[384,17468,568],{"class":405},[384,17470,17265],{"class":1620},[384,17472,411],{"class":405},[384,17474,17475,17477,17479,17481,17483,17485,17487,17489,17491,17493,17495,17497],{"class":386,"line":9395},[384,17476,1357],{"class":390},[384,17478,10154],{"class":394},[384,17480,5525],{"class":405},[384,17482,9010],{"class":405},[384,17484,9754],{"class":405},[384,17486,2735],{"class":405},[384,17488,10200],{"class":394},[384,17490,150],{"class":405},[384,17492,17276],{"class":8939},[384,17494,10762],{"class":405},[384,17496,17265],{"class":394},[384,17498,813],{"class":405},[384,17500,17501,17503,17505,17507,17509,17511,17513,17515,17517,17519,17521,17523,17525,17527,17529],{"class":386,"line":9409},[384,17502,9798],{"class":394},[384,17504,456],{"class":405},[384,17506,10200],{"class":394},[384,17508,150],{"class":405},[384,17510,4435],{"class":8939},[384,17512,7384],{"class":390},[384,17514,17362],{"class":394},[384,17516,468],{"class":405},[384,17518,10200],{"class":394},[384,17520,150],{"class":405},[384,17522,17276],{"class":8939},[384,17524,4915],{"class":390},[384,17526,10200],{"class":394},[384,17528,150],{"class":405},[384,17530,17531],{"class":8939},"rechts\n",[384,17533,17534,17536],{"class":386,"line":9414},[384,17535,1664],{"class":390},[384,17537,9849],{"class":394},[384,17539,17540],{"class":386,"line":9972},[384,17541,1703],{"emptyLinePlaceholder":1702},[384,17543,17544],{"class":386,"line":9990},[384,17545,1703],{"emptyLinePlaceholder":1702},[384,17547,17548,17550,17552,17554,17556,17558,17560],{"class":386,"line":10004},[384,17549,1612],{"class":450},[384,17551,12754],{"class":401},[384,17553,406],{"class":405},[384,17555,17324],{"class":1620},[384,17557,568],{"class":405},[384,17559,17265],{"class":1620},[384,17561,411],{"class":405},[384,17563,17564,17566,17568,17570],{"class":386,"line":10299},[384,17565,1636],{"class":390},[384,17567,10154],{"class":394},[384,17569,5525],{"class":405},[384,17571,5528],{"class":405},[384,17573,17574,17576],{"class":386,"line":10316},[384,17575,1651],{"class":390},[384,17577,10001],{"class":405},[384,17579,17580,17582,17584,17586,17588,17590,17592],{"class":386,"line":10332},[384,17581,1636],{"class":390},[384,17583,17362],{"class":394},[384,17585,468],{"class":405},[384,17587,10200],{"class":394},[384,17589,150],{"class":405},[384,17591,17276],{"class":8939},[384,17593,813],{"class":405},[384,17595,17596,17598,17600,17602,17604,17606,17608,17610,17612,17614,17616,17618],{"class":386,"line":10350},[384,17597,17377],{"class":394},[384,17599,150],{"class":405},[384,17601,4435],{"class":8939},[384,17603,2769],{"class":405},[384,17605,12754],{"class":401},[384,17607,406],{"class":405},[384,17609,17324],{"class":401},[384,17611,150],{"class":405},[384,17613,4435],{"class":8939},[384,17615,568],{"class":405},[384,17617,17265],{"class":401},[384,17619,3219],{"class":405},[384,17621,17622,17624,17626,17628,17630,17632,17634],{"class":386,"line":10360},[384,17623,17404],{"class":390},[384,17625,17362],{"class":394},[384,17627,808],{"class":405},[384,17629,10200],{"class":394},[384,17631,150],{"class":405},[384,17633,17276],{"class":8939},[384,17635,813],{"class":405},[384,17637,17638,17640,17642,17644,17646,17648,17650,17652,17654,17656,17658,17660],{"class":386,"line":10365},[384,17639,17377],{"class":394},[384,17641,150],{"class":405},[384,17643,4450],{"class":8939},[384,17645,2769],{"class":405},[384,17647,12754],{"class":401},[384,17649,406],{"class":405},[384,17651,17324],{"class":401},[384,17653,150],{"class":405},[384,17655,4450],{"class":8939},[384,17657,568],{"class":405},[384,17659,17265],{"class":401},[384,17661,3219],{"class":405},[384,17663,17664,17667],{"class":386,"line":10374},[384,17665,17666],{"class":390},"    else",[384,17668,813],{"class":405},[384,17670,17671,17673,17675,17677,17679,17681,17683],{"class":386,"line":10379},[384,17672,577],{"class":390},[384,17674,10200],{"class":394},[384,17676,150],{"class":405},[384,17678,4435],{"class":8939},[384,17680,9821],{"class":405},[384,17682,9824],{"class":405},[384,17684,17685],{"class":827},"  # blad of alleen rechterkind\n",[384,17687,17688,17690,17692,17694],{"class":386,"line":12801},[384,17689,6483],{"class":390},[384,17691,10200],{"class":394},[384,17693,150],{"class":405},[384,17695,17531],{"class":8939},[384,17697,17698,17700,17702,17704,17706,17708,17710],{"class":386,"line":12824},[384,17699,577],{"class":390},[384,17701,10200],{"class":394},[384,17703,150],{"class":405},[384,17705,4450],{"class":8939},[384,17707,9821],{"class":405},[384,17709,9824],{"class":405},[384,17711,17712],{"class":827},"  # alleen linkerkind\n",[384,17714,17715,17717,17719,17721],{"class":386,"line":12829},[384,17716,6483],{"class":390},[384,17718,10200],{"class":394},[384,17720,150],{"class":405},[384,17722,17723],{"class":8939},"links\n",[384,17725,17726,17729,17731,17733,17735,17737],{"class":386,"line":12834},[384,17727,17728],{"class":394},"        opvolger ",[384,17730,456],{"class":405},[384,17732,10200],{"class":394},[384,17734,150],{"class":405},[384,17736,4450],{"class":8939},[384,17738,17739],{"class":827},"  # twee kinderen: kleinste in rechter deelboom\n",[384,17741,17742,17744,17747,17749,17751,17753,17755],{"class":386,"line":12850},[384,17743,2725],{"class":390},[384,17745,17746],{"class":394}," opvolger",[384,17748,150],{"class":405},[384,17750,4435],{"class":8939},[384,17752,9821],{"class":405},[384,17754,9010],{"class":405},[384,17756,5528],{"class":405},[384,17758,17759,17762,17764,17766,17768],{"class":386,"line":12890},[384,17760,17761],{"class":394},"            opvolger ",[384,17763,456],{"class":405},[384,17765,17746],{"class":394},[384,17767,150],{"class":405},[384,17769,17723],{"class":8939},[384,17771,17772,17774,17776,17778,17780,17782,17784],{"class":386,"line":12907},[384,17773,17377],{"class":394},[384,17775,150],{"class":405},[384,17777,17276],{"class":8939},[384,17779,2769],{"class":405},[384,17781,17746],{"class":394},[384,17783,150],{"class":405},[384,17785,17786],{"class":8939},"sleutel\n",[384,17788,17789,17791,17793,17795,17797,17799,17801,17803,17805,17807,17809,17811,17813,17815],{"class":386,"line":12949},[384,17790,17377],{"class":394},[384,17792,150],{"class":405},[384,17794,4450],{"class":8939},[384,17796,2769],{"class":405},[384,17798,12754],{"class":401},[384,17800,406],{"class":405},[384,17802,17324],{"class":401},[384,17804,150],{"class":405},[384,17806,4450],{"class":8939},[384,17808,568],{"class":405},[384,17810,17746],{"class":401},[384,17812,150],{"class":405},[384,17814,17276],{"class":8939},[384,17816,3219],{"class":405},[384,17818,17819,17821],{"class":386,"line":13633},[384,17820,1664],{"class":390},[384,17822,9849],{"class":394},[384,17824,17825],{"class":386,"line":15859},[384,17826,1703],{"emptyLinePlaceholder":1702},[384,17828,17829],{"class":386,"line":15864},[384,17830,1703],{"emptyLinePlaceholder":1702},[384,17832,17834,17836,17839,17841,17843],{"class":386,"line":17833},47,[384,17835,1612],{"class":450},[384,17837,17838],{"class":401}," preorder",[384,17840,406],{"class":405},[384,17842,2487],{"class":1620},[384,17844,411],{"class":405},[384,17846,17848,17850,17853,17855,17857,17859,17861,17863,17865,17867,17869,17871,17873,17875,17877,17879,17881,17883,17885,17887,17889,17891,17893,17895,17897,17899],{"class":386,"line":17847},48,[384,17849,1664],{"class":390},[384,17851,17852],{"class":405}," []",[384,17854,7384],{"class":390},[384,17856,2668],{"class":394},[384,17858,5525],{"class":405},[384,17860,9754],{"class":405},[384,17862,4915],{"class":390},[384,17864,12370],{"class":405},[384,17866,2487],{"class":394},[384,17868,150],{"class":405},[384,17870,17276],{"class":8939},[384,17872,586],{"class":405},[384,17874,1684],{"class":405},[384,17876,17838],{"class":401},[384,17878,406],{"class":405},[384,17880,2487],{"class":401},[384,17882,150],{"class":405},[384,17884,4435],{"class":8939},[384,17886,863],{"class":405},[384,17888,1684],{"class":405},[384,17890,17838],{"class":401},[384,17892,406],{"class":405},[384,17894,2487],{"class":401},[384,17896,150],{"class":405},[384,17898,4450],{"class":8939},[384,17900,3219],{"class":405},[384,17902,17904],{"class":386,"line":17903},49,[384,17905,1703],{"emptyLinePlaceholder":1702},[384,17907,17909],{"class":386,"line":17908},50,[384,17910,1703],{"emptyLinePlaceholder":1702},[384,17912,17914,17916,17919,17921,17923],{"class":386,"line":17913},51,[384,17915,1612],{"class":450},[384,17917,17918],{"class":401}," inorder",[384,17920,406],{"class":405},[384,17922,2487],{"class":1620},[384,17924,411],{"class":405},[384,17926,17928,17930,17932,17934,17936,17938,17940,17942,17944,17946,17948,17950,17952,17954,17956,17958,17960,17962,17964,17966,17968,17970,17972,17974,17976,17978],{"class":386,"line":17927},52,[384,17929,1664],{"class":390},[384,17931,17852],{"class":405},[384,17933,7384],{"class":390},[384,17935,2668],{"class":394},[384,17937,5525],{"class":405},[384,17939,9754],{"class":405},[384,17941,4915],{"class":390},[384,17943,17918],{"class":401},[384,17945,406],{"class":405},[384,17947,2487],{"class":401},[384,17949,150],{"class":405},[384,17951,4435],{"class":8939},[384,17953,863],{"class":405},[384,17955,1684],{"class":405},[384,17957,12370],{"class":405},[384,17959,2487],{"class":394},[384,17961,150],{"class":405},[384,17963,17276],{"class":8939},[384,17965,586],{"class":405},[384,17967,1684],{"class":405},[384,17969,17918],{"class":401},[384,17971,406],{"class":405},[384,17973,2487],{"class":401},[384,17975,150],{"class":405},[384,17977,4450],{"class":8939},[384,17979,3219],{"class":405},[384,17981,17983],{"class":386,"line":17982},53,[384,17984,1703],{"emptyLinePlaceholder":1702},[384,17986,17988],{"class":386,"line":17987},54,[384,17989,1703],{"emptyLinePlaceholder":1702},[384,17991,17993,17995,17998,18000,18002],{"class":386,"line":17992},55,[384,17994,1612],{"class":450},[384,17996,17997],{"class":401}," postorder",[384,17999,406],{"class":405},[384,18001,2487],{"class":1620},[384,18003,411],{"class":405},[384,18005,18007,18009,18011,18013,18015,18017,18019,18021,18023,18025,18027,18029,18031,18033,18035,18037,18039,18041,18043,18045,18047,18049,18051,18053,18055,18057],{"class":386,"line":18006},56,[384,18008,1664],{"class":390},[384,18010,17852],{"class":405},[384,18012,7384],{"class":390},[384,18014,2668],{"class":394},[384,18016,5525],{"class":405},[384,18018,9754],{"class":405},[384,18020,4915],{"class":390},[384,18022,17997],{"class":401},[384,18024,406],{"class":405},[384,18026,2487],{"class":401},[384,18028,150],{"class":405},[384,18030,4435],{"class":8939},[384,18032,863],{"class":405},[384,18034,1684],{"class":405},[384,18036,17997],{"class":401},[384,18038,406],{"class":405},[384,18040,2487],{"class":401},[384,18042,150],{"class":405},[384,18044,4450],{"class":8939},[384,18046,863],{"class":405},[384,18048,1684],{"class":405},[384,18050,12370],{"class":405},[384,18052,2487],{"class":394},[384,18054,150],{"class":405},[384,18056,17276],{"class":8939},[384,18058,432],{"class":405},[384,18060,18062],{"class":386,"line":18061},57,[384,18063,1703],{"emptyLinePlaceholder":1702},[384,18065,18067],{"class":386,"line":18066},58,[384,18068,1703],{"emptyLinePlaceholder":1702},[384,18070,18072,18074,18077,18079,18081],{"class":386,"line":18071},59,[384,18073,1612],{"class":450},[384,18075,18076],{"class":401}," level_order",[384,18078,406],{"class":405},[384,18080,16854],{"class":1620},[384,18082,411],{"class":405},[384,18084,18086,18089,18091,18094,18096,18099,18102,18104,18106,18108,18110,18113,18115],{"class":386,"line":18085},60,[384,18087,18088],{"class":394},"    resultaat",[384,18090,568],{"class":405},[384,18092,18093],{"class":394}," wachtrij ",[384,18095,456],{"class":405},[384,18097,18098],{"class":405}," [],",[384,18100,18101],{"class":401}," deque",[384,18103,1716],{"class":405},[384,18105,16854],{"class":401},[384,18107,586],{"class":405},[384,18109,7384],{"class":390},[384,18111,18112],{"class":401}," wortel ",[384,18114,12929],{"class":390},[384,18116,18117],{"class":405}," [])\n",[384,18119,18121,18123,18126],{"class":386,"line":18120},61,[384,18122,1357],{"class":390},[384,18124,18125],{"class":394}," wachtrij",[384,18127,813],{"class":405},[384,18129,18131,18134,18136,18138,18140,18143],{"class":386,"line":18130},62,[384,18132,18133],{"class":394},"        k ",[384,18135,456],{"class":405},[384,18137,18125],{"class":394},[384,18139,150],{"class":405},[384,18141,18142],{"class":401},"popleft",[384,18144,9058],{"class":405},[384,18146,18148,18151,18153,18155,18157,18159,18161,18163],{"class":386,"line":18147},63,[384,18149,18150],{"class":394},"        resultaat",[384,18152,150],{"class":405},[384,18154,4486],{"class":401},[384,18156,406],{"class":405},[384,18158,2487],{"class":401},[384,18160,150],{"class":405},[384,18162,17276],{"class":8939},[384,18164,3219],{"class":405},[384,18166,18168,18170,18173,18175,18177,18179,18181,18183,18185,18187,18189,18191],{"class":386,"line":18167},64,[384,18169,3262],{"class":390},[384,18171,18172],{"class":394}," kind ",[384,18174,398],{"class":390},[384,18176,18],{"class":405},[384,18178,2487],{"class":394},[384,18180,150],{"class":405},[384,18182,4435],{"class":8939},[384,18184,568],{"class":405},[384,18186,2872],{"class":394},[384,18188,150],{"class":405},[384,18190,4450],{"class":8939},[384,18192,411],{"class":405},[384,18194,18196,18198,18200,18202,18204],{"class":386,"line":18195},65,[384,18197,3283],{"class":390},[384,18199,18172],{"class":394},[384,18201,5525],{"class":405},[384,18203,9010],{"class":405},[384,18205,5528],{"class":405},[384,18207,18209,18212,18214,18216,18218,18221],{"class":386,"line":18208},66,[384,18210,18211],{"class":394},"                wachtrij",[384,18213,150],{"class":405},[384,18215,4486],{"class":401},[384,18217,406],{"class":405},[384,18219,18220],{"class":401},"kind",[384,18222,3219],{"class":405},[384,18224,18226,18228],{"class":386,"line":18225},67,[384,18227,1664],{"class":390},[384,18229,18230],{"class":394}," resultaat\n",[384,18232,18234],{"class":386,"line":18233},68,[384,18235,1703],{"emptyLinePlaceholder":1702},[384,18237,18239],{"class":386,"line":18238},69,[384,18240,1703],{"emptyLinePlaceholder":1702},[384,18242,18244,18247,18249],{"class":386,"line":18243},70,[384,18245,18246],{"class":394},"wortel ",[384,18248,456],{"class":405},[384,18250,10001],{"class":405},[384,18252,18254,18256,18259,18261,18263,18265,18267,18269,18271,18273,18275,18277,18279,18281,18283,18286,18288,18290,18292,18294,18296,18298],{"class":386,"line":18253},71,[384,18255,391],{"class":390},[384,18257,18258],{"class":394}," s ",[384,18260,398],{"class":390},[384,18262,12370],{"class":405},[384,18264,2089],{"class":459},[384,18266,568],{"class":405},[384,18268,1732],{"class":459},[384,18270,568],{"class":405},[384,18272,15045],{"class":459},[384,18274,568],{"class":405},[384,18276,565],{"class":459},[384,18278,568],{"class":405},[384,18280,15036],{"class":459},[384,18282,568],{"class":405},[384,18284,18285],{"class":459}," 14",[384,18287,568],{"class":405},[384,18289,1738],{"class":459},[384,18291,568],{"class":405},[384,18293,1727],{"class":459},[384,18295,568],{"class":405},[384,18297,15050],{"class":459},[384,18299,599],{"class":405},[384,18301,18303,18306,18308,18310,18312,18314,18316,18318],{"class":386,"line":18302},72,[384,18304,18305],{"class":394},"    wortel ",[384,18307,456],{"class":405},[384,18309,12595],{"class":401},[384,18311,406],{"class":405},[384,18313,16854],{"class":401},[384,18315,568],{"class":405},[384,18317,10682],{"class":401},[384,18319,3219],{"class":405},[384,18321,18323,18325,18327,18330,18332,18334,18336],{"class":386,"line":18322},73,[384,18324,1708],{"class":401},[384,18326,406],{"class":405},[384,18328,18329],{"class":401},"inorder",[384,18331,406],{"class":405},[384,18333,16854],{"class":401},[384,18335,1741],{"class":405},[384,18337,18338],{"class":827},"  # [1, 3, 4, 6, 7, 8, 10, 13, 14]\n",[372,18340,18341],{"v-slot:java":374},[376,18342,18344],{"className":437,"code":18343,"language":439,"meta":374,"style":374},"import java.util.ArrayDeque;\nimport java.util.ArrayList;\nimport java.util.Deque;\nimport java.util.List;\n\nstatic class Knoop {\n    int sleutel;\n    Knoop links, rechts;\n\n    Knoop(int sleutel) {\n        this.sleutel = sleutel;\n    }\n}\n\nstatic Knoop voegToe(Knoop knoop, int sleutel) {\n    if (knoop == null) return new Knoop(sleutel); \u002F\u002F nieuwe sleutel wordt een blad\n    if (sleutel \u003C knoop.sleutel) knoop.links = voegToe(knoop.links, sleutel);\n    else if (sleutel > knoop.sleutel) knoop.rechts = voegToe(knoop.rechts, sleutel);\n    return knoop;\n}\n\nstatic Knoop zoek(Knoop knoop, int sleutel) {\n    while (knoop != null && knoop.sleutel != sleutel) {\n        knoop = sleutel \u003C knoop.sleutel ? knoop.links : knoop.rechts;\n    }\n    return knoop;\n}\n\nstatic Knoop verwijder(Knoop knoop, int sleutel) {\n    if (knoop == null) return null;\n    if (sleutel \u003C knoop.sleutel) {\n        knoop.links = verwijder(knoop.links, sleutel);\n    } else if (sleutel > knoop.sleutel) {\n        knoop.rechts = verwijder(knoop.rechts, sleutel);\n    } else {\n        if (knoop.links == null) return knoop.rechts; \u002F\u002F blad of alleen rechterkind\n        if (knoop.rechts == null) return knoop.links; \u002F\u002F alleen linkerkind\n        Knoop opvolger = knoop.rechts; \u002F\u002F twee kinderen: kleinste in rechter deelboom\n        while (opvolger.links != null) opvolger = opvolger.links;\n        knoop.sleutel = opvolger.sleutel;\n        knoop.rechts = verwijder(knoop.rechts, opvolger.sleutel);\n    }\n    return knoop;\n}\n\nstatic void preorder(Knoop k, List\u003CInteger> uit) {\n    if (k == null) return;\n    uit.add(k.sleutel);\n    preorder(k.links, uit);\n    preorder(k.rechts, uit);\n}\n\nstatic void inorder(Knoop k, List\u003CInteger> uit) {\n    if (k == null) return;\n    inorder(k.links, uit);\n    uit.add(k.sleutel);\n    inorder(k.rechts, uit);\n}\n\nstatic void postorder(Knoop k, List\u003CInteger> uit) {\n    if (k == null) return;\n    postorder(k.links, uit);\n    postorder(k.rechts, uit);\n    uit.add(k.sleutel);\n}\n\nstatic List\u003CInteger> levelOrder(Knoop wortel) {\n    List\u003CInteger> resultaat = new ArrayList\u003C>();\n    Deque\u003CKnoop> wachtrij = new ArrayDeque\u003C>();\n    if (wortel != null) wachtrij.add(wortel);\n    while (!wachtrij.isEmpty()) {\n        Knoop k = wachtrij.poll();\n        resultaat.add(k.sleutel);\n        if (k.links != null) wachtrij.add(k.links);\n        if (k.rechts != null) wachtrij.add(k.rechts);\n    }\n    return resultaat;\n}\n",[47,18345,18346,18362,18378,18395,18411,18415,18425,18433,18446,18450,18464,18477,18481,18485,18489,18514,18542,18584,18628,18636,18640,18644,18668,18697,18732,18736,18744,18748,18752,18776,18792,18812,18838,18863,18889,18897,18926,18955,18975,19003,19021,19051,19055,19063,19067,19071,19102,19118,19137,19156,19174,19178,19182,19212,19228,19247,19265,19283,19287,19291,19321,19337,19356,19374,19392,19396,19400,19426,19448,19470,19494,19510,19526,19544,19577,19610,19615,19625],{"__ignoreMap":374},[384,18347,18348,18350,18352,18354,18356,18358,18360],{"class":386,"line":387},[384,18349,9141],{"class":459},[384,18351,9144],{"class":450},[384,18353,150],{"class":405},[384,18355,4694],{"class":450},[384,18357,150],{"class":405},[384,18359,9440],{"class":450},[384,18361,848],{"class":405},[384,18363,18364,18366,18368,18370,18372,18374,18376],{"class":386,"line":414},[384,18365,9141],{"class":459},[384,18367,9144],{"class":450},[384,18369,150],{"class":405},[384,18371,4694],{"class":450},[384,18373,150],{"class":405},[384,18375,8885],{"class":450},[384,18377,848],{"class":405},[384,18379,18380,18382,18384,18386,18388,18390,18393],{"class":386,"line":500},[384,18381,9141],{"class":459},[384,18383,9144],{"class":450},[384,18385,150],{"class":405},[384,18387,4694],{"class":450},[384,18389,150],{"class":405},[384,18391,18392],{"class":450},"Deque",[384,18394,848],{"class":405},[384,18396,18397,18399,18401,18403,18405,18407,18409],{"class":386,"line":602},[384,18398,9141],{"class":459},[384,18400,9144],{"class":450},[384,18402,150],{"class":405},[384,18404,4694],{"class":450},[384,18406,150],{"class":405},[384,18408,15166],{"class":450},[384,18410,848],{"class":405},[384,18412,18413],{"class":386,"line":721},[384,18414,1703],{"emptyLinePlaceholder":1702},[384,18416,18417,18419,18421,18423],{"class":386,"line":727},[384,18418,1756],{"class":450},[384,18420,10034],{"class":450},[384,18422,9661],{"class":8910},[384,18424,482],{"class":405},[384,18426,18427,18429,18431],{"class":386,"line":733},[384,18428,1417],{"class":450},[384,18430,17265],{"class":394},[384,18432,848],{"class":405},[384,18434,18435,18438,18440,18442,18444],{"class":386,"line":1299},[384,18436,18437],{"class":450},"    Knoop",[384,18439,4459],{"class":394},[384,18441,568],{"class":405},[384,18443,4470],{"class":394},[384,18445,848],{"class":405},[384,18447,18448],{"class":386,"line":2790},[384,18449,1703],{"emptyLinePlaceholder":1702},[384,18451,18452,18454,18456,18458,18460,18462],{"class":386,"line":2985},[384,18453,18437],{"class":401},[384,18455,406],{"class":405},[384,18457,451],{"class":450},[384,18459,17265],{"class":1620},[384,18461,863],{"class":405},[384,18463,482],{"class":405},[384,18465,18466,18468,18471,18473,18475],{"class":386,"line":3009},[384,18467,13095],{"class":405},[384,18469,18470],{"class":394},"sleutel ",[384,18472,456],{"class":405},[384,18474,17265],{"class":394},[384,18476,848],{"class":405},[384,18478,18479],{"class":386,"line":3014},[384,18480,730],{"class":405},[384,18482,18483],{"class":386,"line":3563},[384,18484,503],{"class":405},[384,18486,18487],{"class":386,"line":3588},[384,18488,1703],{"emptyLinePlaceholder":1702},[384,18490,18491,18493,18495,18497,18499,18502,18504,18506,18508,18510,18512],{"class":386,"line":3606},[384,18492,1756],{"class":450},[384,18494,9661],{"class":450},[384,18496,13367],{"class":401},[384,18498,406],{"class":405},[384,18500,18501],{"class":450},"Knoop",[384,18503,10200],{"class":394},[384,18505,568],{"class":405},[384,18507,1759],{"class":450},[384,18509,17265],{"class":394},[384,18511,863],{"class":405},[384,18513,482],{"class":405},[384,18515,18516,18518,18520,18523,18525,18527,18529,18531,18533,18535,18537,18539],{"class":386,"line":3611},[384,18517,1636],{"class":390},[384,18519,18],{"class":405},[384,18521,18522],{"class":394},"knoop ",[384,18524,1642],{"class":405},[384,18526,10180],{"class":405},[384,18528,13303],{"class":390},[384,18530,4786],{"class":390},[384,18532,9661],{"class":401},[384,18534,406],{"class":405},[384,18536,17276],{"class":394},[384,18538,9234],{"class":405},[384,18540,18541],{"class":827}," \u002F\u002F nieuwe sleutel wordt een blad\n",[384,18543,18544,18546,18548,18550,18552,18554,18556,18558,18560,18562,18564,18566,18568,18570,18572,18574,18576,18578,18580,18582],{"class":386,"line":4541},[384,18545,1636],{"class":390},[384,18547,18],{"class":405},[384,18549,18470],{"class":394},[384,18551,468],{"class":405},[384,18553,10200],{"class":394},[384,18555,150],{"class":405},[384,18557,17276],{"class":394},[384,18559,863],{"class":405},[384,18561,10200],{"class":394},[384,18563,150],{"class":405},[384,18565,15616],{"class":394},[384,18567,456],{"class":405},[384,18569,13367],{"class":401},[384,18571,406],{"class":405},[384,18573,17324],{"class":394},[384,18575,150],{"class":405},[384,18577,4435],{"class":394},[384,18579,568],{"class":405},[384,18581,17265],{"class":394},[384,18583,5962],{"class":405},[384,18585,18586,18588,18590,18592,18594,18596,18598,18600,18602,18604,18606,18608,18610,18612,18614,18616,18618,18620,18622,18624,18626],{"class":386,"line":4562},[384,18587,17666],{"class":390},[384,18589,7384],{"class":390},[384,18591,18],{"class":405},[384,18593,18470],{"class":394},[384,18595,808],{"class":405},[384,18597,10200],{"class":394},[384,18599,150],{"class":405},[384,18601,17276],{"class":394},[384,18603,863],{"class":405},[384,18605,10200],{"class":394},[384,18607,150],{"class":405},[384,18609,15670],{"class":394},[384,18611,456],{"class":405},[384,18613,13367],{"class":401},[384,18615,406],{"class":405},[384,18617,17324],{"class":394},[384,18619,150],{"class":405},[384,18621,4450],{"class":394},[384,18623,568],{"class":405},[384,18625,17265],{"class":394},[384,18627,5962],{"class":405},[384,18629,18630,18632,18634],{"class":386,"line":4581},[384,18631,1664],{"class":390},[384,18633,10200],{"class":394},[384,18635,848],{"class":405},[384,18637,18638],{"class":386,"line":5021},[384,18639,503],{"class":405},[384,18641,18642],{"class":386,"line":5030},[384,18643,1703],{"emptyLinePlaceholder":1702},[384,18645,18646,18648,18650,18652,18654,18656,18658,18660,18662,18664,18666],{"class":386,"line":9395},[384,18647,1756],{"class":450},[384,18649,9661],{"class":450},[384,18651,12483],{"class":401},[384,18653,406],{"class":405},[384,18655,18501],{"class":450},[384,18657,10200],{"class":394},[384,18659,568],{"class":405},[384,18661,1759],{"class":450},[384,18663,17265],{"class":394},[384,18665,863],{"class":405},[384,18667,482],{"class":405},[384,18669,18670,18672,18674,18676,18678,18681,18683,18685,18687,18689,18691,18693,18695],{"class":386,"line":9409},[384,18671,1357],{"class":390},[384,18673,18],{"class":405},[384,18675,18522],{"class":394},[384,18677,12792],{"class":405},[384,18679,18680],{"class":405}," null",[384,18682,2930],{"class":405},[384,18684,10200],{"class":394},[384,18686,150],{"class":405},[384,18688,18470],{"class":394},[384,18690,12792],{"class":405},[384,18692,17265],{"class":394},[384,18694,863],{"class":405},[384,18696,482],{"class":405},[384,18698,18699,18701,18703,18705,18707,18709,18711,18713,18716,18718,18720,18722,18724,18726,18728,18730],{"class":386,"line":9414},[384,18700,9798],{"class":394},[384,18702,456],{"class":405},[384,18704,17362],{"class":394},[384,18706,468],{"class":405},[384,18708,10200],{"class":394},[384,18710,150],{"class":405},[384,18712,18470],{"class":394},[384,18714,18715],{"class":390},"?",[384,18717,10200],{"class":394},[384,18719,150],{"class":405},[384,18721,15616],{"class":394},[384,18723,1911],{"class":390},[384,18725,10200],{"class":394},[384,18727,150],{"class":405},[384,18729,4450],{"class":394},[384,18731,848],{"class":405},[384,18733,18734],{"class":386,"line":9972},[384,18735,730],{"class":405},[384,18737,18738,18740,18742],{"class":386,"line":9990},[384,18739,1664],{"class":390},[384,18741,10200],{"class":394},[384,18743,848],{"class":405},[384,18745,18746],{"class":386,"line":10004},[384,18747,503],{"class":405},[384,18749,18750],{"class":386,"line":10299},[384,18751,1703],{"emptyLinePlaceholder":1702},[384,18753,18754,18756,18758,18760,18762,18764,18766,18768,18770,18772,18774],{"class":386,"line":10316},[384,18755,1756],{"class":450},[384,18757,9661],{"class":450},[384,18759,12754],{"class":401},[384,18761,406],{"class":405},[384,18763,18501],{"class":450},[384,18765,10200],{"class":394},[384,18767,568],{"class":405},[384,18769,1759],{"class":450},[384,18771,17265],{"class":394},[384,18773,863],{"class":405},[384,18775,482],{"class":405},[384,18777,18778,18780,18782,18784,18786,18788,18790],{"class":386,"line":10332},[384,18779,1636],{"class":390},[384,18781,18],{"class":405},[384,18783,18522],{"class":394},[384,18785,1642],{"class":405},[384,18787,10180],{"class":405},[384,18789,13303],{"class":390},[384,18791,10357],{"class":405},[384,18793,18794,18796,18798,18800,18802,18804,18806,18808,18810],{"class":386,"line":10350},[384,18795,1636],{"class":390},[384,18797,18],{"class":405},[384,18799,18470],{"class":394},[384,18801,468],{"class":405},[384,18803,10200],{"class":394},[384,18805,150],{"class":405},[384,18807,17276],{"class":394},[384,18809,863],{"class":405},[384,18811,482],{"class":405},[384,18813,18814,18816,18818,18820,18822,18824,18826,18828,18830,18832,18834,18836],{"class":386,"line":10360},[384,18815,17377],{"class":394},[384,18817,150],{"class":405},[384,18819,15616],{"class":394},[384,18821,456],{"class":405},[384,18823,12754],{"class":401},[384,18825,406],{"class":405},[384,18827,17324],{"class":394},[384,18829,150],{"class":405},[384,18831,4435],{"class":394},[384,18833,568],{"class":405},[384,18835,17265],{"class":394},[384,18837,5962],{"class":405},[384,18839,18840,18843,18845,18847,18849,18851,18853,18855,18857,18859,18861],{"class":386,"line":10365},[384,18841,18842],{"class":405},"    }",[384,18844,4915],{"class":390},[384,18846,7384],{"class":390},[384,18848,18],{"class":405},[384,18850,18470],{"class":394},[384,18852,808],{"class":405},[384,18854,10200],{"class":394},[384,18856,150],{"class":405},[384,18858,17276],{"class":394},[384,18860,863],{"class":405},[384,18862,482],{"class":405},[384,18864,18865,18867,18869,18871,18873,18875,18877,18879,18881,18883,18885,18887],{"class":386,"line":10374},[384,18866,17377],{"class":394},[384,18868,150],{"class":405},[384,18870,15670],{"class":394},[384,18872,456],{"class":405},[384,18874,12754],{"class":401},[384,18876,406],{"class":405},[384,18878,17324],{"class":394},[384,18880,150],{"class":405},[384,18882,4450],{"class":394},[384,18884,568],{"class":405},[384,18886,17265],{"class":394},[384,18888,5962],{"class":405},[384,18890,18891,18893,18895],{"class":386,"line":10379},[384,18892,18842],{"class":405},[384,18894,4915],{"class":390},[384,18896,482],{"class":405},[384,18898,18899,18901,18903,18905,18907,18909,18911,18913,18915,18917,18919,18921,18923],{"class":386,"line":12801},[384,18900,577],{"class":390},[384,18902,18],{"class":405},[384,18904,17324],{"class":394},[384,18906,150],{"class":405},[384,18908,15616],{"class":394},[384,18910,1642],{"class":405},[384,18912,10180],{"class":405},[384,18914,13303],{"class":390},[384,18916,10200],{"class":394},[384,18918,150],{"class":405},[384,18920,4450],{"class":394},[384,18922,463],{"class":405},[384,18924,18925],{"class":827}," \u002F\u002F blad of alleen rechterkind\n",[384,18927,18928,18930,18932,18934,18936,18938,18940,18942,18944,18946,18948,18950,18952],{"class":386,"line":12824},[384,18929,577],{"class":390},[384,18931,18],{"class":405},[384,18933,17324],{"class":394},[384,18935,150],{"class":405},[384,18937,15670],{"class":394},[384,18939,1642],{"class":405},[384,18941,10180],{"class":405},[384,18943,13303],{"class":390},[384,18945,10200],{"class":394},[384,18947,150],{"class":405},[384,18949,4435],{"class":394},[384,18951,463],{"class":405},[384,18953,18954],{"class":827}," \u002F\u002F alleen linkerkind\n",[384,18956,18957,18959,18962,18964,18966,18968,18970,18972],{"class":386,"line":12829},[384,18958,10051],{"class":450},[384,18960,18961],{"class":394}," opvolger ",[384,18963,456],{"class":405},[384,18965,10200],{"class":394},[384,18967,150],{"class":405},[384,18969,4450],{"class":394},[384,18971,463],{"class":405},[384,18973,18974],{"class":827}," \u002F\u002F twee kinderen: kleinste in rechter deelboom\n",[384,18976,18977,18979,18981,18983,18985,18987,18989,18991,18993,18995,18997,18999,19001],{"class":386,"line":12834},[384,18978,2725],{"class":390},[384,18980,18],{"class":405},[384,18982,17047],{"class":394},[384,18984,150],{"class":405},[384,18986,15616],{"class":394},[384,18988,12792],{"class":405},[384,18990,10180],{"class":405},[384,18992,18961],{"class":394},[384,18994,456],{"class":405},[384,18996,17746],{"class":394},[384,18998,150],{"class":405},[384,19000,4435],{"class":394},[384,19002,848],{"class":405},[384,19004,19005,19007,19009,19011,19013,19015,19017,19019],{"class":386,"line":12850},[384,19006,17377],{"class":394},[384,19008,150],{"class":405},[384,19010,18470],{"class":394},[384,19012,456],{"class":405},[384,19014,17746],{"class":394},[384,19016,150],{"class":405},[384,19018,17276],{"class":394},[384,19020,848],{"class":405},[384,19022,19023,19025,19027,19029,19031,19033,19035,19037,19039,19041,19043,19045,19047,19049],{"class":386,"line":12890},[384,19024,17377],{"class":394},[384,19026,150],{"class":405},[384,19028,15670],{"class":394},[384,19030,456],{"class":405},[384,19032,12754],{"class":401},[384,19034,406],{"class":405},[384,19036,17324],{"class":394},[384,19038,150],{"class":405},[384,19040,4450],{"class":394},[384,19042,568],{"class":405},[384,19044,17746],{"class":394},[384,19046,150],{"class":405},[384,19048,17276],{"class":394},[384,19050,5962],{"class":405},[384,19052,19053],{"class":386,"line":12907},[384,19054,730],{"class":405},[384,19056,19057,19059,19061],{"class":386,"line":12949},[384,19058,1664],{"class":390},[384,19060,10200],{"class":394},[384,19062,848],{"class":405},[384,19064,19065],{"class":386,"line":13633},[384,19066,503],{"class":405},[384,19068,19069],{"class":386,"line":15859},[384,19070,1703],{"emptyLinePlaceholder":1702},[384,19072,19073,19075,19077,19079,19081,19083,19085,19087,19089,19091,19093,19095,19098,19100],{"class":386,"line":15864},[384,19074,1756],{"class":450},[384,19076,2825],{"class":450},[384,19078,17838],{"class":401},[384,19080,406],{"class":405},[384,19082,18501],{"class":450},[384,19084,2872],{"class":394},[384,19086,568],{"class":405},[384,19088,15190],{"class":450},[384,19090,468],{"class":405},[384,19092,9182],{"class":394},[384,19094,808],{"class":405},[384,19096,19097],{"class":394}," uit",[384,19099,863],{"class":405},[384,19101,482],{"class":405},[384,19103,19104,19106,19108,19110,19112,19114,19116],{"class":386,"line":17833},[384,19105,1636],{"class":390},[384,19107,18],{"class":405},[384,19109,3327],{"class":394},[384,19111,1642],{"class":405},[384,19113,10180],{"class":405},[384,19115,13303],{"class":390},[384,19117,848],{"class":405},[384,19119,19120,19123,19125,19127,19129,19131,19133,19135],{"class":386,"line":17847},[384,19121,19122],{"class":394},"    uit",[384,19124,150],{"class":405},[384,19126,9227],{"class":401},[384,19128,406],{"class":405},[384,19130,2487],{"class":394},[384,19132,150],{"class":405},[384,19134,17276],{"class":394},[384,19136,5962],{"class":405},[384,19138,19139,19142,19144,19146,19148,19150,19152,19154],{"class":386,"line":17903},[384,19140,19141],{"class":401},"    preorder",[384,19143,406],{"class":405},[384,19145,2487],{"class":394},[384,19147,150],{"class":405},[384,19149,4435],{"class":394},[384,19151,568],{"class":405},[384,19153,19097],{"class":394},[384,19155,5962],{"class":405},[384,19157,19158,19160,19162,19164,19166,19168,19170,19172],{"class":386,"line":17908},[384,19159,19141],{"class":401},[384,19161,406],{"class":405},[384,19163,2487],{"class":394},[384,19165,150],{"class":405},[384,19167,4450],{"class":394},[384,19169,568],{"class":405},[384,19171,19097],{"class":394},[384,19173,5962],{"class":405},[384,19175,19176],{"class":386,"line":17913},[384,19177,503],{"class":405},[384,19179,19180],{"class":386,"line":17927},[384,19181,1703],{"emptyLinePlaceholder":1702},[384,19183,19184,19186,19188,19190,19192,19194,19196,19198,19200,19202,19204,19206,19208,19210],{"class":386,"line":17982},[384,19185,1756],{"class":450},[384,19187,2825],{"class":450},[384,19189,17918],{"class":401},[384,19191,406],{"class":405},[384,19193,18501],{"class":450},[384,19195,2872],{"class":394},[384,19197,568],{"class":405},[384,19199,15190],{"class":450},[384,19201,468],{"class":405},[384,19203,9182],{"class":394},[384,19205,808],{"class":405},[384,19207,19097],{"class":394},[384,19209,863],{"class":405},[384,19211,482],{"class":405},[384,19213,19214,19216,19218,19220,19222,19224,19226],{"class":386,"line":17987},[384,19215,1636],{"class":390},[384,19217,18],{"class":405},[384,19219,3327],{"class":394},[384,19221,1642],{"class":405},[384,19223,10180],{"class":405},[384,19225,13303],{"class":390},[384,19227,848],{"class":405},[384,19229,19230,19233,19235,19237,19239,19241,19243,19245],{"class":386,"line":17992},[384,19231,19232],{"class":401},"    inorder",[384,19234,406],{"class":405},[384,19236,2487],{"class":394},[384,19238,150],{"class":405},[384,19240,4435],{"class":394},[384,19242,568],{"class":405},[384,19244,19097],{"class":394},[384,19246,5962],{"class":405},[384,19248,19249,19251,19253,19255,19257,19259,19261,19263],{"class":386,"line":18006},[384,19250,19122],{"class":394},[384,19252,150],{"class":405},[384,19254,9227],{"class":401},[384,19256,406],{"class":405},[384,19258,2487],{"class":394},[384,19260,150],{"class":405},[384,19262,17276],{"class":394},[384,19264,5962],{"class":405},[384,19266,19267,19269,19271,19273,19275,19277,19279,19281],{"class":386,"line":18061},[384,19268,19232],{"class":401},[384,19270,406],{"class":405},[384,19272,2487],{"class":394},[384,19274,150],{"class":405},[384,19276,4450],{"class":394},[384,19278,568],{"class":405},[384,19280,19097],{"class":394},[384,19282,5962],{"class":405},[384,19284,19285],{"class":386,"line":18066},[384,19286,503],{"class":405},[384,19288,19289],{"class":386,"line":18071},[384,19290,1703],{"emptyLinePlaceholder":1702},[384,19292,19293,19295,19297,19299,19301,19303,19305,19307,19309,19311,19313,19315,19317,19319],{"class":386,"line":18085},[384,19294,1756],{"class":450},[384,19296,2825],{"class":450},[384,19298,17997],{"class":401},[384,19300,406],{"class":405},[384,19302,18501],{"class":450},[384,19304,2872],{"class":394},[384,19306,568],{"class":405},[384,19308,15190],{"class":450},[384,19310,468],{"class":405},[384,19312,9182],{"class":394},[384,19314,808],{"class":405},[384,19316,19097],{"class":394},[384,19318,863],{"class":405},[384,19320,482],{"class":405},[384,19322,19323,19325,19327,19329,19331,19333,19335],{"class":386,"line":18120},[384,19324,1636],{"class":390},[384,19326,18],{"class":405},[384,19328,3327],{"class":394},[384,19330,1642],{"class":405},[384,19332,10180],{"class":405},[384,19334,13303],{"class":390},[384,19336,848],{"class":405},[384,19338,19339,19342,19344,19346,19348,19350,19352,19354],{"class":386,"line":18130},[384,19340,19341],{"class":401},"    postorder",[384,19343,406],{"class":405},[384,19345,2487],{"class":394},[384,19347,150],{"class":405},[384,19349,4435],{"class":394},[384,19351,568],{"class":405},[384,19353,19097],{"class":394},[384,19355,5962],{"class":405},[384,19357,19358,19360,19362,19364,19366,19368,19370,19372],{"class":386,"line":18147},[384,19359,19341],{"class":401},[384,19361,406],{"class":405},[384,19363,2487],{"class":394},[384,19365,150],{"class":405},[384,19367,4450],{"class":394},[384,19369,568],{"class":405},[384,19371,19097],{"class":394},[384,19373,5962],{"class":405},[384,19375,19376,19378,19380,19382,19384,19386,19388,19390],{"class":386,"line":18167},[384,19377,19122],{"class":394},[384,19379,150],{"class":405},[384,19381,9227],{"class":401},[384,19383,406],{"class":405},[384,19385,2487],{"class":394},[384,19387,150],{"class":405},[384,19389,17276],{"class":394},[384,19391,5962],{"class":405},[384,19393,19394],{"class":386,"line":18195},[384,19395,503],{"class":405},[384,19397,19398],{"class":386,"line":18208},[384,19399,1703],{"emptyLinePlaceholder":1702},[384,19401,19402,19404,19406,19408,19410,19412,19415,19417,19419,19422,19424],{"class":386,"line":18225},[384,19403,1756],{"class":450},[384,19405,15190],{"class":450},[384,19407,468],{"class":405},[384,19409,9182],{"class":394},[384,19411,808],{"class":405},[384,19413,19414],{"class":401}," levelOrder",[384,19416,406],{"class":405},[384,19418,18501],{"class":450},[384,19420,19421],{"class":394}," wortel",[384,19423,863],{"class":405},[384,19425,482],{"class":405},[384,19427,19428,19431,19433,19435,19437,19440,19442,19444,19446],{"class":386,"line":18233},[384,19429,19430],{"class":450},"    List",[384,19432,468],{"class":405},[384,19434,9182],{"class":450},[384,19436,808],{"class":405},[384,19438,19439],{"class":394}," resultaat ",[384,19441,456],{"class":405},[384,19443,4786],{"class":390},[384,19445,9177],{"class":450},[384,19447,9196],{"class":405},[384,19449,19450,19453,19455,19457,19459,19461,19463,19465,19468],{"class":386,"line":18238},[384,19451,19452],{"class":450},"    Deque",[384,19454,468],{"class":405},[384,19456,18501],{"class":450},[384,19458,808],{"class":405},[384,19460,18093],{"class":394},[384,19462,456],{"class":405},[384,19464,4786],{"class":390},[384,19466,19467],{"class":450}," ArrayDeque",[384,19469,9196],{"class":405},[384,19471,19472,19474,19476,19478,19480,19482,19484,19486,19488,19490,19492],{"class":386,"line":18243},[384,19473,1636],{"class":390},[384,19475,18],{"class":405},[384,19477,18246],{"class":394},[384,19479,12792],{"class":405},[384,19481,10180],{"class":405},[384,19483,18125],{"class":394},[384,19485,150],{"class":405},[384,19487,9227],{"class":401},[384,19489,406],{"class":405},[384,19491,16854],{"class":394},[384,19493,5962],{"class":405},[384,19495,19496,19498,19500,19502,19504,19506,19508],{"class":386,"line":18253},[384,19497,1357],{"class":390},[384,19499,15455],{"class":405},[384,19501,8468],{"class":394},[384,19503,150],{"class":405},[384,19505,9269],{"class":401},[384,19507,9272],{"class":405},[384,19509,482],{"class":405},[384,19511,19512,19514,19516,19518,19520,19522,19524],{"class":386,"line":18302},[384,19513,10051],{"class":450},[384,19515,2668],{"class":394},[384,19517,456],{"class":405},[384,19519,18125],{"class":394},[384,19521,150],{"class":405},[384,19523,16477],{"class":401},[384,19525,9406],{"class":405},[384,19527,19528,19530,19532,19534,19536,19538,19540,19542],{"class":386,"line":18322},[384,19529,18150],{"class":394},[384,19531,150],{"class":405},[384,19533,9227],{"class":401},[384,19535,406],{"class":405},[384,19537,2487],{"class":394},[384,19539,150],{"class":405},[384,19541,17276],{"class":394},[384,19543,5962],{"class":405},[384,19545,19547,19549,19551,19553,19555,19557,19559,19561,19563,19565,19567,19569,19571,19573,19575],{"class":386,"line":19546},74,[384,19548,577],{"class":390},[384,19550,18],{"class":405},[384,19552,2487],{"class":394},[384,19554,150],{"class":405},[384,19556,15616],{"class":394},[384,19558,12792],{"class":405},[384,19560,10180],{"class":405},[384,19562,18125],{"class":394},[384,19564,150],{"class":405},[384,19566,9227],{"class":401},[384,19568,406],{"class":405},[384,19570,2487],{"class":394},[384,19572,150],{"class":405},[384,19574,4435],{"class":394},[384,19576,5962],{"class":405},[384,19578,19580,19582,19584,19586,19588,19590,19592,19594,19596,19598,19600,19602,19604,19606,19608],{"class":386,"line":19579},75,[384,19581,577],{"class":390},[384,19583,18],{"class":405},[384,19585,2487],{"class":394},[384,19587,150],{"class":405},[384,19589,15670],{"class":394},[384,19591,12792],{"class":405},[384,19593,10180],{"class":405},[384,19595,18125],{"class":394},[384,19597,150],{"class":405},[384,19599,9227],{"class":401},[384,19601,406],{"class":405},[384,19603,2487],{"class":394},[384,19605,150],{"class":405},[384,19607,4450],{"class":394},[384,19609,5962],{"class":405},[384,19611,19613],{"class":386,"line":19612},76,[384,19614,730],{"class":405},[384,19616,19618,19620,19623],{"class":386,"line":19617},77,[384,19619,1664],{"class":390},[384,19621,19622],{"class":394}," resultaat",[384,19624,848],{"class":405},[384,19626,19628],{"class":386,"line":19627},78,[384,19629,503],{"class":405},[39,19631,19633],{"id":19632},"gebalanceerd-of-scheef","Gebalanceerd of scheef",[11,19635,19636,19637,19640,19641,19643,19644,19646],{},"Alle operaties kosten ",[47,19638,19639],{},"O(h)",", met ",[47,19642,13262],{}," de hoogte van de boom. Hoe hoog is een boom met ",[47,19645,49],{}," knopen?",[56,19648,19649,19666],{},[59,19650,19651,19654,19655,19657,19658,19661,19662,19665],{},[15,19652,19653],{},"Gebalanceerd:"," elk niveau is (bijna) vol. Een boom met hoogte ",[47,19656,13262],{}," bevat dan tot ",[47,19659,19660],{},"2^(h+1) - 1","\nknopen, dus ",[47,19663,19664],{},"h ≈ log n",". Met een miljoen sleutels heb je ongeveer twintig stappen nodig.",[59,19667,19668,18,19671,19674,19675,19677,19678,19681,19682,150],{},[15,19669,19670],{},"Scheef",[20,19672,19673],{},"degenerate tree","): voeg je ",[47,19676,12027],{}," in deze volgorde in, dan gaat elke sleutel naar\nrechts. Je krijgt een gelinkte lijst en ",[47,19679,19680],{},"h = n - 1",". Zoeken kost dan ",[47,19683,119],{},[376,19685,19688],{"className":19686,"code":19687,"language":5073},[5071],"1\n \\\n  2\n   \\\n    3\n     \\\n      4\n       \\\n        5\n",[47,19689,19687],{"__ignoreMap":374},[11,19691,19692,19693,19696],{},"Gesorteerde invoer is precies het geval dat in de praktijk vaak voorkomt (oplopende id's,\ntijdstempels). Daarom gebruik je in echte software een ",[15,19694,19695],{},"zelfbalancerende"," boom.",[364,19698,19700],{"id":19699},"avl-bomen-en-rotaties","AVL-bomen en rotaties",[11,19702,19703,19704,19707],{},"Een AVL-boom is een BST die na elke invoeging en verwijdering controleert of bij elke knoop de\nhoogtes van de linker en rechter deelboom hoogstens 1 verschillen. Zo niet, dan herstelt hij de balans\nmet een ",[15,19705,19706],{},"rotatie",": een kleine herschikking van drie knopen die de BST-eigenschap behoudt.",[56,19709,19710,19716,19722],{},[59,19711,19712,19715],{},[15,19713,19714],{},"Rotatie naar rechts"," bij een te zware linkerkant (links-links-geval).",[59,19717,19718,19721],{},[15,19719,19720],{},"Rotatie naar links"," bij een te zware rechterkant (rechts-rechts-geval).",[59,19723,19724,19727],{},[15,19725,19726],{},"Dubbele rotaties"," (links-rechts en rechts-links) als de zware kant een \"knik\" heeft.",[11,19729,19730,19731,19733,19734,19736,19737,19740,19741,19743,19744,150],{},"Een rotatie kost ",[47,19732,210],{},", dus een AVL-boom garandeert ",[47,19735,214],{}," voor alle operaties. Een rood-zwarte\nboom (",[20,19738,19739],{},"red-black tree",") doet hetzelfde met iets soepelere regels; die zit achter Java's ",[47,19742,16779],{}," en\n",[47,19745,19746],{},"TreeSet",[39,19748,17],{"id":2398},[226,19750,19751,19763],{},[229,19752,19753],{},[232,19754,19755,19757,19760],{},[235,19756,8546],{},[235,19758,19759],{},"Gebalanceerd",[235,19761,19762],{},"Scheef (slechtste geval)",[248,19764,19765,19777,19789,19801,19814],{},[232,19766,19767,19769,19773],{},[253,19768,11988],{},[253,19770,19771],{},[47,19772,214],{},[253,19774,19775],{},[47,19776,119],{},[232,19778,19779,19781,19785],{},[253,19780,13766],{},[253,19782,19783],{},[47,19784,214],{},[253,19786,19787],{},[47,19788,119],{},[232,19790,19791,19793,19797],{},[253,19792,12045],{},[253,19794,19795],{},[47,19796,214],{},[253,19798,19799],{},[47,19800,119],{},[232,19802,19803,19806,19810],{},[253,19804,19805],{},"Doorlopen (alle vier)",[253,19807,19808],{},[47,19809,119],{},[253,19811,19812],{},[47,19813,119],{},[232,19815,19816,19819,19823],{},[253,19817,19818],{},"Minimum \u002F maximum",[253,19820,19821],{},[47,19822,214],{},[253,19824,19825],{},[47,19826,119],{},[11,19828,19829,19830,19832,19833,19835],{},"Voor een AVL- of rood-zwarte boom geldt de middelste kolom altijd. Vergelijk dit met een\n",[28,19831,8323],{"href":8322},": die is gemiddeld sneller (",[47,19834,210],{},"), maar een zoekboom houdt\nde sleutels gesorteerd, zodat je ook \"geef alle sleutels tussen 20 en 50\" efficiënt kunt beantwoorden.",[39,19837,2248],{"id":2247},[129,19839,19840,19852,19869,19875,19889],{},[59,19841,19842,19845,19846,19848,19849,19851],{},[15,19843,19844],{},"Alleen met het directe kind vergelijken."," De BST-eigenschap geldt voor de hele deelboom. Een\nboom met ",[47,19847,1025],{}," als wortel en ",[47,19850,4251],{}," ergens in de linker deelboom is geen BST, ook al klopt elk\nouder-kindpaar.",[59,19853,19854,19857,19858,19861,19862,19864,19865,2289,19867,150],{},[15,19855,19856],{},"Met de verkeerde opvolger vervangen."," Bij twee kinderen neem je de ",[15,19859,19860],{},"kleinste in de rechter","\ndeelboom, niet het rechterkind zelf. Bij het verwijderen van ",[47,19863,1970],{}," is dat ",[47,19866,1044],{},[47,19868,2603],{},[59,19870,19871,19874],{},[15,19872,19873],{},"Preorder en postorder verwisselen."," Preorder begint met de wortel, postorder eindigt ermee.",[59,19876,19877,19880,19881,19884,19885,19888],{},[15,19878,19879],{},"Level-order als \"eerst alles links\" lezen."," Level-order gaat niveau voor niveau: ",[47,19882,19883],{},"8, 3, 10, …",",\nniet ",[47,19886,19887],{},"8, 3, 1, …"," (dat is preorder).",[59,19890,19891,19894,19895,19898],{},[15,19892,19893],{},"Vergeten dat de invoegvolgorde de vorm bepaalt."," Gesorteerde invoer geeft een scheve boom met\nhoogte ",[47,19896,19897],{},"n - 1",", geen gebalanceerde.",[39,19900,2316],{"id":2315},[56,19902,19903,19906,19909,19912,19922],{},[59,19904,19905],{},"In een BST staat alles links van een knoop kleiner en alles rechts groter; inorder geeft de\ngesorteerde volgorde.",[59,19907,19908],{},"Invoegen en zoeken volgen één pad vanaf de wortel; nieuwe sleutels worden altijd een blad.",[59,19910,19911],{},"Verwijderen kent drie gevallen; bij twee kinderen vervang je de sleutel door de opvolger, de\nkleinste in de rechter deelboom.",[59,19913,19636,19914,71,19916,19918,19919,19921],{},[47,19915,19639],{},[47,19917,214],{}," als de boom gebalanceerd is, ",[47,19920,119],{}," als hij scheef is.",[59,19923,19924],{},"AVL- en rood-zwarte bomen houden de boom met rotaties in balans.",[2371,19926,19927],{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":374,"searchDepth":414,"depth":414,"links":19929},[19930,19931,19932,19933,19934,19935,19936,19939,19940,19941],{"id":16783,"depth":414,"text":16784},{"id":16816,"depth":414,"text":13766},{"id":8449,"depth":414,"text":11988},{"id":16999,"depth":414,"text":17000},{"id":17093,"depth":414,"text":17094},{"id":47,"depth":414,"text":14382},{"id":19632,"depth":414,"text":19633,"children":19937},[19938],{"id":19699,"depth":500,"text":19700},{"id":2398,"depth":414,"text":17},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Hoe werkt een binaire zoekboom? Leer invoegen, zoeken, verwijderen met de opvolger en preorder, inorder, postorder en level-order, met code in Python en Java.","i-lucide-git-fork",{},"\u002Fpracticely-dsa\u002Fbinaire-zoekbomen",{"title":16761,"description":19942},"practicely-dsa\u002Fbinaire-zoekbomen","binaire-zoekbomen","5yuwA2hIh7vFKmCQQsxSvrXzYaI0R4crBkjJJQZuPhU",{"id":19951,"title":19952,"body":19953,"description":24682,"extension":2392,"icon":24683,"meta":24684,"navigation":1702,"order":1299,"path":24685,"seo":24686,"stem":24687,"topic":36,"__hash__":24688},"practicelyDsa\u002Fpracticely-dsa\u002Fgrafen.md","Grafen uitgelegd: BFS, DFS, Dijkstra en topologisch sorteren",{"type":8,"value":19954,"toc":24671},[19955,19970,19973,19977,20048,20055,20058,20064,20068,20090,20149,20279,20354,20361,20365,20379,20384,20495,20508,20512,20521,20526,20594,20609,20612,21901,21905,21912,21928,21931,21937,21947,22104,22107,22141,22147,22150,23341,23345,23369,23372,23389,23392,23398,23401,23487,23497,24462,24464,24566,24589,24591,24643,24645,24668],[11,19956,19957,19958,19961,19962,19965,19966,19969],{},"Een graaf (",[20,19959,19960],{},"graph",") is een verzameling knopen (",[20,19963,19964],{},"vertices",") die met kanten (",[20,19967,19968],{},"edges",") verbonden zijn.\nDat klinkt abstract, maar bijna alles is een graaf: wegen tussen steden, vrienden op een sociaal\nnetwerk, links tussen webpagina's, vakken met hun voorkennis, of pakketten die van elkaar afhangen.",[11,19971,19972],{},"Wie grafen beheerst, kan een hele klasse problemen oplossen met een handvol algoritmen. Op het\ntentamen traceer je BFS, DFS en Dijkstra met de hand. In sollicitaties vermomt een graafprobleem zich\nvaak als iets anders (\"hoeveel eilanden staan er in dit raster?\"). En in de praktijk draaien\nrouteplanners, build-tools en package managers op precies deze algoritmen.",[39,19974,19976],{"id":19975},"begrippen","Begrippen",[56,19978,19979,19992,20004,20013,20022,20038],{},[59,19980,19981,18,19984,19987,19988,19991],{},[15,19982,19983],{},"Ongericht",[20,19985,19986],{},"undirected","): een kant ",[47,19989,19990],{},"A–B"," kun je in beide richtingen volgen (vriendschap).",[59,19993,19994,18,19997,19987,20000,20003],{},[15,19995,19996],{},"Gericht",[20,19998,19999],{},"directed",[47,20001,20002],{},"A → B"," heeft één richting (volgen op sociale media, \"A is\nvoorkennis voor B\").",[59,20005,20006,18,20009,20012],{},[15,20007,20008],{},"Gewogen",[20,20010,20011],{},"weighted","): elke kant heeft een getal, bijvoorbeeld een afstand of een reistijd.",[59,20014,20015,18,20018,20021],{},[15,20016,20017],{},"Buren",[20,20019,20020],{},"neighbours","): de knopen die met één kant bereikbaar zijn.",[59,20023,20024,18,20027,20030,20031,20034,20035,8476],{},[15,20025,20026],{},"Graad",[20,20028,20029],{},"degree","): het aantal kanten aan een knoop. Bij een gerichte graaf onderscheid je\ningangsgraad (",[20,20032,20033],{},"in-degree",") en uitgangsgraad (",[20,20036,20037],{},"out-degree",[59,20039,20040,20043,20044,20047],{},[47,20041,20042],{},"V"," is het aantal knopen, ",[47,20045,20046],{},"E"," het aantal kanten.",[11,20049,20050,20051,20054],{},"Knopen noteren we als hoofdletters. ",[15,20052,20053],{},"Buren bekijk je altijd in alfabetische volgorde","; anders zijn\ner meerdere goede antwoorden op een traceervraag.",[11,20056,20057],{},"We gebruiken deze ongerichte graaf met zes knopen en zeven kanten:",[376,20059,20062],{"className":20060,"code":20061,"language":5073},[5071],"A --- B --- C\n|     |     |\nD --- E --- F\n",[47,20063,20061],{"__ignoreMap":374},[39,20065,20067],{"id":20066},"representatie-lijst-of-matrix","Representatie: lijst of matrix",[11,20069,8458,20070,18,20073,20076,20077,1483,20080,67,20083,20086,20087,20089],{},[15,20071,20072],{},"adjacency list",[20,20074,20075],{},"buurlijst",") slaat per knoop de lijst van buren op. Een ",[15,20078,20079],{},"adjacency matrix",[20,20081,20082],{},"buurmatrix",[47,20084,20085],{},"V × V","-tabel met een ",[47,20088,269],{}," als er een kant is.",[226,20091,20092,20100],{},[229,20093,20094],{},[232,20095,20096,20098],{},[235,20097,18501],{},[235,20099,20017],{},[248,20101,20102,20110,20118,20126,20134,20141],{},[232,20103,20104,20107],{},[253,20105,20106],{},"A",[253,20108,20109],{},"B, D",[232,20111,20112,20115],{},[253,20113,20114],{},"B",[253,20116,20117],{},"A, C, E",[232,20119,20120,20123],{},[253,20121,20122],{},"C",[253,20124,20125],{},"B, F",[232,20127,20128,20131],{},[253,20129,20130],{},"D",[253,20132,20133],{},"A, E",[232,20135,20136,20138],{},[253,20137,20046],{},[253,20139,20140],{},"B, D, F",[232,20142,20143,20146],{},[253,20144,20145],{},"F",[253,20147,20148],{},"C, E",[226,20150,20151,20169],{},[229,20152,20153],{},[232,20154,20155,20157,20159,20161,20163,20165,20167],{},[235,20156],{},[235,20158,20106],{},[235,20160,20114],{},[235,20162,20122],{},[235,20164,20130],{},[235,20166,20046],{},[235,20168,20145],{},[248,20170,20171,20189,20207,20225,20243,20261],{},[232,20172,20173,20177,20179,20181,20183,20185,20187],{},[253,20174,20175],{},[15,20176,20106],{},[253,20178,2048],{},[253,20180,269],{},[253,20182,2048],{},[253,20184,269],{},[253,20186,2048],{},[253,20188,2048],{},[232,20190,20191,20195,20197,20199,20201,20203,20205],{},[253,20192,20193],{},[15,20194,20114],{},[253,20196,269],{},[253,20198,2048],{},[253,20200,269],{},[253,20202,2048],{},[253,20204,269],{},[253,20206,2048],{},[232,20208,20209,20213,20215,20217,20219,20221,20223],{},[253,20210,20211],{},[15,20212,20122],{},[253,20214,2048],{},[253,20216,269],{},[253,20218,2048],{},[253,20220,2048],{},[253,20222,2048],{},[253,20224,269],{},[232,20226,20227,20231,20233,20235,20237,20239,20241],{},[253,20228,20229],{},[15,20230,20130],{},[253,20232,269],{},[253,20234,2048],{},[253,20236,2048],{},[253,20238,2048],{},[253,20240,269],{},[253,20242,2048],{},[232,20244,20245,20249,20251,20253,20255,20257,20259],{},[253,20246,20247],{},[15,20248,20046],{},[253,20250,2048],{},[253,20252,269],{},[253,20254,2048],{},[253,20256,269],{},[253,20258,2048],{},[253,20260,269],{},[232,20262,20263,20267,20269,20271,20273,20275,20277],{},[253,20264,20265],{},[15,20266,20145],{},[253,20268,2048],{},[253,20270,2048],{},[253,20272,269],{},[253,20274,2048],{},[253,20276,269],{},[253,20278,2048],{},[226,20280,20281,20293],{},[229,20282,20283],{},[232,20284,20285,20287,20290],{},[235,20286],{},[235,20288,20289],{},"Adjacency list",[235,20291,20292],{},"Adjacency matrix",[248,20294,20295,20309,20326,20343],{},[232,20296,20297,20299,20304],{},[253,20298,13804],{},[253,20300,20301],{},[47,20302,20303],{},"O(V + E)",[253,20305,20306],{},[47,20307,20308],{},"O(V²)",[232,20310,20311,20317,20322],{},[253,20312,20313,20314,18715],{},"Bestaat kant ",[47,20315,20316],{},"u–v",[253,20318,20319],{},[47,20320,20321],{},"O(graad van u)",[253,20323,20324],{},[47,20325,210],{},[232,20327,20328,20334,20338],{},[253,20329,20330,20331],{},"Alle buren van ",[47,20332,20333],{},"u",[253,20335,20336],{},[47,20337,20321],{},[253,20339,20340],{},[47,20341,20342],{},"O(V)",[232,20344,20345,20348,20351],{},[253,20346,20347],{},"Geschikt voor",[253,20349,20350],{},"ijle grafen (weinig kanten)",[253,20352,20353],{},"dichte grafen",[11,20355,20356,20357,20360],{},"De meeste echte grafen zijn ijl (",[20,20358,20359],{},"sparse","): een wegennet heeft miljoenen kruispunten, maar elk\nkruispunt maar een paar wegen. Daarom is de adjacency list de standaard. Bij een ongerichte graaf\nstaat elke kant twee keer in de lijst (en is de matrix symmetrisch).",[39,20362,20364],{"id":20363},"breedte-eerst-zoeken-bfs","Breedte-eerst zoeken (BFS)",[11,20366,20367,20368,20371,20372,20374,20375,20378],{},"Breedte-eerst zoeken (",[20,20369,20370],{},"breadth-first search",") verkent de graaf in lagen: eerst de startknoop, dan\nalle buren, dan de buren daarvan. Het gebruikt een ",[28,20373,8468],{"href":6632},".\nEen knoop telt als ",[15,20376,20377],{},"bezocht zodra hij in de wachtrij komt",", zodat hij er nooit twee keer in staat.",[11,20380,20381,20382,1911],{},"BFS vanaf ",[47,20383,20106],{},[226,20385,20386,20401],{},[229,20387,20388],{},[232,20389,20390,20392,20395,20398],{},[235,20391,4147],{},[235,20393,20394],{},"Haal uit wachtrij",[235,20396,20397],{},"Nieuwe buren erbij",[235,20399,20400],{},"Wachtrij daarna",[248,20402,20403,20416,20429,20443,20457,20470,20483],{},[232,20404,20405,20407,20409,20411],{},[253,20406,2560],{},[253,20408],{},[253,20410,20106],{},[253,20412,20413],{},[47,20414,20415],{},"[A]",[232,20417,20418,20420,20422,20424],{},[253,20419,269],{},[253,20421,20106],{},[253,20423,20109],{},[253,20425,20426],{},[47,20427,20428],{},"[B, D]",[232,20430,20431,20433,20435,20438],{},[253,20432,1952],{},[253,20434,20114],{},[253,20436,20437],{},"C, E (A is al bezocht)",[253,20439,20440],{},[47,20441,20442],{},"[D, C, E]",[232,20444,20445,20447,20449,20452],{},[253,20446,1970],{},[253,20448,20130],{},[253,20450,20451],{},"geen (A, E al bezocht)",[253,20453,20454],{},[47,20455,20456],{},"[C, E]",[232,20458,20459,20461,20463,20465],{},[253,20460,1044],{},[253,20462,20122],{},[253,20464,20145],{},[253,20466,20467],{},[47,20468,20469],{},"[E, F]",[232,20471,20472,20474,20476,20478],{},[253,20473,1025],{},[253,20475,20046],{},[253,20477,8244],{},[253,20479,20480],{},[47,20481,20482],{},"[F]",[232,20484,20485,20487,20489,20491],{},[253,20486,2603],{},[253,20488,20145],{},[253,20490,8244],{},[253,20492,20493],{},[47,20494,1768],{},[11,20496,20497,20498,20501,20502,20504,20505,20507],{},"Bezoekvolgorde: ",[15,20499,20500],{},"A, B, D, C, E, F",". In een ongewogen graaf vindt BFS de kortste route (in aantal\nkanten): ",[47,20503,20145],{}," ligt op afstand 3 van ",[47,20506,20106],{},", en BFS bereikt hem pas in de derde laag.",[39,20509,20511],{"id":20510},"diepte-eerst-zoeken-dfs","Diepte-eerst zoeken (DFS)",[11,20513,20514,20515,20518,20519,150],{},"Diepte-eerst zoeken (",[20,20516,20517],{},"depth-first search",") gaat zo diep mogelijk één kant op, en keert pas terug als\ner geen onbezochte buur meer is. Recursief is dat het natuurlijkst; de recursie werkt als een\n",[28,20520,8461],{"href":6632},[11,20522,20523,20524,1911],{},"DFS vanaf ",[47,20525,20106],{},[226,20527,20528,20539],{},[229,20529,20530],{},[232,20531,20532,20534,20537],{},[235,20533,4147],{},[235,20535,20536],{},"Bezoek",[235,20538,7514],{},[248,20540,20541,20549,20558,20567,20576,20585],{},[232,20542,20543,20545,20547],{},[253,20544,269],{},[253,20546,20106],{},[253,20548,2560],{},[232,20550,20551,20553,20555],{},[253,20552,1952],{},[253,20554,20114],{},[253,20556,20557],{},"eerste onbezochte buur van A",[232,20559,20560,20562,20564],{},[253,20561,1970],{},[253,20563,20122],{},[253,20565,20566],{},"eerste onbezochte buur van B (A is al bezocht)",[232,20568,20569,20571,20573],{},[253,20570,1044],{},[253,20572,20145],{},[253,20574,20575],{},"eerste onbezochte buur van C",[232,20577,20578,20580,20582],{},[253,20579,1025],{},[253,20581,20046],{},[253,20583,20584],{},"eerste onbezochte buur van F (C al bezocht)",[232,20586,20587,20589,20591],{},[253,20588,2603],{},[253,20590,20130],{},[253,20592,20593],{},"eerste onbezochte buur van E (B al bezocht)",[11,20595,20596,20597,20599,20600,20602,20603,20605,20606,150],{},"Daarna heeft ",[47,20598,20130],{}," geen onbezochte buren meer; de recursie keert helemaal terug naar ",[47,20601,20106],{},", waar ",[47,20604,20130],{}," nu al\nbezocht is. Bezoekvolgorde: ",[15,20607,20608],{},"A, B, C, F, E, D",[11,20610,20611],{},"Zelfde graaf, zelfde start, toch een andere volgorde dan BFS. DFS gebruik je voor het vinden van\ncycli, samenhangende componenten en doolhoven.",[369,20613,20614,21232],{},[372,20615,20616],{"v-slot:python":374},[376,20617,20619],{"className":378,"code":20618,"language":380,"meta":374,"style":374},"from collections import deque\n\ngraaf = {\n    \"A\": [\"B\", \"D\"], \"B\": [\"A\", \"C\", \"E\"], \"C\": [\"B\", \"F\"],\n    \"D\": [\"A\", \"E\"], \"E\": [\"B\", \"D\", \"F\"], \"F\": [\"C\", \"E\"],\n}\n\n\ndef bfs(graaf, start):\n    bezocht = {start}\n    wachtrij = deque([start])\n    volgorde = []\n    while wachtrij:\n        u = wachtrij.popleft()\n        volgorde.append(u)\n        for v in sorted(graaf[u]):  # buren alfabetisch\n            if v not in bezocht:\n                bezocht.add(v)  # bezocht zodra hij in de wachtrij komt\n                wachtrij.append(v)\n    return volgorde\n\n\ndef dfs(graaf, u, bezocht=None, volgorde=None):\n    if bezocht is None:\n        bezocht, volgorde = set(), []\n    bezocht.add(u)\n    volgorde.append(u)\n    for v in sorted(graaf[u]):  # buren alfabetisch\n        if v not in bezocht:\n            dfs(graaf, v, bezocht, volgorde)\n    return volgorde\n\n\nprint(bfs(graaf, \"A\"))  # ['A', 'B', 'D', 'C', 'E', 'F']\nprint(dfs(graaf, \"A\"))  # ['A', 'B', 'C', 'F', 'E', 'D']\n",[47,20620,20621,20631,20635,20644,20734,20822,20826,20830,20834,20852,20865,20880,20889,20897,20912,20927,20952,20969,20988,21002,21009,21013,21017,21045,21056,21076,21091,21106,21128,21142,21166,21172,21176,21180,21206],{"__ignoreMap":374},[384,20622,20623,20625,20627,20629],{"class":386,"line":387},[384,20624,17226],{"class":390},[384,20626,17229],{"class":394},[384,20628,9141],{"class":390},[384,20630,17234],{"class":394},[384,20632,20633],{"class":386,"line":414},[384,20634,1703],{"emptyLinePlaceholder":1702},[384,20636,20637,20640,20642],{"class":386,"line":500},[384,20638,20639],{"class":394},"graaf ",[384,20641,456],{"class":405},[384,20643,482],{"class":405},[384,20645,20646,20649,20651,20653,20655,20657,20659,20661,20663,20665,20667,20669,20671,20673,20675,20677,20679,20681,20683,20685,20687,20689,20691,20693,20695,20697,20699,20701,20703,20705,20707,20709,20711,20713,20715,20717,20719,20721,20723,20725,20727,20729,20731],{"class":386,"line":602},[384,20647,20648],{"class":405},"    \"",[384,20650,20106],{"class":9035},[384,20652,9032],{"class":405},[384,20654,1911],{"class":405},[384,20656,12370],{"class":405},[384,20658,9032],{"class":405},[384,20660,20114],{"class":9035},[384,20662,9032],{"class":405},[384,20664,568],{"class":405},[384,20666,10623],{"class":405},[384,20668,20130],{"class":9035},[384,20670,9032],{"class":405},[384,20672,1735],{"class":405},[384,20674,10623],{"class":405},[384,20676,20114],{"class":9035},[384,20678,9032],{"class":405},[384,20680,1911],{"class":405},[384,20682,12370],{"class":405},[384,20684,9032],{"class":405},[384,20686,20106],{"class":9035},[384,20688,9032],{"class":405},[384,20690,568],{"class":405},[384,20692,10623],{"class":405},[384,20694,20122],{"class":9035},[384,20696,9032],{"class":405},[384,20698,568],{"class":405},[384,20700,10623],{"class":405},[384,20702,20046],{"class":9035},[384,20704,9032],{"class":405},[384,20706,1735],{"class":405},[384,20708,10623],{"class":405},[384,20710,20122],{"class":9035},[384,20712,9032],{"class":405},[384,20714,1911],{"class":405},[384,20716,12370],{"class":405},[384,20718,9032],{"class":405},[384,20720,20114],{"class":9035},[384,20722,9032],{"class":405},[384,20724,568],{"class":405},[384,20726,10623],{"class":405},[384,20728,20145],{"class":9035},[384,20730,9032],{"class":405},[384,20732,20733],{"class":405},"],\n",[384,20735,20736,20738,20740,20742,20744,20746,20748,20750,20752,20754,20756,20758,20760,20762,20764,20766,20768,20770,20772,20774,20776,20778,20780,20782,20784,20786,20788,20790,20792,20794,20796,20798,20800,20802,20804,20806,20808,20810,20812,20814,20816,20818,20820],{"class":386,"line":721},[384,20737,20648],{"class":405},[384,20739,20130],{"class":9035},[384,20741,9032],{"class":405},[384,20743,1911],{"class":405},[384,20745,12370],{"class":405},[384,20747,9032],{"class":405},[384,20749,20106],{"class":9035},[384,20751,9032],{"class":405},[384,20753,568],{"class":405},[384,20755,10623],{"class":405},[384,20757,20046],{"class":9035},[384,20759,9032],{"class":405},[384,20761,1735],{"class":405},[384,20763,10623],{"class":405},[384,20765,20046],{"class":9035},[384,20767,9032],{"class":405},[384,20769,1911],{"class":405},[384,20771,12370],{"class":405},[384,20773,9032],{"class":405},[384,20775,20114],{"class":9035},[384,20777,9032],{"class":405},[384,20779,568],{"class":405},[384,20781,10623],{"class":405},[384,20783,20130],{"class":9035},[384,20785,9032],{"class":405},[384,20787,568],{"class":405},[384,20789,10623],{"class":405},[384,20791,20145],{"class":9035},[384,20793,9032],{"class":405},[384,20795,1735],{"class":405},[384,20797,10623],{"class":405},[384,20799,20145],{"class":9035},[384,20801,9032],{"class":405},[384,20803,1911],{"class":405},[384,20805,12370],{"class":405},[384,20807,9032],{"class":405},[384,20809,20122],{"class":9035},[384,20811,9032],{"class":405},[384,20813,568],{"class":405},[384,20815,10623],{"class":405},[384,20817,20046],{"class":9035},[384,20819,9032],{"class":405},[384,20821,20733],{"class":405},[384,20823,20824],{"class":386,"line":727},[384,20825,503],{"class":405},[384,20827,20828],{"class":386,"line":733},[384,20829,1703],{"emptyLinePlaceholder":1702},[384,20831,20832],{"class":386,"line":1299},[384,20833,1703],{"emptyLinePlaceholder":1702},[384,20835,20836,20838,20841,20843,20845,20847,20850],{"class":386,"line":2790},[384,20837,1612],{"class":450},[384,20839,20840],{"class":401}," bfs",[384,20842,406],{"class":405},[384,20844,11201],{"class":1620},[384,20846,568],{"class":405},[384,20848,20849],{"class":1620}," start",[384,20851,411],{"class":405},[384,20853,20854,20857,20859,20861,20863],{"class":386,"line":2985},[384,20855,20856],{"class":394},"    bezocht ",[384,20858,456],{"class":405},[384,20860,1200],{"class":405},[384,20862,2560],{"class":394},[384,20864,503],{"class":405},[384,20866,20867,20870,20872,20874,20876,20878],{"class":386,"line":3009},[384,20868,20869],{"class":394},"    wachtrij ",[384,20871,456],{"class":405},[384,20873,18101],{"class":401},[384,20875,1716],{"class":405},[384,20877,2560],{"class":401},[384,20879,4373],{"class":405},[384,20881,20882,20885,20887],{"class":386,"line":3014},[384,20883,20884],{"class":394},"    volgorde ",[384,20886,456],{"class":405},[384,20888,4408],{"class":405},[384,20890,20891,20893,20895],{"class":386,"line":3563},[384,20892,1357],{"class":390},[384,20894,18125],{"class":394},[384,20896,813],{"class":405},[384,20898,20899,20902,20904,20906,20908,20910],{"class":386,"line":3588},[384,20900,20901],{"class":394},"        u ",[384,20903,456],{"class":405},[384,20905,18125],{"class":394},[384,20907,150],{"class":405},[384,20909,18142],{"class":401},[384,20911,9058],{"class":405},[384,20913,20914,20917,20919,20921,20923,20925],{"class":386,"line":3606},[384,20915,20916],{"class":394},"        volgorde",[384,20918,150],{"class":405},[384,20920,4486],{"class":401},[384,20922,406],{"class":405},[384,20924,20333],{"class":401},[384,20926,3219],{"class":405},[384,20928,20929,20931,20933,20935,20938,20940,20942,20944,20946,20949],{"class":386,"line":3611},[384,20930,3262],{"class":390},[384,20932,12922],{"class":394},[384,20934,398],{"class":390},[384,20936,20937],{"class":401}," sorted",[384,20939,406],{"class":405},[384,20941,11201],{"class":401},[384,20943,426],{"class":405},[384,20945,20333],{"class":401},[384,20947,20948],{"class":405},"]):",[384,20950,20951],{"class":827},"  # buren alfabetisch\n",[384,20953,20954,20956,20958,20961,20964,20967],{"class":386,"line":4541},[384,20955,3283],{"class":390},[384,20957,12922],{"class":394},[384,20959,20960],{"class":405},"not",[384,20962,20963],{"class":405}," in",[384,20965,20966],{"class":394}," bezocht",[384,20968,813],{"class":405},[384,20970,20971,20974,20976,20978,20980,20983,20985],{"class":386,"line":4562},[384,20972,20973],{"class":394},"                bezocht",[384,20975,150],{"class":405},[384,20977,9227],{"class":401},[384,20979,406],{"class":405},[384,20981,20982],{"class":401},"v",[384,20984,863],{"class":405},[384,20986,20987],{"class":827},"  # bezocht zodra hij in de wachtrij komt\n",[384,20989,20990,20992,20994,20996,20998,21000],{"class":386,"line":4581},[384,20991,18211],{"class":394},[384,20993,150],{"class":405},[384,20995,4486],{"class":401},[384,20997,406],{"class":405},[384,20999,20982],{"class":401},[384,21001,3219],{"class":405},[384,21003,21004,21006],{"class":386,"line":5021},[384,21005,1664],{"class":390},[384,21007,21008],{"class":394}," volgorde\n",[384,21010,21011],{"class":386,"line":5030},[384,21012,1703],{"emptyLinePlaceholder":1702},[384,21014,21015],{"class":386,"line":9395},[384,21016,1703],{"emptyLinePlaceholder":1702},[384,21018,21019,21021,21024,21026,21028,21030,21033,21035,21037,21040,21043],{"class":386,"line":9409},[384,21020,1612],{"class":450},[384,21022,21023],{"class":401}," dfs",[384,21025,406],{"class":405},[384,21027,11201],{"class":1620},[384,21029,568],{"class":405},[384,21031,21032],{"class":1620}," u",[384,21034,568],{"class":405},[384,21036,20966],{"class":1620},[384,21038,21039],{"class":405},"=None,",[384,21041,21042],{"class":1620}," volgorde",[384,21044,5515],{"class":405},[384,21046,21047,21049,21052,21054],{"class":386,"line":9414},[384,21048,1636],{"class":390},[384,21050,21051],{"class":394}," bezocht ",[384,21053,5525],{"class":405},[384,21055,5528],{"class":405},[384,21057,21058,21061,21063,21066,21068,21071,21074],{"class":386,"line":9972},[384,21059,21060],{"class":394},"        bezocht",[384,21062,568],{"class":405},[384,21064,21065],{"class":394}," volgorde ",[384,21067,456],{"class":405},[384,21069,21070],{"class":8910}," set",[384,21072,21073],{"class":405},"(),",[384,21075,4408],{"class":405},[384,21077,21078,21081,21083,21085,21087,21089],{"class":386,"line":9990},[384,21079,21080],{"class":394},"    bezocht",[384,21082,150],{"class":405},[384,21084,9227],{"class":401},[384,21086,406],{"class":405},[384,21088,20333],{"class":401},[384,21090,3219],{"class":405},[384,21092,21093,21096,21098,21100,21102,21104],{"class":386,"line":10004},[384,21094,21095],{"class":394},"    volgorde",[384,21097,150],{"class":405},[384,21099,4486],{"class":401},[384,21101,406],{"class":405},[384,21103,20333],{"class":401},[384,21105,3219],{"class":405},[384,21107,21108,21110,21112,21114,21116,21118,21120,21122,21124,21126],{"class":386,"line":10299},[384,21109,547],{"class":390},[384,21111,12922],{"class":394},[384,21113,398],{"class":390},[384,21115,20937],{"class":401},[384,21117,406],{"class":405},[384,21119,11201],{"class":401},[384,21121,426],{"class":405},[384,21123,20333],{"class":401},[384,21125,20948],{"class":405},[384,21127,20951],{"class":827},[384,21129,21130,21132,21134,21136,21138,21140],{"class":386,"line":10316},[384,21131,577],{"class":390},[384,21133,12922],{"class":394},[384,21135,20960],{"class":405},[384,21137,20963],{"class":405},[384,21139,20966],{"class":394},[384,21141,813],{"class":405},[384,21143,21144,21147,21149,21151,21153,21156,21158,21160,21162,21164],{"class":386,"line":10332},[384,21145,21146],{"class":401},"            dfs",[384,21148,406],{"class":405},[384,21150,11201],{"class":401},[384,21152,568],{"class":405},[384,21154,21155],{"class":401}," v",[384,21157,568],{"class":405},[384,21159,20966],{"class":401},[384,21161,568],{"class":405},[384,21163,21042],{"class":401},[384,21165,3219],{"class":405},[384,21167,21168,21170],{"class":386,"line":10350},[384,21169,1664],{"class":390},[384,21171,21008],{"class":394},[384,21173,21174],{"class":386,"line":10360},[384,21175,1703],{"emptyLinePlaceholder":1702},[384,21177,21178],{"class":386,"line":10365},[384,21179,1703],{"emptyLinePlaceholder":1702},[384,21181,21182,21184,21186,21189,21191,21193,21195,21197,21199,21201,21203],{"class":386,"line":10374},[384,21183,1708],{"class":401},[384,21185,406],{"class":405},[384,21187,21188],{"class":401},"bfs",[384,21190,406],{"class":405},[384,21192,11201],{"class":401},[384,21194,568],{"class":405},[384,21196,10623],{"class":405},[384,21198,20106],{"class":9035},[384,21200,9032],{"class":405},[384,21202,1741],{"class":405},[384,21204,21205],{"class":827},"  # ['A', 'B', 'D', 'C', 'E', 'F']\n",[384,21207,21208,21210,21212,21215,21217,21219,21221,21223,21225,21227,21229],{"class":386,"line":10379},[384,21209,1708],{"class":401},[384,21211,406],{"class":405},[384,21213,21214],{"class":401},"dfs",[384,21216,406],{"class":405},[384,21218,11201],{"class":401},[384,21220,568],{"class":405},[384,21222,10623],{"class":405},[384,21224,20106],{"class":9035},[384,21226,9032],{"class":405},[384,21228,1741],{"class":405},[384,21230,21231],{"class":827},"  # ['A', 'B', 'C', 'F', 'E', 'D']\n",[372,21233,21234],{"v-slot:java":374},[376,21235,21237],{"className":437,"code":21236,"language":439,"meta":374,"style":374},"import java.util.*;\n\nstatic List\u003CString> bfs(Map\u003CString, List\u003CString>> graaf, String start) {\n    Set\u003CString> bezocht = new HashSet\u003C>(List.of(start));\n    Deque\u003CString> wachtrij = new ArrayDeque\u003C>(List.of(start));\n    List\u003CString> volgorde = new ArrayList\u003C>();\n    while (!wachtrij.isEmpty()) {\n        String u = wachtrij.poll();\n        volgorde.add(u);\n        List\u003CString> buren = new ArrayList\u003C>(graaf.get(u));\n        Collections.sort(buren); \u002F\u002F buren alfabetisch\n        for (String v : buren) {\n            if (bezocht.add(v)) { \u002F\u002F bezocht zodra hij in de wachtrij komt\n                wachtrij.add(v);\n            }\n        }\n    }\n    return volgorde;\n}\n\nstatic List\u003CString> dfs(Map\u003CString, List\u003CString>> graaf, String start) {\n    List\u003CString> volgorde = new ArrayList\u003C>();\n    dfsBezoek(graaf, start, new HashSet\u003C>(), volgorde);\n    return volgorde;\n}\n\nprivate static void dfsBezoek(Map\u003CString, List\u003CString>> graaf, String u,\n                              Set\u003CString> bezocht, List\u003CString> volgorde) {\n    bezocht.add(u);\n    volgorde.add(u);\n    List\u003CString> buren = new ArrayList\u003C>(graaf.get(u));\n    Collections.sort(buren); \u002F\u002F buren alfabetisch\n    for (String v : buren) {\n        if (!bezocht.contains(v)) dfsBezoek(graaf, v, bezocht, volgorde);\n    }\n}\n",[47,21238,21239,21256,21260,21308,21344,21376,21396,21412,21430,21444,21478,21498,21517,21541,21555,21559,21563,21567,21575,21579,21583,21627,21647,21673,21681,21685,21689,21730,21759,21773,21787,21819,21836,21854,21893,21897],{"__ignoreMap":374},[384,21240,21241,21243,21245,21247,21249,21251,21254],{"class":386,"line":387},[384,21242,9141],{"class":459},[384,21244,9144],{"class":450},[384,21246,150],{"class":405},[384,21248,4694],{"class":450},[384,21250,150],{"class":405},[384,21252,21253],{"class":394},"*",[384,21255,848],{"class":405},[384,21257,21258],{"class":386,"line":414},[384,21259,1703],{"emptyLinePlaceholder":1702},[384,21261,21262,21264,21266,21268,21270,21272,21274,21276,21279,21281,21283,21285,21287,21289,21291,21294,21297,21299,21302,21304,21306],{"class":386,"line":500},[384,21263,1756],{"class":450},[384,21265,15190],{"class":450},[384,21267,468],{"class":405},[384,21269,10812],{"class":394},[384,21271,808],{"class":405},[384,21273,20840],{"class":401},[384,21275,406],{"class":405},[384,21277,21278],{"class":450},"Map",[384,21280,468],{"class":405},[384,21282,10812],{"class":394},[384,21284,568],{"class":405},[384,21286,15190],{"class":450},[384,21288,468],{"class":405},[384,21290,10812],{"class":394},[384,21292,21293],{"class":405},">>",[384,21295,21296],{"class":394}," graaf",[384,21298,568],{"class":405},[384,21300,21301],{"class":450}," String",[384,21303,20849],{"class":394},[384,21305,863],{"class":405},[384,21307,482],{"class":405},[384,21309,21310,21313,21315,21317,21319,21321,21323,21325,21328,21331,21333,21335,21338,21340,21342],{"class":386,"line":602},[384,21311,21312],{"class":450},"    Set",[384,21314,468],{"class":405},[384,21316,10812],{"class":450},[384,21318,808],{"class":405},[384,21320,21051],{"class":394},[384,21322,456],{"class":405},[384,21324,4786],{"class":390},[384,21326,21327],{"class":450}," HashSet",[384,21329,21330],{"class":405},"\u003C>(",[384,21332,15166],{"class":394},[384,21334,150],{"class":405},[384,21336,21337],{"class":401},"of",[384,21339,406],{"class":405},[384,21341,2560],{"class":394},[384,21343,4720],{"class":405},[384,21345,21346,21348,21350,21352,21354,21356,21358,21360,21362,21364,21366,21368,21370,21372,21374],{"class":386,"line":721},[384,21347,19452],{"class":450},[384,21349,468],{"class":405},[384,21351,10812],{"class":450},[384,21353,808],{"class":405},[384,21355,18093],{"class":394},[384,21357,456],{"class":405},[384,21359,4786],{"class":390},[384,21361,19467],{"class":450},[384,21363,21330],{"class":405},[384,21365,15166],{"class":394},[384,21367,150],{"class":405},[384,21369,21337],{"class":401},[384,21371,406],{"class":405},[384,21373,2560],{"class":394},[384,21375,4720],{"class":405},[384,21377,21378,21380,21382,21384,21386,21388,21390,21392,21394],{"class":386,"line":727},[384,21379,19430],{"class":450},[384,21381,468],{"class":405},[384,21383,10812],{"class":450},[384,21385,808],{"class":405},[384,21387,21065],{"class":394},[384,21389,456],{"class":405},[384,21391,4786],{"class":390},[384,21393,9177],{"class":450},[384,21395,9196],{"class":405},[384,21397,21398,21400,21402,21404,21406,21408,21410],{"class":386,"line":733},[384,21399,1357],{"class":390},[384,21401,15455],{"class":405},[384,21403,8468],{"class":394},[384,21405,150],{"class":405},[384,21407,9269],{"class":401},[384,21409,9272],{"class":405},[384,21411,482],{"class":405},[384,21413,21414,21417,21420,21422,21424,21426,21428],{"class":386,"line":1299},[384,21415,21416],{"class":450},"        String",[384,21418,21419],{"class":394}," u ",[384,21421,456],{"class":405},[384,21423,18125],{"class":394},[384,21425,150],{"class":405},[384,21427,16477],{"class":401},[384,21429,9406],{"class":405},[384,21431,21432,21434,21436,21438,21440,21442],{"class":386,"line":2790},[384,21433,20916],{"class":394},[384,21435,150],{"class":405},[384,21437,9227],{"class":401},[384,21439,406],{"class":405},[384,21441,20333],{"class":394},[384,21443,5962],{"class":405},[384,21445,21446,21449,21451,21453,21455,21458,21460,21462,21464,21466,21468,21470,21472,21474,21476],{"class":386,"line":2985},[384,21447,21448],{"class":450},"        List",[384,21450,468],{"class":405},[384,21452,10812],{"class":450},[384,21454,808],{"class":405},[384,21456,21457],{"class":394}," buren ",[384,21459,456],{"class":405},[384,21461,4786],{"class":390},[384,21463,9177],{"class":450},[384,21465,21330],{"class":405},[384,21467,11201],{"class":394},[384,21469,150],{"class":405},[384,21471,9356],{"class":401},[384,21473,406],{"class":405},[384,21475,20333],{"class":394},[384,21477,4720],{"class":405},[384,21479,21480,21483,21485,21488,21490,21493,21495],{"class":386,"line":3009},[384,21481,21482],{"class":394},"        Collections",[384,21484,150],{"class":405},[384,21486,21487],{"class":401},"sort",[384,21489,406],{"class":405},[384,21491,21492],{"class":394},"buren",[384,21494,9234],{"class":405},[384,21496,21497],{"class":827}," \u002F\u002F buren alfabetisch\n",[384,21499,21500,21502,21504,21506,21508,21510,21513,21515],{"class":386,"line":3014},[384,21501,3262],{"class":390},[384,21503,18],{"class":405},[384,21505,10812],{"class":450},[384,21507,12922],{"class":394},[384,21509,1911],{"class":390},[384,21511,21512],{"class":394}," buren",[384,21514,863],{"class":405},[384,21516,482],{"class":405},[384,21518,21519,21521,21523,21526,21528,21530,21532,21534,21536,21538],{"class":386,"line":3563},[384,21520,3283],{"class":390},[384,21522,18],{"class":405},[384,21524,21525],{"class":394},"bezocht",[384,21527,150],{"class":405},[384,21529,9227],{"class":401},[384,21531,406],{"class":405},[384,21533,20982],{"class":394},[384,21535,1741],{"class":405},[384,21537,1200],{"class":405},[384,21539,21540],{"class":827}," \u002F\u002F bezocht zodra hij in de wachtrij komt\n",[384,21542,21543,21545,21547,21549,21551,21553],{"class":386,"line":3588},[384,21544,18211],{"class":394},[384,21546,150],{"class":405},[384,21548,9227],{"class":401},[384,21550,406],{"class":405},[384,21552,20982],{"class":394},[384,21554,5962],{"class":405},[384,21556,21557],{"class":386,"line":3606},[384,21558,3530],{"class":405},[384,21560,21561],{"class":386,"line":3611},[384,21562,724],{"class":405},[384,21564,21565],{"class":386,"line":4541},[384,21566,730],{"class":405},[384,21568,21569,21571,21573],{"class":386,"line":4562},[384,21570,1664],{"class":390},[384,21572,21042],{"class":394},[384,21574,848],{"class":405},[384,21576,21577],{"class":386,"line":4581},[384,21578,503],{"class":405},[384,21580,21581],{"class":386,"line":5021},[384,21582,1703],{"emptyLinePlaceholder":1702},[384,21584,21585,21587,21589,21591,21593,21595,21597,21599,21601,21603,21605,21607,21609,21611,21613,21615,21617,21619,21621,21623,21625],{"class":386,"line":5030},[384,21586,1756],{"class":450},[384,21588,15190],{"class":450},[384,21590,468],{"class":405},[384,21592,10812],{"class":394},[384,21594,808],{"class":405},[384,21596,21023],{"class":401},[384,21598,406],{"class":405},[384,21600,21278],{"class":450},[384,21602,468],{"class":405},[384,21604,10812],{"class":394},[384,21606,568],{"class":405},[384,21608,15190],{"class":450},[384,21610,468],{"class":405},[384,21612,10812],{"class":394},[384,21614,21293],{"class":405},[384,21616,21296],{"class":394},[384,21618,568],{"class":405},[384,21620,21301],{"class":450},[384,21622,20849],{"class":394},[384,21624,863],{"class":405},[384,21626,482],{"class":405},[384,21628,21629,21631,21633,21635,21637,21639,21641,21643,21645],{"class":386,"line":9395},[384,21630,19430],{"class":450},[384,21632,468],{"class":405},[384,21634,10812],{"class":450},[384,21636,808],{"class":405},[384,21638,21065],{"class":394},[384,21640,456],{"class":405},[384,21642,4786],{"class":390},[384,21644,9177],{"class":450},[384,21646,9196],{"class":405},[384,21648,21649,21652,21654,21656,21658,21660,21662,21664,21666,21669,21671],{"class":386,"line":9409},[384,21650,21651],{"class":401},"    dfsBezoek",[384,21653,406],{"class":405},[384,21655,11201],{"class":394},[384,21657,568],{"class":405},[384,21659,20849],{"class":394},[384,21661,568],{"class":405},[384,21663,4786],{"class":390},[384,21665,21327],{"class":450},[384,21667,21668],{"class":405},"\u003C>(),",[384,21670,21042],{"class":394},[384,21672,5962],{"class":405},[384,21674,21675,21677,21679],{"class":386,"line":9414},[384,21676,1664],{"class":390},[384,21678,21042],{"class":394},[384,21680,848],{"class":405},[384,21682,21683],{"class":386,"line":9972},[384,21684,503],{"class":405},[384,21686,21687],{"class":386,"line":9990},[384,21688,1703],{"emptyLinePlaceholder":1702},[384,21690,21691,21694,21696,21698,21701,21703,21705,21707,21709,21711,21713,21715,21717,21719,21721,21723,21725,21727],{"class":386,"line":10004},[384,21692,21693],{"class":450},"private",[384,21695,10031],{"class":450},[384,21697,2825],{"class":450},[384,21699,21700],{"class":401}," dfsBezoek",[384,21702,406],{"class":405},[384,21704,21278],{"class":450},[384,21706,468],{"class":405},[384,21708,10812],{"class":394},[384,21710,568],{"class":405},[384,21712,15190],{"class":450},[384,21714,468],{"class":405},[384,21716,10812],{"class":394},[384,21718,21293],{"class":405},[384,21720,21296],{"class":394},[384,21722,568],{"class":405},[384,21724,21301],{"class":450},[384,21726,21032],{"class":394},[384,21728,21729],{"class":405},",\n",[384,21731,21732,21735,21737,21739,21741,21743,21745,21747,21749,21751,21753,21755,21757],{"class":386,"line":10299},[384,21733,21734],{"class":450},"                              Set",[384,21736,468],{"class":405},[384,21738,10812],{"class":394},[384,21740,808],{"class":405},[384,21742,20966],{"class":394},[384,21744,568],{"class":405},[384,21746,15190],{"class":450},[384,21748,468],{"class":405},[384,21750,10812],{"class":394},[384,21752,808],{"class":405},[384,21754,21042],{"class":394},[384,21756,863],{"class":405},[384,21758,482],{"class":405},[384,21760,21761,21763,21765,21767,21769,21771],{"class":386,"line":10316},[384,21762,21080],{"class":394},[384,21764,150],{"class":405},[384,21766,9227],{"class":401},[384,21768,406],{"class":405},[384,21770,20333],{"class":394},[384,21772,5962],{"class":405},[384,21774,21775,21777,21779,21781,21783,21785],{"class":386,"line":10332},[384,21776,21095],{"class":394},[384,21778,150],{"class":405},[384,21780,9227],{"class":401},[384,21782,406],{"class":405},[384,21784,20333],{"class":394},[384,21786,5962],{"class":405},[384,21788,21789,21791,21793,21795,21797,21799,21801,21803,21805,21807,21809,21811,21813,21815,21817],{"class":386,"line":10350},[384,21790,19430],{"class":450},[384,21792,468],{"class":405},[384,21794,10812],{"class":450},[384,21796,808],{"class":405},[384,21798,21457],{"class":394},[384,21800,456],{"class":405},[384,21802,4786],{"class":390},[384,21804,9177],{"class":450},[384,21806,21330],{"class":405},[384,21808,11201],{"class":394},[384,21810,150],{"class":405},[384,21812,9356],{"class":401},[384,21814,406],{"class":405},[384,21816,20333],{"class":394},[384,21818,4720],{"class":405},[384,21820,21821,21824,21826,21828,21830,21832,21834],{"class":386,"line":10360},[384,21822,21823],{"class":394},"    Collections",[384,21825,150],{"class":405},[384,21827,21487],{"class":401},[384,21829,406],{"class":405},[384,21831,21492],{"class":394},[384,21833,9234],{"class":405},[384,21835,21497],{"class":827},[384,21837,21838,21840,21842,21844,21846,21848,21850,21852],{"class":386,"line":10365},[384,21839,547],{"class":390},[384,21841,18],{"class":405},[384,21843,10812],{"class":450},[384,21845,12922],{"class":394},[384,21847,1911],{"class":390},[384,21849,21512],{"class":394},[384,21851,863],{"class":405},[384,21853,482],{"class":405},[384,21855,21856,21858,21860,21862,21864,21867,21869,21871,21873,21875,21877,21879,21881,21883,21885,21887,21889,21891],{"class":386,"line":10374},[384,21857,577],{"class":390},[384,21859,15455],{"class":405},[384,21861,21525],{"class":394},[384,21863,150],{"class":405},[384,21865,21866],{"class":401},"contains",[384,21868,406],{"class":405},[384,21870,20982],{"class":394},[384,21872,1741],{"class":405},[384,21874,21700],{"class":401},[384,21876,406],{"class":405},[384,21878,11201],{"class":394},[384,21880,568],{"class":405},[384,21882,21155],{"class":394},[384,21884,568],{"class":405},[384,21886,20966],{"class":394},[384,21888,568],{"class":405},[384,21890,21042],{"class":394},[384,21892,5962],{"class":405},[384,21894,21895],{"class":386,"line":10379},[384,21896,730],{"class":405},[384,21898,21899],{"class":386,"line":12801},[384,21900,503],{"class":405},[39,21902,21904],{"id":21903},"kortste-paden-dijkstra","Kortste paden: Dijkstra",[11,21906,21907,21908,21911],{},"In een gewogen graaf is de route met de minste kanten niet altijd de kortste. Het algoritme van\nDijkstra vindt de kortste afstand van één startknoop naar alle andere knopen, zolang ",[15,21909,21910],{},"alle gewichten\nniet-negatief"," zijn.",[11,21913,21914,21915,21917,21918,21921,21922,21924,21925,8476],{},"Het idee: houd voor elke knoop de beste bekende afstand bij (start op ",[47,21916,2048],{},", de rest op ",[47,21919,21920],{},"∞","). Kies\nsteeds de nog niet afgeronde knoop met de ",[15,21923,14364],{}," afstand; die afstand is definitief. Bekijk dan\nzijn buren: is de route via deze knoop korter, verlaag dan hun afstand (",[20,21926,21927],{},"relaxatie",[11,21929,21930],{},"Dezelfde graaf, nu met gewichten:",[376,21932,21935],{"className":21933,"code":21934,"language":5073},[5071],"A --4-- B --3-- C\n|       |       |\n1       1       2\n|       |       |\nD --2-- E --5-- F\n",[47,21936,21934],{"__ignoreMap":374},[11,21938,21939,21940,21942,21943,21946],{},"Dijkstra vanaf ",[47,21941,20106],{}," (de tabel toont de afstanden ",[15,21944,21945],{},"na"," het verwerken van de gekozen knoop):",[226,21948,21949,21970],{},[229,21950,21951],{},[232,21952,21953,21955,21958,21960,21962,21964,21966,21968],{},[235,21954,4147],{},[235,21956,21957],{},"Kies (afstand)",[235,21959,20106],{},[235,21961,20114],{},[235,21963,20122],{},[235,21965,20130],{},[235,21967,20046],{},[235,21969,20145],{},[248,21971,21972,21990,22009,22028,22047,22066,22085],{},[232,21973,21974,21976,21978,21980,21982,21984,21986,21988],{},[253,21975,2560],{},[253,21977],{},[253,21979,2048],{},[253,21981,21920],{},[253,21983,21920],{},[253,21985,21920],{},[253,21987,21920],{},[253,21989,21920],{},[232,21991,21992,21994,21997,21999,22001,22003,22005,22007],{},[253,21993,269],{},[253,21995,21996],{},"A (0)",[253,21998,2048],{},[253,22000,1044],{},[253,22002,21920],{},[253,22004,269],{},[253,22006,21920],{},[253,22008,21920],{},[232,22010,22011,22013,22016,22018,22020,22022,22024,22026],{},[253,22012,1952],{},[253,22014,22015],{},"D (1)",[253,22017,2048],{},[253,22019,1044],{},[253,22021,21920],{},[253,22023,269],{},[253,22025,1970],{},[253,22027,21920],{},[232,22029,22030,22032,22035,22037,22039,22041,22043,22045],{},[253,22031,1970],{},[253,22033,22034],{},"E (3)",[253,22036,2048],{},[253,22038,1044],{},[253,22040,21920],{},[253,22042,269],{},[253,22044,1970],{},[253,22046,2089],{},[232,22048,22049,22051,22054,22056,22058,22060,22062,22064],{},[253,22050,1044],{},[253,22052,22053],{},"B (4)",[253,22055,2048],{},[253,22057,1044],{},[253,22059,4251],{},[253,22061,269],{},[253,22063,1970],{},[253,22065,2089],{},[232,22067,22068,22070,22073,22075,22077,22079,22081,22083],{},[253,22069,1025],{},[253,22071,22072],{},"C (7)",[253,22074,2048],{},[253,22076,1044],{},[253,22078,4251],{},[253,22080,269],{},[253,22082,1970],{},[253,22084,2089],{},[232,22086,22087,22089,22092,22094,22096,22098,22100,22102],{},[253,22088,2603],{},[253,22090,22091],{},"F (8)",[253,22093,2048],{},[253,22095,1044],{},[253,22097,4251],{},[253,22099,269],{},[253,22101,1970],{},[253,22103,2089],{},[11,22105,22106],{},"Twee momenten om op te letten:",[56,22108,22109,22126],{},[59,22110,22111,22112,22115,22116,22119,22120,22122,22123,22125],{},"In stap 3 levert de route ",[47,22113,22114],{},"A → D → E → B"," afstand ",[47,22117,22118],{},"3 + 1 = 4"," op. Dat is niet ",[15,22121,16802],{}," dan de\nhuidige 4, dus ",[47,22124,20114],{}," verandert niet.",[59,22127,22128,22129,22115,22132,22135,22136,143,22138,22140],{},"In stap 5 levert ",[47,22130,22131],{},"A → B → C → F",[47,22133,22134],{},"7 + 2 = 9"," op, langer dan de 8 via ",[47,22137,20046],{},[47,22139,20145],{}," blijft 8.",[11,22142,22143,22144,150],{},"Antwoord (alfabetisch): ",[15,22145,22146],{},"A = 0, B = 4, C = 7, D = 1, E = 3, F = 8",[11,22148,22149],{},"Met negatieve gewichten werkt Dijkstra niet, omdat een \"definitieve\" afstand later toch nog korter\nkan worden. Daarvoor gebruik je Bellman-Ford.",[369,22151,22152,22768],{},[372,22153,22154],{"v-slot:python":374},[376,22155,22157],{"className":378,"code":22156,"language":380,"meta":374,"style":374},"import heapq\n\ngewogen = {\n    \"A\": {\"B\": 4, \"D\": 1}, \"B\": {\"A\": 4, \"C\": 3, \"E\": 1},\n    \"C\": {\"B\": 3, \"F\": 2}, \"D\": {\"A\": 1, \"E\": 2},\n    \"E\": {\"B\": 1, \"D\": 2, \"F\": 5}, \"F\": {\"C\": 2, \"E\": 5},\n}\n\n\ndef dijkstra(graaf, start):\n    afstand = {v: float(\"inf\") for v in graaf}\n    afstand[start] = 0\n    klaar = set()\n    heap = [(0, start)]  # (afstand, knoop)\n    while heap:\n        d, u = heapq.heappop(heap)  # knoop met kleinste afstand\n        if u in klaar:\n            continue  # verouderde invoer in de heap\n        klaar.add(u)\n        for v, gewicht in sorted(graaf[u].items()):\n            if d + gewicht \u003C afstand[v]:  # relaxatie\n                afstand[v] = d + gewicht\n                heapq.heappush(heap, (afstand[v], v))\n    return dict(sorted(afstand.items()))\n\n\nprint(dijkstra(gewogen, \"A\"))\n# {'A': 0, 'B': 4, 'C': 7, 'D': 1, 'E': 3, 'F': 8}\n",[47,22158,22159,22165,22169,22178,22262,22332,22414,22418,22422,22426,22443,22481,22496,22507,22529,22538,22564,22577,22585,22600,22632,22658,22678,22708,22731,22735,22739,22763],{"__ignoreMap":374},[384,22160,22161,22163],{"class":386,"line":387},[384,22162,9141],{"class":390},[384,22164,16009],{"class":394},[384,22166,22167],{"class":386,"line":414},[384,22168,1703],{"emptyLinePlaceholder":1702},[384,22170,22171,22174,22176],{"class":386,"line":500},[384,22172,22173],{"class":394},"gewogen ",[384,22175,456],{"class":405},[384,22177,482],{"class":405},[384,22179,22180,22182,22184,22186,22188,22190,22192,22194,22196,22198,22200,22202,22204,22206,22208,22210,22212,22215,22217,22219,22221,22223,22225,22227,22229,22231,22233,22235,22237,22239,22241,22243,22245,22247,22249,22251,22253,22255,22257,22259],{"class":386,"line":602},[384,22181,20648],{"class":405},[384,22183,20106],{"class":9035},[384,22185,9032],{"class":405},[384,22187,1911],{"class":405},[384,22189,1200],{"class":405},[384,22191,9032],{"class":405},[384,22193,20114],{"class":9035},[384,22195,9032],{"class":405},[384,22197,1911],{"class":405},[384,22199,1738],{"class":459},[384,22201,568],{"class":405},[384,22203,10623],{"class":405},[384,22205,20130],{"class":9035},[384,22207,9032],{"class":405},[384,22209,1911],{"class":405},[384,22211,565],{"class":459},[384,22213,22214],{"class":405},"},",[384,22216,10623],{"class":405},[384,22218,20114],{"class":9035},[384,22220,9032],{"class":405},[384,22222,1911],{"class":405},[384,22224,1200],{"class":405},[384,22226,9032],{"class":405},[384,22228,20106],{"class":9035},[384,22230,9032],{"class":405},[384,22232,1911],{"class":405},[384,22234,1738],{"class":459},[384,22236,568],{"class":405},[384,22238,10623],{"class":405},[384,22240,20122],{"class":9035},[384,22242,9032],{"class":405},[384,22244,1911],{"class":405},[384,22246,1732],{"class":459},[384,22248,568],{"class":405},[384,22250,10623],{"class":405},[384,22252,20046],{"class":9035},[384,22254,9032],{"class":405},[384,22256,1911],{"class":405},[384,22258,565],{"class":459},[384,22260,22261],{"class":405},"},\n",[384,22263,22264,22266,22268,22270,22272,22274,22276,22278,22280,22282,22284,22286,22288,22290,22292,22294,22296,22298,22300,22302,22304,22306,22308,22310,22312,22314,22316,22318,22320,22322,22324,22326,22328,22330],{"class":386,"line":721},[384,22265,20648],{"class":405},[384,22267,20122],{"class":9035},[384,22269,9032],{"class":405},[384,22271,1911],{"class":405},[384,22273,1200],{"class":405},[384,22275,9032],{"class":405},[384,22277,20114],{"class":9035},[384,22279,9032],{"class":405},[384,22281,1911],{"class":405},[384,22283,1732],{"class":459},[384,22285,568],{"class":405},[384,22287,10623],{"class":405},[384,22289,20145],{"class":9035},[384,22291,9032],{"class":405},[384,22293,1911],{"class":405},[384,22295,824],{"class":459},[384,22297,22214],{"class":405},[384,22299,10623],{"class":405},[384,22301,20130],{"class":9035},[384,22303,9032],{"class":405},[384,22305,1911],{"class":405},[384,22307,1200],{"class":405},[384,22309,9032],{"class":405},[384,22311,20106],{"class":9035},[384,22313,9032],{"class":405},[384,22315,1911],{"class":405},[384,22317,565],{"class":459},[384,22319,568],{"class":405},[384,22321,10623],{"class":405},[384,22323,20046],{"class":9035},[384,22325,9032],{"class":405},[384,22327,1911],{"class":405},[384,22329,824],{"class":459},[384,22331,22261],{"class":405},[384,22333,22334,22336,22338,22340,22342,22344,22346,22348,22350,22352,22354,22356,22358,22360,22362,22364,22366,22368,22370,22372,22374,22376,22378,22380,22382,22384,22386,22388,22390,22392,22394,22396,22398,22400,22402,22404,22406,22408,22410,22412],{"class":386,"line":727},[384,22335,20648],{"class":405},[384,22337,20046],{"class":9035},[384,22339,9032],{"class":405},[384,22341,1911],{"class":405},[384,22343,1200],{"class":405},[384,22345,9032],{"class":405},[384,22347,20114],{"class":9035},[384,22349,9032],{"class":405},[384,22351,1911],{"class":405},[384,22353,565],{"class":459},[384,22355,568],{"class":405},[384,22357,10623],{"class":405},[384,22359,20130],{"class":9035},[384,22361,9032],{"class":405},[384,22363,1911],{"class":405},[384,22365,824],{"class":459},[384,22367,568],{"class":405},[384,22369,10623],{"class":405},[384,22371,20145],{"class":9035},[384,22373,9032],{"class":405},[384,22375,1911],{"class":405},[384,22377,15059],{"class":459},[384,22379,22214],{"class":405},[384,22381,10623],{"class":405},[384,22383,20145],{"class":9035},[384,22385,9032],{"class":405},[384,22387,1911],{"class":405},[384,22389,1200],{"class":405},[384,22391,9032],{"class":405},[384,22393,20122],{"class":9035},[384,22395,9032],{"class":405},[384,22397,1911],{"class":405},[384,22399,824],{"class":459},[384,22401,568],{"class":405},[384,22403,10623],{"class":405},[384,22405,20046],{"class":9035},[384,22407,9032],{"class":405},[384,22409,1911],{"class":405},[384,22411,15059],{"class":459},[384,22413,22261],{"class":405},[384,22415,22416],{"class":386,"line":733},[384,22417,503],{"class":405},[384,22419,22420],{"class":386,"line":1299},[384,22421,1703],{"emptyLinePlaceholder":1702},[384,22423,22424],{"class":386,"line":2790},[384,22425,1703],{"emptyLinePlaceholder":1702},[384,22427,22428,22430,22433,22435,22437,22439,22441],{"class":386,"line":2985},[384,22429,1612],{"class":450},[384,22431,22432],{"class":401}," dijkstra",[384,22434,406],{"class":405},[384,22436,11201],{"class":1620},[384,22438,568],{"class":405},[384,22440,20849],{"class":1620},[384,22442,411],{"class":405},[384,22444,22445,22448,22450,22452,22454,22456,22459,22461,22463,22466,22468,22470,22473,22475,22477,22479],{"class":386,"line":3009},[384,22446,22447],{"class":394},"    afstand ",[384,22449,456],{"class":405},[384,22451,1200],{"class":405},[384,22453,20982],{"class":394},[384,22455,1911],{"class":405},[384,22457,22458],{"class":8910}," float",[384,22460,406],{"class":405},[384,22462,9032],{"class":405},[384,22464,22465],{"class":9035},"inf",[384,22467,9032],{"class":405},[384,22469,863],{"class":405},[384,22471,22472],{"class":390}," for",[384,22474,12922],{"class":394},[384,22476,398],{"class":390},[384,22478,21296],{"class":394},[384,22480,503],{"class":405},[384,22482,22483,22486,22488,22490,22492,22494],{"class":386,"line":3014},[384,22484,22485],{"class":394},"    afstand",[384,22487,426],{"class":405},[384,22489,2560],{"class":394},[384,22491,586],{"class":405},[384,22493,2769],{"class":405},[384,22495,1654],{"class":459},[384,22497,22498,22501,22503,22505],{"class":386,"line":3563},[384,22499,22500],{"class":394},"    klaar ",[384,22502,456],{"class":405},[384,22504,21070],{"class":8910},[384,22506,9058],{"class":405},[384,22508,22509,22512,22514,22517,22519,22521,22523,22526],{"class":386,"line":3588},[384,22510,22511],{"class":394},"    heap ",[384,22513,456],{"class":405},[384,22515,22516],{"class":405}," [(",[384,22518,2048],{"class":459},[384,22520,568],{"class":405},[384,22522,20849],{"class":394},[384,22524,22525],{"class":405},")]",[384,22527,22528],{"class":827},"  # (afstand, knoop)\n",[384,22530,22531,22533,22536],{"class":386,"line":3606},[384,22532,1357],{"class":390},[384,22534,22535],{"class":394}," heap",[384,22537,813],{"class":405},[384,22539,22540,22543,22545,22547,22549,22551,22553,22555,22557,22559,22561],{"class":386,"line":3611},[384,22541,22542],{"class":394},"        d",[384,22544,568],{"class":405},[384,22546,21419],{"class":394},[384,22548,456],{"class":405},[384,22550,16141],{"class":394},[384,22552,150],{"class":405},[384,22554,16146],{"class":401},[384,22556,406],{"class":405},[384,22558,11223],{"class":401},[384,22560,863],{"class":405},[384,22562,22563],{"class":827},"  # knoop met kleinste afstand\n",[384,22565,22566,22568,22570,22572,22575],{"class":386,"line":4541},[384,22567,577],{"class":390},[384,22569,21419],{"class":394},[384,22571,398],{"class":405},[384,22573,22574],{"class":394}," klaar",[384,22576,813],{"class":405},[384,22578,22579,22582],{"class":386,"line":4562},[384,22580,22581],{"class":390},"            continue",[384,22583,22584],{"class":827},"  # verouderde invoer in de heap\n",[384,22586,22587,22590,22592,22594,22596,22598],{"class":386,"line":4581},[384,22588,22589],{"class":394},"        klaar",[384,22591,150],{"class":405},[384,22593,9227],{"class":401},[384,22595,406],{"class":405},[384,22597,20333],{"class":401},[384,22599,3219],{"class":405},[384,22601,22602,22604,22606,22608,22611,22613,22615,22617,22619,22621,22623,22626,22629],{"class":386,"line":5021},[384,22603,3262],{"class":390},[384,22605,21155],{"class":394},[384,22607,568],{"class":405},[384,22609,22610],{"class":394}," gewicht ",[384,22612,398],{"class":390},[384,22614,20937],{"class":401},[384,22616,406],{"class":405},[384,22618,11201],{"class":401},[384,22620,426],{"class":405},[384,22622,20333],{"class":401},[384,22624,22625],{"class":405},"].",[384,22627,22628],{"class":401},"items",[384,22630,22631],{"class":405},"()):\n",[384,22633,22634,22636,22639,22641,22643,22645,22648,22650,22652,22655],{"class":386,"line":5030},[384,22635,3283],{"class":390},[384,22637,22638],{"class":394}," d ",[384,22640,562],{"class":405},[384,22642,22610],{"class":394},[384,22644,468],{"class":405},[384,22646,22647],{"class":394}," afstand",[384,22649,426],{"class":405},[384,22651,20982],{"class":394},[384,22653,22654],{"class":405},"]:",[384,22656,22657],{"class":827},"  # relaxatie\n",[384,22659,22660,22663,22665,22667,22669,22671,22673,22675],{"class":386,"line":9395},[384,22661,22662],{"class":394},"                afstand",[384,22664,426],{"class":405},[384,22666,20982],{"class":394},[384,22668,586],{"class":405},[384,22670,2769],{"class":405},[384,22672,22638],{"class":394},[384,22674,562],{"class":405},[384,22676,22677],{"class":394}," gewicht\n",[384,22679,22680,22683,22685,22687,22689,22691,22693,22695,22698,22700,22702,22704,22706],{"class":386,"line":9409},[384,22681,22682],{"class":394},"                heapq",[384,22684,150],{"class":405},[384,22686,16032],{"class":401},[384,22688,406],{"class":405},[384,22690,11223],{"class":401},[384,22692,568],{"class":405},[384,22694,18],{"class":405},[384,22696,22697],{"class":401},"afstand",[384,22699,426],{"class":405},[384,22701,20982],{"class":401},[384,22703,1735],{"class":405},[384,22705,21155],{"class":401},[384,22707,16055],{"class":405},[384,22709,22710,22712,22715,22717,22720,22722,22724,22726,22728],{"class":386,"line":9414},[384,22711,1664],{"class":390},[384,22713,22714],{"class":8910}," dict",[384,22716,406],{"class":405},[384,22718,22719],{"class":401},"sorted",[384,22721,406],{"class":405},[384,22723,22697],{"class":401},[384,22725,150],{"class":405},[384,22727,22628],{"class":401},[384,22729,22730],{"class":405},"()))\n",[384,22732,22733],{"class":386,"line":9972},[384,22734,1703],{"emptyLinePlaceholder":1702},[384,22736,22737],{"class":386,"line":9990},[384,22738,1703],{"emptyLinePlaceholder":1702},[384,22740,22741,22743,22745,22748,22750,22753,22755,22757,22759,22761],{"class":386,"line":10004},[384,22742,1708],{"class":401},[384,22744,406],{"class":405},[384,22746,22747],{"class":401},"dijkstra",[384,22749,406],{"class":405},[384,22751,22752],{"class":401},"gewogen",[384,22754,568],{"class":405},[384,22756,10623],{"class":405},[384,22758,20106],{"class":9035},[384,22760,9032],{"class":405},[384,22762,16055],{"class":405},[384,22764,22765],{"class":386,"line":10299},[384,22766,22767],{"class":827},"# {'A': 0, 'B': 4, 'C': 7, 'D': 1, 'E': 3, 'F': 8}\n",[372,22769,22770],{"v-slot:java":374},[376,22771,22773],{"className":437,"code":22772,"language":439,"meta":374,"style":374},"import java.util.*;\n\nrecord Item(int afstand, String knoop) {}\n\nstatic Map\u003CString, Integer> dijkstra(Map\u003CString, Map\u003CString, Integer>> graaf, String start) {\n    Map\u003CString, Integer> afstand = new TreeMap\u003C>(); \u002F\u002F TreeMap: alfabetische volgorde\n    for (String v : graaf.keySet()) afstand.put(v, Integer.MAX_VALUE);\n    afstand.put(start, 0);\n    Set\u003CString> klaar = new HashSet\u003C>();\n    PriorityQueue\u003CItem> heap = new PriorityQueue\u003C>(\n            Comparator.comparingInt(Item::afstand).thenComparing(Item::knoop));\n    heap.add(new Item(0, start));\n    while (!heap.isEmpty()) {\n        Item it = heap.poll(); \u002F\u002F knoop met kleinste afstand\n        if (!klaar.add(it.knoop())) continue; \u002F\u002F verouderde invoer in de heap\n        for (Map.Entry\u003CString, Integer> kant : new TreeMap\u003C>(graaf.get(it.knoop())).entrySet()) {\n            int nieuw = it.afstand() + kant.getValue();\n            if (nieuw \u003C afstand.get(kant.getKey())) { \u002F\u002F relaxatie\n                afstand.put(kant.getKey(), nieuw);\n                heap.add(new Item(nieuw, kant.getKey()));\n            }\n        }\n    }\n    return afstand;\n}\n",[47,22774,22775,22791,22795,22820,22824,22877,22907,22950,22968,22989,23012,23046,23071,23087,23108,23141,23199,23229,23263,23286,23317,23321,23325,23329,23337],{"__ignoreMap":374},[384,22776,22777,22779,22781,22783,22785,22787,22789],{"class":386,"line":387},[384,22778,9141],{"class":459},[384,22780,9144],{"class":450},[384,22782,150],{"class":405},[384,22784,4694],{"class":450},[384,22786,150],{"class":405},[384,22788,21253],{"class":394},[384,22790,848],{"class":405},[384,22792,22793],{"class":386,"line":414},[384,22794,1703],{"emptyLinePlaceholder":1702},[384,22796,22797,22800,22803,22805,22807,22809,22811,22813,22815,22817],{"class":386,"line":500},[384,22798,22799],{"class":450},"record",[384,22801,22802],{"class":8910}," Item",[384,22804,406],{"class":405},[384,22806,451],{"class":450},[384,22808,22647],{"class":394},[384,22810,568],{"class":405},[384,22812,21301],{"class":450},[384,22814,10200],{"class":394},[384,22816,863],{"class":405},[384,22818,22819],{"class":405}," {}\n",[384,22821,22822],{"class":386,"line":602},[384,22823,1703],{"emptyLinePlaceholder":1702},[384,22825,22826,22828,22831,22833,22835,22837,22839,22841,22843,22845,22847,22849,22851,22853,22855,22857,22859,22861,22863,22865,22867,22869,22871,22873,22875],{"class":386,"line":721},[384,22827,1756],{"class":450},[384,22829,22830],{"class":450}," Map",[384,22832,468],{"class":405},[384,22834,10812],{"class":394},[384,22836,568],{"class":405},[384,22838,13006],{"class":394},[384,22840,808],{"class":405},[384,22842,22432],{"class":401},[384,22844,406],{"class":405},[384,22846,21278],{"class":450},[384,22848,468],{"class":405},[384,22850,10812],{"class":394},[384,22852,568],{"class":405},[384,22854,22830],{"class":450},[384,22856,468],{"class":405},[384,22858,10812],{"class":394},[384,22860,568],{"class":405},[384,22862,13006],{"class":394},[384,22864,21293],{"class":405},[384,22866,21296],{"class":394},[384,22868,568],{"class":405},[384,22870,21301],{"class":450},[384,22872,20849],{"class":394},[384,22874,863],{"class":405},[384,22876,482],{"class":405},[384,22878,22879,22882,22884,22886,22888,22890,22892,22894,22896,22898,22901,22904],{"class":386,"line":727},[384,22880,22881],{"class":450},"    Map",[384,22883,468],{"class":405},[384,22885,10812],{"class":450},[384,22887,568],{"class":405},[384,22889,13006],{"class":450},[384,22891,808],{"class":405},[384,22893,22115],{"class":394},[384,22895,456],{"class":405},[384,22897,4786],{"class":390},[384,22899,22900],{"class":450}," TreeMap",[384,22902,22903],{"class":405},"\u003C>();",[384,22905,22906],{"class":827}," \u002F\u002F TreeMap: alfabetische volgorde\n",[384,22908,22909,22911,22913,22915,22917,22919,22921,22923,22926,22928,22930,22932,22935,22937,22939,22941,22943,22945,22948],{"class":386,"line":733},[384,22910,547],{"class":390},[384,22912,18],{"class":405},[384,22914,10812],{"class":450},[384,22916,12922],{"class":394},[384,22918,1911],{"class":390},[384,22920,21296],{"class":394},[384,22922,150],{"class":405},[384,22924,22925],{"class":401},"keySet",[384,22927,9272],{"class":405},[384,22929,22647],{"class":394},[384,22931,150],{"class":405},[384,22933,22934],{"class":401},"put",[384,22936,406],{"class":405},[384,22938,20982],{"class":394},[384,22940,568],{"class":405},[384,22942,13006],{"class":394},[384,22944,150],{"class":405},[384,22946,22947],{"class":394},"MAX_VALUE",[384,22949,5962],{"class":405},[384,22951,22952,22954,22956,22958,22960,22962,22964,22966],{"class":386,"line":1299},[384,22953,22485],{"class":394},[384,22955,150],{"class":405},[384,22957,22934],{"class":401},[384,22959,406],{"class":405},[384,22961,2560],{"class":394},[384,22963,568],{"class":405},[384,22965,460],{"class":459},[384,22967,5962],{"class":405},[384,22969,22970,22972,22974,22976,22978,22981,22983,22985,22987],{"class":386,"line":2790},[384,22971,21312],{"class":450},[384,22973,468],{"class":405},[384,22975,10812],{"class":450},[384,22977,808],{"class":405},[384,22979,22980],{"class":394}," klaar ",[384,22982,456],{"class":405},[384,22984,4786],{"class":390},[384,22986,21327],{"class":450},[384,22988,9196],{"class":405},[384,22990,22991,22993,22995,22998,23000,23003,23005,23007,23009],{"class":386,"line":2985},[384,22992,16298],{"class":450},[384,22994,468],{"class":405},[384,22996,22997],{"class":450},"Item",[384,22999,808],{"class":405},[384,23001,23002],{"class":394}," heap ",[384,23004,456],{"class":405},[384,23006,4786],{"class":390},[384,23008,16315],{"class":450},[384,23010,23011],{"class":405},"\u003C>(\n",[384,23013,23014,23017,23019,23022,23024,23026,23029,23031,23033,23036,23038,23040,23042,23044],{"class":386,"line":3009},[384,23015,23016],{"class":394},"            Comparator",[384,23018,150],{"class":405},[384,23020,23021],{"class":401},"comparingInt",[384,23023,406],{"class":405},[384,23025,22997],{"class":394},[384,23027,23028],{"class":390},"::",[384,23030,22697],{"class":394},[384,23032,8476],{"class":405},[384,23034,23035],{"class":401},"thenComparing",[384,23037,406],{"class":405},[384,23039,22997],{"class":394},[384,23041,23028],{"class":390},[384,23043,17324],{"class":394},[384,23045,4720],{"class":405},[384,23047,23048,23051,23053,23055,23057,23059,23061,23063,23065,23067,23069],{"class":386,"line":3014},[384,23049,23050],{"class":394},"    heap",[384,23052,150],{"class":405},[384,23054,9227],{"class":401},[384,23056,406],{"class":405},[384,23058,16370],{"class":390},[384,23060,22802],{"class":401},[384,23062,406],{"class":405},[384,23064,2048],{"class":459},[384,23066,568],{"class":405},[384,23068,20849],{"class":394},[384,23070,4720],{"class":405},[384,23072,23073,23075,23077,23079,23081,23083,23085],{"class":386,"line":3563},[384,23074,1357],{"class":390},[384,23076,15455],{"class":405},[384,23078,11223],{"class":394},[384,23080,150],{"class":405},[384,23082,9269],{"class":401},[384,23084,9272],{"class":405},[384,23086,482],{"class":405},[384,23088,23089,23092,23095,23097,23099,23101,23103,23105],{"class":386,"line":3588},[384,23090,23091],{"class":450},"        Item",[384,23093,23094],{"class":394}," it ",[384,23096,456],{"class":405},[384,23098,22535],{"class":394},[384,23100,150],{"class":405},[384,23102,16477],{"class":401},[384,23104,11123],{"class":405},[384,23106,23107],{"class":827}," \u002F\u002F knoop met kleinste afstand\n",[384,23109,23110,23112,23114,23117,23119,23121,23123,23126,23128,23130,23133,23136,23138],{"class":386,"line":3606},[384,23111,577],{"class":390},[384,23113,15455],{"class":405},[384,23115,23116],{"class":394},"klaar",[384,23118,150],{"class":405},[384,23120,9227],{"class":401},[384,23122,406],{"class":405},[384,23124,23125],{"class":394},"it",[384,23127,150],{"class":405},[384,23129,17324],{"class":401},[384,23131,23132],{"class":405},"()))",[384,23134,23135],{"class":390}," continue",[384,23137,463],{"class":405},[384,23139,23140],{"class":827}," \u002F\u002F verouderde invoer in de heap\n",[384,23142,23143,23145,23147,23149,23151,23154,23156,23158,23160,23162,23164,23167,23169,23171,23173,23175,23177,23179,23181,23183,23185,23187,23189,23192,23195,23197],{"class":386,"line":3611},[384,23144,3262],{"class":390},[384,23146,18],{"class":405},[384,23148,21278],{"class":450},[384,23150,150],{"class":405},[384,23152,23153],{"class":450},"Entry",[384,23155,468],{"class":405},[384,23157,10812],{"class":450},[384,23159,568],{"class":405},[384,23161,13006],{"class":450},[384,23163,808],{"class":405},[384,23165,23166],{"class":394}," kant ",[384,23168,1911],{"class":390},[384,23170,4786],{"class":390},[384,23172,22900],{"class":450},[384,23174,21330],{"class":405},[384,23176,11201],{"class":394},[384,23178,150],{"class":405},[384,23180,9356],{"class":401},[384,23182,406],{"class":405},[384,23184,23125],{"class":394},[384,23186,150],{"class":405},[384,23188,17324],{"class":401},[384,23190,23191],{"class":405},"())).",[384,23193,23194],{"class":401},"entrySet",[384,23196,9272],{"class":405},[384,23198,482],{"class":405},[384,23200,23201,23203,23206,23208,23211,23213,23215,23217,23219,23222,23224,23227],{"class":386,"line":4541},[384,23202,5762],{"class":450},[384,23204,23205],{"class":394}," nieuw ",[384,23207,456],{"class":405},[384,23209,23210],{"class":394}," it",[384,23212,150],{"class":405},[384,23214,22697],{"class":401},[384,23216,9254],{"class":405},[384,23218,1684],{"class":405},[384,23220,23221],{"class":394}," kant",[384,23223,150],{"class":405},[384,23225,23226],{"class":401},"getValue",[384,23228,9406],{"class":405},[384,23230,23231,23233,23235,23238,23240,23242,23244,23246,23248,23251,23253,23256,23258,23260],{"class":386,"line":4562},[384,23232,3283],{"class":390},[384,23234,18],{"class":405},[384,23236,23237],{"class":394},"nieuw ",[384,23239,468],{"class":405},[384,23241,22647],{"class":394},[384,23243,150],{"class":405},[384,23245,9356],{"class":401},[384,23247,406],{"class":405},[384,23249,23250],{"class":394},"kant",[384,23252,150],{"class":405},[384,23254,23255],{"class":401},"getKey",[384,23257,23132],{"class":405},[384,23259,1200],{"class":405},[384,23261,23262],{"class":827}," \u002F\u002F relaxatie\n",[384,23264,23265,23267,23269,23271,23273,23275,23277,23279,23281,23284],{"class":386,"line":4581},[384,23266,22662],{"class":394},[384,23268,150],{"class":405},[384,23270,22934],{"class":401},[384,23272,406],{"class":405},[384,23274,23250],{"class":394},[384,23276,150],{"class":405},[384,23278,23255],{"class":401},[384,23280,21073],{"class":405},[384,23282,23283],{"class":394}," nieuw",[384,23285,5962],{"class":405},[384,23287,23288,23291,23293,23295,23297,23299,23301,23303,23306,23308,23310,23312,23314],{"class":386,"line":5021},[384,23289,23290],{"class":394},"                heap",[384,23292,150],{"class":405},[384,23294,9227],{"class":401},[384,23296,406],{"class":405},[384,23298,16370],{"class":390},[384,23300,22802],{"class":401},[384,23302,406],{"class":405},[384,23304,23305],{"class":394},"nieuw",[384,23307,568],{"class":405},[384,23309,23221],{"class":394},[384,23311,150],{"class":405},[384,23313,23255],{"class":401},[384,23315,23316],{"class":405},"()));\n",[384,23318,23319],{"class":386,"line":5030},[384,23320,3530],{"class":405},[384,23322,23323],{"class":386,"line":9395},[384,23324,724],{"class":405},[384,23326,23327],{"class":386,"line":9409},[384,23328,730],{"class":405},[384,23330,23331,23333,23335],{"class":386,"line":9414},[384,23332,1664],{"class":390},[384,23334,22647],{"class":394},[384,23336,848],{"class":405},[384,23338,23339],{"class":386,"line":9972},[384,23340,503],{"class":405},[39,23342,23344],{"id":23343},"topologisch-sorteren-met-kahn","Topologisch sorteren met Kahn",[11,23346,23347,23348,23351,23352,6395,23355,23358,23359,23362,23363,23365,23366,23368],{},"Een topologische sortering (",[20,23349,23350],{},"topological sort",") van een gerichte graaf zonder cycli (",[20,23353,23354],{},"DAG",[20,23356,23357],{},"directed\nacyclic graph",") is een volgorde waarin elke kant ",[47,23360,23361],{},"u → v"," van links naar rechts wijst: ",[47,23364,20333],{}," komt vóór\n",[47,23367,20982],{},". Denk aan vakken met voorkennis of build-stappen die van elkaar afhangen.",[11,23370,23371],{},"Het algoritme van Kahn werkt met ingangsgraden:",[129,23373,23374,23377,23383,23386],{},[59,23375,23376],{},"Tel voor elke knoop de ingangsgraad (aantal inkomende kanten).",[59,23378,23379,23380,150],{},"Kies een knoop met ingangsgraad 0; zijn er meerdere, neem de ",[15,23381,23382],{},"alfabetisch kleinste",[59,23384,23385],{},"Zet hem in het resultaat en verlaag de ingangsgraad van elk van zijn opvolgers met 1.",[59,23387,23388],{},"Herhaal tot er geen knopen met ingangsgraad 0 meer zijn.",[11,23390,23391],{},"Voorbeeld met zes vakken en deze voorkennis-kanten:",[376,23393,23396],{"className":23394,"code":23395,"language":5073},[5071],"C → A    C → D    B → D    A → E    D → E    E → F\n",[47,23397,23395],{"__ignoreMap":374},[11,23399,23400],{},"Ingangsgraden bij de start: A = 1, B = 0, C = 0, D = 2, E = 2, F = 1.",[226,23402,23403,23418],{},[229,23404,23405],{},[232,23406,23407,23409,23412,23415],{},[235,23408,4147],{},[235,23410,23411],{},"Kandidaten (ingangsgraad 0)",[235,23413,23414],{},"Kies",[235,23416,23417],{},"Gevolg",[248,23419,23420,23432,23443,23455,23466,23477],{},[232,23421,23422,23424,23427,23429],{},[253,23423,269],{},[253,23425,23426],{},"B, C",[253,23428,20114],{},[253,23430,23431],{},"D: 2 → 1",[232,23433,23434,23436,23438,23440],{},[253,23435,1952],{},[253,23437,20122],{},[253,23439,20122],{},[253,23441,23442],{},"A: 1 → 0, D: 1 → 0",[232,23444,23445,23447,23450,23452],{},[253,23446,1970],{},[253,23448,23449],{},"A, D",[253,23451,20106],{},[253,23453,23454],{},"E: 2 → 1",[232,23456,23457,23459,23461,23463],{},[253,23458,1044],{},[253,23460,20130],{},[253,23462,20130],{},[253,23464,23465],{},"E: 1 → 0",[232,23467,23468,23470,23472,23474],{},[253,23469,1025],{},[253,23471,20046],{},[253,23473,20046],{},[253,23475,23476],{},"F: 1 → 0",[232,23478,23479,23481,23483,23485],{},[253,23480,2603],{},[253,23482,20145],{},[253,23484,20145],{},[253,23486],{},[11,23488,23489,23490,23493,23494,23496],{},"Topologische volgorde: ",[15,23491,23492],{},"B, C, A, D, E, F",". Bevat de graaf een cyclus, dan komen de knopen in die\ncyclus nooit op ingangsgraad 0 en is het resultaat korter dan ",[47,23495,20042],{},". Zo detecteert Kahn meteen cycli.",[369,23498,23499,23977],{},[372,23500,23501],{"v-slot:python":374},[376,23502,23504],{"className":378,"code":23503,"language":380,"meta":374,"style":374},"import heapq\n\nvoorkennis = {\n    \"A\": [\"E\"], \"B\": [\"D\"], \"C\": [\"A\", \"D\"],\n    \"D\": [\"E\"], \"E\": [\"F\"], \"F\": [],\n}\n\n\ndef kahn(graaf):\n    ingang = {v: 0 for v in graaf}\n    for u in graaf:\n        for v in graaf[u]:\n            ingang[v] += 1\n    klaar = [v for v in graaf if ingang[v] == 0]\n    heapq.heapify(klaar)  # min-heap: alfabetisch kleinste eerst\n    volgorde = []\n    while klaar:\n        u = heapq.heappop(klaar)\n        volgorde.append(u)\n        for v in graaf[u]:\n            ingang[v] -= 1\n            if ingang[v] == 0:\n                heapq.heappush(klaar, v)\n    if len(volgorde) \u003C len(graaf):\n        raise ValueError(\"graaf bevat een cyclus\")\n    return volgorde\n\n\nprint(kahn(voorkennis))  # ['B', 'C', 'A', 'D', 'E', 'F']\n",[47,23505,23506,23512,23516,23525,23589,23638,23642,23646,23650,23663,23688,23700,23716,23732,23770,23788,23796,23804,23822,23836,23852,23867,23885,23903,23926,23944,23950,23954,23958],{"__ignoreMap":374},[384,23507,23508,23510],{"class":386,"line":387},[384,23509,9141],{"class":390},[384,23511,16009],{"class":394},[384,23513,23514],{"class":386,"line":414},[384,23515,1703],{"emptyLinePlaceholder":1702},[384,23517,23518,23521,23523],{"class":386,"line":500},[384,23519,23520],{"class":394},"voorkennis ",[384,23522,456],{"class":405},[384,23524,482],{"class":405},[384,23526,23527,23529,23531,23533,23535,23537,23539,23541,23543,23545,23547,23549,23551,23553,23555,23557,23559,23561,23563,23565,23567,23569,23571,23573,23575,23577,23579,23581,23583,23585,23587],{"class":386,"line":602},[384,23528,20648],{"class":405},[384,23530,20106],{"class":9035},[384,23532,9032],{"class":405},[384,23534,1911],{"class":405},[384,23536,12370],{"class":405},[384,23538,9032],{"class":405},[384,23540,20046],{"class":9035},[384,23542,9032],{"class":405},[384,23544,1735],{"class":405},[384,23546,10623],{"class":405},[384,23548,20114],{"class":9035},[384,23550,9032],{"class":405},[384,23552,1911],{"class":405},[384,23554,12370],{"class":405},[384,23556,9032],{"class":405},[384,23558,20130],{"class":9035},[384,23560,9032],{"class":405},[384,23562,1735],{"class":405},[384,23564,10623],{"class":405},[384,23566,20122],{"class":9035},[384,23568,9032],{"class":405},[384,23570,1911],{"class":405},[384,23572,12370],{"class":405},[384,23574,9032],{"class":405},[384,23576,20106],{"class":9035},[384,23578,9032],{"class":405},[384,23580,568],{"class":405},[384,23582,10623],{"class":405},[384,23584,20130],{"class":9035},[384,23586,9032],{"class":405},[384,23588,20733],{"class":405},[384,23590,23591,23593,23595,23597,23599,23601,23603,23605,23607,23609,23611,23613,23615,23617,23619,23621,23623,23625,23627,23629,23631,23633,23635],{"class":386,"line":721},[384,23592,20648],{"class":405},[384,23594,20130],{"class":9035},[384,23596,9032],{"class":405},[384,23598,1911],{"class":405},[384,23600,12370],{"class":405},[384,23602,9032],{"class":405},[384,23604,20046],{"class":9035},[384,23606,9032],{"class":405},[384,23608,1735],{"class":405},[384,23610,10623],{"class":405},[384,23612,20046],{"class":9035},[384,23614,9032],{"class":405},[384,23616,1911],{"class":405},[384,23618,12370],{"class":405},[384,23620,9032],{"class":405},[384,23622,20145],{"class":9035},[384,23624,9032],{"class":405},[384,23626,1735],{"class":405},[384,23628,10623],{"class":405},[384,23630,20145],{"class":9035},[384,23632,9032],{"class":405},[384,23634,1911],{"class":405},[384,23636,23637],{"class":405}," [],\n",[384,23639,23640],{"class":386,"line":727},[384,23641,503],{"class":405},[384,23643,23644],{"class":386,"line":733},[384,23645,1703],{"emptyLinePlaceholder":1702},[384,23647,23648],{"class":386,"line":1299},[384,23649,1703],{"emptyLinePlaceholder":1702},[384,23651,23652,23654,23657,23659,23661],{"class":386,"line":2790},[384,23653,1612],{"class":450},[384,23655,23656],{"class":401}," kahn",[384,23658,406],{"class":405},[384,23660,11201],{"class":1620},[384,23662,411],{"class":405},[384,23664,23665,23668,23670,23672,23674,23676,23678,23680,23682,23684,23686],{"class":386,"line":2985},[384,23666,23667],{"class":394},"    ingang ",[384,23669,456],{"class":405},[384,23671,1200],{"class":405},[384,23673,20982],{"class":394},[384,23675,1911],{"class":405},[384,23677,460],{"class":459},[384,23679,22472],{"class":390},[384,23681,12922],{"class":394},[384,23683,398],{"class":390},[384,23685,21296],{"class":394},[384,23687,503],{"class":405},[384,23689,23690,23692,23694,23696,23698],{"class":386,"line":3009},[384,23691,547],{"class":390},[384,23693,21419],{"class":394},[384,23695,398],{"class":390},[384,23697,21296],{"class":394},[384,23699,813],{"class":405},[384,23701,23702,23704,23706,23708,23710,23712,23714],{"class":386,"line":3014},[384,23703,3262],{"class":390},[384,23705,12922],{"class":394},[384,23707,398],{"class":390},[384,23709,21296],{"class":394},[384,23711,426],{"class":405},[384,23713,20333],{"class":394},[384,23715,599],{"class":405},[384,23717,23718,23721,23723,23725,23727,23730],{"class":386,"line":3563},[384,23719,23720],{"class":394},"            ingang",[384,23722,426],{"class":405},[384,23724,20982],{"class":394},[384,23726,586],{"class":405},[384,23728,23729],{"class":405}," +=",[384,23731,918],{"class":459},[384,23733,23734,23736,23738,23740,23743,23745,23747,23749,23752,23755,23758,23760,23762,23764,23766,23768],{"class":386,"line":3588},[384,23735,22500],{"class":394},[384,23737,456],{"class":405},[384,23739,12370],{"class":405},[384,23741,23742],{"class":394},"v ",[384,23744,391],{"class":390},[384,23746,12922],{"class":394},[384,23748,398],{"class":390},[384,23750,23751],{"class":394}," graaf ",[384,23753,23754],{"class":390},"if",[384,23756,23757],{"class":394}," ingang",[384,23759,426],{"class":405},[384,23761,20982],{"class":394},[384,23763,586],{"class":405},[384,23765,589],{"class":405},[384,23767,460],{"class":459},[384,23769,432],{"class":405},[384,23771,23772,23775,23777,23779,23781,23783,23785],{"class":386,"line":3606},[384,23773,23774],{"class":394},"    heapq",[384,23776,150],{"class":405},[384,23778,16227],{"class":401},[384,23780,406],{"class":405},[384,23782,23116],{"class":401},[384,23784,863],{"class":405},[384,23786,23787],{"class":827},"  # min-heap: alfabetisch kleinste eerst\n",[384,23789,23790,23792,23794],{"class":386,"line":3611},[384,23791,20884],{"class":394},[384,23793,456],{"class":405},[384,23795,4408],{"class":405},[384,23797,23798,23800,23802],{"class":386,"line":4541},[384,23799,1357],{"class":390},[384,23801,22574],{"class":394},[384,23803,813],{"class":405},[384,23805,23806,23808,23810,23812,23814,23816,23818,23820],{"class":386,"line":4562},[384,23807,20901],{"class":394},[384,23809,456],{"class":405},[384,23811,16141],{"class":394},[384,23813,150],{"class":405},[384,23815,16146],{"class":401},[384,23817,406],{"class":405},[384,23819,23116],{"class":401},[384,23821,3219],{"class":405},[384,23823,23824,23826,23828,23830,23832,23834],{"class":386,"line":4581},[384,23825,20916],{"class":394},[384,23827,150],{"class":405},[384,23829,4486],{"class":401},[384,23831,406],{"class":405},[384,23833,20333],{"class":401},[384,23835,3219],{"class":405},[384,23837,23838,23840,23842,23844,23846,23848,23850],{"class":386,"line":5021},[384,23839,3262],{"class":390},[384,23841,12922],{"class":394},[384,23843,398],{"class":390},[384,23845,21296],{"class":394},[384,23847,426],{"class":405},[384,23849,20333],{"class":394},[384,23851,599],{"class":405},[384,23853,23854,23856,23858,23860,23862,23865],{"class":386,"line":5030},[384,23855,23720],{"class":394},[384,23857,426],{"class":405},[384,23859,20982],{"class":394},[384,23861,586],{"class":405},[384,23863,23864],{"class":405}," -=",[384,23866,918],{"class":459},[384,23868,23869,23871,23873,23875,23877,23879,23881,23883],{"class":386,"line":9395},[384,23870,3283],{"class":390},[384,23872,23757],{"class":394},[384,23874,426],{"class":405},[384,23876,20982],{"class":394},[384,23878,586],{"class":405},[384,23880,589],{"class":405},[384,23882,460],{"class":459},[384,23884,813],{"class":405},[384,23886,23887,23889,23891,23893,23895,23897,23899,23901],{"class":386,"line":9409},[384,23888,22682],{"class":394},[384,23890,150],{"class":405},[384,23892,16032],{"class":401},[384,23894,406],{"class":405},[384,23896,23116],{"class":401},[384,23898,568],{"class":405},[384,23900,21155],{"class":401},[384,23902,3219],{"class":405},[384,23904,23905,23907,23909,23911,23914,23916,23918,23920,23922,23924],{"class":386,"line":9414},[384,23906,1636],{"class":390},[384,23908,2681],{"class":401},[384,23910,406],{"class":405},[384,23912,23913],{"class":401},"volgorde",[384,23915,863],{"class":405},[384,23917,3294],{"class":405},[384,23919,2681],{"class":401},[384,23921,406],{"class":405},[384,23923,11201],{"class":401},[384,23925,411],{"class":405},[384,23927,23928,23930,23933,23935,23937,23940,23942],{"class":386,"line":9972},[384,23929,12729],{"class":390},[384,23931,23932],{"class":8910}," ValueError",[384,23934,406],{"class":405},[384,23936,9032],{"class":405},[384,23938,23939],{"class":9035},"graaf bevat een cyclus",[384,23941,9032],{"class":405},[384,23943,3219],{"class":405},[384,23945,23946,23948],{"class":386,"line":9990},[384,23947,1664],{"class":390},[384,23949,21008],{"class":394},[384,23951,23952],{"class":386,"line":10004},[384,23953,1703],{"emptyLinePlaceholder":1702},[384,23955,23956],{"class":386,"line":10299},[384,23957,1703],{"emptyLinePlaceholder":1702},[384,23959,23960,23962,23964,23967,23969,23972,23974],{"class":386,"line":10316},[384,23961,1708],{"class":401},[384,23963,406],{"class":405},[384,23965,23966],{"class":401},"kahn",[384,23968,406],{"class":405},[384,23970,23971],{"class":401},"voorkennis",[384,23973,1741],{"class":405},[384,23975,23976],{"class":827},"  # ['B', 'C', 'A', 'D', 'E', 'F']\n",[372,23978,23979],{"v-slot:java":374},[376,23980,23982],{"className":437,"code":23981,"language":439,"meta":374,"style":374},"import java.util.*;\n\nstatic List\u003CString> kahn(Map\u003CString, List\u003CString>> graaf) {\n    Map\u003CString, Integer> ingang = new HashMap\u003C>();\n    for (String v : graaf.keySet()) ingang.put(v, 0);\n    for (List\u003CString> opvolgers : graaf.values()) {\n        for (String v : opvolgers) ingang.merge(v, 1, Integer::sum);\n    }\n    PriorityQueue\u003CString> klaar = new PriorityQueue\u003C>(); \u002F\u002F alfabetisch kleinste eerst\n    for (String v : graaf.keySet()) if (ingang.get(v) == 0) klaar.add(v);\n    List\u003CString> volgorde = new ArrayList\u003C>();\n    while (!klaar.isEmpty()) {\n        String u = klaar.poll();\n        volgorde.add(u);\n        for (String v : graaf.get(u)) {\n            if (ingang.merge(v, -1, Integer::sum) == 0) klaar.add(v);\n        }\n    }\n    if (volgorde.size() \u003C graaf.size()) throw new IllegalStateException(\"graaf bevat een cyclus\");\n    return volgorde;\n}\n",[47,23983,23984,24000,24004,24042,24068,24104,24134,24177,24181,24204,24259,24279,24295,24311,24325,24351,24401,24405,24409,24450,24458],{"__ignoreMap":374},[384,23985,23986,23988,23990,23992,23994,23996,23998],{"class":386,"line":387},[384,23987,9141],{"class":459},[384,23989,9144],{"class":450},[384,23991,150],{"class":405},[384,23993,4694],{"class":450},[384,23995,150],{"class":405},[384,23997,21253],{"class":394},[384,23999,848],{"class":405},[384,24001,24002],{"class":386,"line":414},[384,24003,1703],{"emptyLinePlaceholder":1702},[384,24005,24006,24008,24010,24012,24014,24016,24018,24020,24022,24024,24026,24028,24030,24032,24034,24036,24038,24040],{"class":386,"line":500},[384,24007,1756],{"class":450},[384,24009,15190],{"class":450},[384,24011,468],{"class":405},[384,24013,10812],{"class":394},[384,24015,808],{"class":405},[384,24017,23656],{"class":401},[384,24019,406],{"class":405},[384,24021,21278],{"class":450},[384,24023,468],{"class":405},[384,24025,10812],{"class":394},[384,24027,568],{"class":405},[384,24029,15190],{"class":450},[384,24031,468],{"class":405},[384,24033,10812],{"class":394},[384,24035,21293],{"class":405},[384,24037,21296],{"class":394},[384,24039,863],{"class":405},[384,24041,482],{"class":405},[384,24043,24044,24046,24048,24050,24052,24054,24056,24059,24061,24063,24066],{"class":386,"line":602},[384,24045,22881],{"class":450},[384,24047,468],{"class":405},[384,24049,10812],{"class":450},[384,24051,568],{"class":405},[384,24053,13006],{"class":450},[384,24055,808],{"class":405},[384,24057,24058],{"class":394}," ingang ",[384,24060,456],{"class":405},[384,24062,4786],{"class":390},[384,24064,24065],{"class":450}," HashMap",[384,24067,9196],{"class":405},[384,24069,24070,24072,24074,24076,24078,24080,24082,24084,24086,24088,24090,24092,24094,24096,24098,24100,24102],{"class":386,"line":721},[384,24071,547],{"class":390},[384,24073,18],{"class":405},[384,24075,10812],{"class":450},[384,24077,12922],{"class":394},[384,24079,1911],{"class":390},[384,24081,21296],{"class":394},[384,24083,150],{"class":405},[384,24085,22925],{"class":401},[384,24087,9272],{"class":405},[384,24089,23757],{"class":394},[384,24091,150],{"class":405},[384,24093,22934],{"class":401},[384,24095,406],{"class":405},[384,24097,20982],{"class":394},[384,24099,568],{"class":405},[384,24101,460],{"class":459},[384,24103,5962],{"class":405},[384,24105,24106,24108,24110,24112,24114,24116,24118,24121,24123,24125,24127,24130,24132],{"class":386,"line":727},[384,24107,547],{"class":390},[384,24109,18],{"class":405},[384,24111,15166],{"class":450},[384,24113,468],{"class":405},[384,24115,10812],{"class":450},[384,24117,808],{"class":405},[384,24119,24120],{"class":394}," opvolgers ",[384,24122,1911],{"class":390},[384,24124,21296],{"class":394},[384,24126,150],{"class":405},[384,24128,24129],{"class":401},"values",[384,24131,9272],{"class":405},[384,24133,482],{"class":405},[384,24135,24136,24138,24140,24142,24144,24146,24149,24151,24153,24155,24158,24160,24162,24164,24166,24168,24170,24172,24175],{"class":386,"line":733},[384,24137,3262],{"class":390},[384,24139,18],{"class":405},[384,24141,10812],{"class":450},[384,24143,12922],{"class":394},[384,24145,1911],{"class":390},[384,24147,24148],{"class":394}," opvolgers",[384,24150,863],{"class":405},[384,24152,23757],{"class":394},[384,24154,150],{"class":405},[384,24156,24157],{"class":401},"merge",[384,24159,406],{"class":405},[384,24161,20982],{"class":394},[384,24163,568],{"class":405},[384,24165,565],{"class":459},[384,24167,568],{"class":405},[384,24169,13006],{"class":394},[384,24171,23028],{"class":390},[384,24173,24174],{"class":394},"sum",[384,24176,5962],{"class":405},[384,24178,24179],{"class":386,"line":1299},[384,24180,730],{"class":405},[384,24182,24183,24185,24187,24189,24191,24193,24195,24197,24199,24201],{"class":386,"line":2790},[384,24184,16298],{"class":450},[384,24186,468],{"class":405},[384,24188,10812],{"class":450},[384,24190,808],{"class":405},[384,24192,22980],{"class":394},[384,24194,456],{"class":405},[384,24196,4786],{"class":390},[384,24198,16315],{"class":450},[384,24200,22903],{"class":405},[384,24202,24203],{"class":827}," \u002F\u002F alfabetisch kleinste eerst\n",[384,24205,24206,24208,24210,24212,24214,24216,24218,24220,24222,24224,24226,24228,24231,24233,24235,24237,24239,24241,24243,24245,24247,24249,24251,24253,24255,24257],{"class":386,"line":2985},[384,24207,547],{"class":390},[384,24209,18],{"class":405},[384,24211,10812],{"class":450},[384,24213,12922],{"class":394},[384,24215,1911],{"class":390},[384,24217,21296],{"class":394},[384,24219,150],{"class":405},[384,24221,22925],{"class":401},[384,24223,9272],{"class":405},[384,24225,7384],{"class":390},[384,24227,18],{"class":405},[384,24229,24230],{"class":394},"ingang",[384,24232,150],{"class":405},[384,24234,9356],{"class":401},[384,24236,406],{"class":405},[384,24238,20982],{"class":394},[384,24240,863],{"class":405},[384,24242,589],{"class":405},[384,24244,460],{"class":459},[384,24246,863],{"class":405},[384,24248,22574],{"class":394},[384,24250,150],{"class":405},[384,24252,9227],{"class":401},[384,24254,406],{"class":405},[384,24256,20982],{"class":394},[384,24258,5962],{"class":405},[384,24260,24261,24263,24265,24267,24269,24271,24273,24275,24277],{"class":386,"line":3009},[384,24262,19430],{"class":450},[384,24264,468],{"class":405},[384,24266,10812],{"class":450},[384,24268,808],{"class":405},[384,24270,21065],{"class":394},[384,24272,456],{"class":405},[384,24274,4786],{"class":390},[384,24276,9177],{"class":450},[384,24278,9196],{"class":405},[384,24280,24281,24283,24285,24287,24289,24291,24293],{"class":386,"line":3014},[384,24282,1357],{"class":390},[384,24284,15455],{"class":405},[384,24286,23116],{"class":394},[384,24288,150],{"class":405},[384,24290,9269],{"class":401},[384,24292,9272],{"class":405},[384,24294,482],{"class":405},[384,24296,24297,24299,24301,24303,24305,24307,24309],{"class":386,"line":3563},[384,24298,21416],{"class":450},[384,24300,21419],{"class":394},[384,24302,456],{"class":405},[384,24304,22574],{"class":394},[384,24306,150],{"class":405},[384,24308,16477],{"class":401},[384,24310,9406],{"class":405},[384,24312,24313,24315,24317,24319,24321,24323],{"class":386,"line":3588},[384,24314,20916],{"class":394},[384,24316,150],{"class":405},[384,24318,9227],{"class":401},[384,24320,406],{"class":405},[384,24322,20333],{"class":394},[384,24324,5962],{"class":405},[384,24326,24327,24329,24331,24333,24335,24337,24339,24341,24343,24345,24347,24349],{"class":386,"line":3606},[384,24328,3262],{"class":390},[384,24330,18],{"class":405},[384,24332,10812],{"class":450},[384,24334,12922],{"class":394},[384,24336,1911],{"class":390},[384,24338,21296],{"class":394},[384,24340,150],{"class":405},[384,24342,9356],{"class":401},[384,24344,406],{"class":405},[384,24346,20333],{"class":394},[384,24348,1741],{"class":405},[384,24350,482],{"class":405},[384,24352,24353,24355,24357,24359,24361,24363,24365,24367,24369,24371,24373,24375,24377,24379,24381,24383,24385,24387,24389,24391,24393,24395,24397,24399],{"class":386,"line":3611},[384,24354,3283],{"class":390},[384,24356,18],{"class":405},[384,24358,24230],{"class":394},[384,24360,150],{"class":405},[384,24362,24157],{"class":401},[384,24364,406],{"class":405},[384,24366,20982],{"class":394},[384,24368,568],{"class":405},[384,24370,5546],{"class":405},[384,24372,269],{"class":459},[384,24374,568],{"class":405},[384,24376,13006],{"class":394},[384,24378,23028],{"class":390},[384,24380,24174],{"class":394},[384,24382,863],{"class":405},[384,24384,589],{"class":405},[384,24386,460],{"class":459},[384,24388,863],{"class":405},[384,24390,22574],{"class":394},[384,24392,150],{"class":405},[384,24394,9227],{"class":401},[384,24396,406],{"class":405},[384,24398,20982],{"class":394},[384,24400,5962],{"class":405},[384,24402,24403],{"class":386,"line":4541},[384,24404,724],{"class":405},[384,24406,24407],{"class":386,"line":4562},[384,24408,730],{"class":405},[384,24410,24411,24413,24415,24417,24419,24421,24423,24425,24427,24429,24431,24433,24436,24438,24440,24442,24444,24446,24448],{"class":386,"line":4581},[384,24412,1636],{"class":390},[384,24414,18],{"class":405},[384,24416,23913],{"class":394},[384,24418,150],{"class":405},[384,24420,9319],{"class":401},[384,24422,9254],{"class":405},[384,24424,3294],{"class":405},[384,24426,21296],{"class":394},[384,24428,150],{"class":405},[384,24430,9319],{"class":401},[384,24432,9272],{"class":405},[384,24434,24435],{"class":390}," throw",[384,24437,4786],{"class":390},[384,24439,9284],{"class":401},[384,24441,406],{"class":405},[384,24443,9032],{"class":405},[384,24445,23939],{"class":9035},[384,24447,9032],{"class":405},[384,24449,5962],{"class":405},[384,24451,24452,24454,24456],{"class":386,"line":5021},[384,24453,1664],{"class":390},[384,24455,21042],{"class":394},[384,24457,848],{"class":405},[384,24459,24460],{"class":386,"line":5030},[384,24461,503],{"class":405},[39,24463,17],{"id":2398},[226,24465,24466,24480],{},[229,24467,24468],{},[232,24469,24470,24472,24475,24478],{},[235,24471,2437],{},[235,24473,24474],{},"Tijd (adjacency list)",[235,24476,24477],{},"Tijd (matrix)",[235,24479,6085],{},[248,24481,24482,24499,24516,24532,24549],{},[232,24483,24484,24487,24491,24495],{},[253,24485,24486],{},"BFS",[253,24488,24489],{},[47,24490,20303],{},[253,24492,24493],{},[47,24494,20308],{},[253,24496,24497],{},[47,24498,20342],{},[232,24500,24501,24504,24508,24512],{},[253,24502,24503],{},"DFS",[253,24505,24506],{},[47,24507,20303],{},[253,24509,24510],{},[47,24511,20308],{},[253,24513,24514],{},[47,24515,20342],{},[232,24517,24518,24521,24526,24528],{},[253,24519,24520],{},"Dijkstra met binaire heap",[253,24522,24523],{},[47,24524,24525],{},"O((V + E) log V)",[253,24527,13795],{},[253,24529,24530],{},[47,24531,20303],{},[232,24533,24534,24537,24541,24545],{},[253,24535,24536],{},"Dijkstra met array, zonder heap",[253,24538,24539],{},[47,24540,20308],{},[253,24542,24543],{},[47,24544,20308],{},[253,24546,24547],{},[47,24548,20342],{},[232,24550,24551,24554,24558,24562],{},[253,24552,24553],{},"Kahn",[253,24555,24556],{},[47,24557,20303],{},[253,24559,24560],{},[47,24561,20308],{},[253,24563,24564],{},[47,24565,20342],{},[11,24567,24568,24569,24572,24573,24576,24577,24579,24580,24583,24584,24586,24587,150],{},"BFS en DFS bekijken elke knoop één keer en elke kant (bij een ongerichte graaf) twee keer, vandaar\n",[47,24570,24571],{},"V + E",". Dijkstra doet daarbovenop heap-operaties van ",[47,24574,24575],{},"O(log V)","; zie ",[28,24578,16757],{"href":11222},".\nKahn met de alfabetische keuze via een heap kost ",[47,24581,24582],{},"O(V log V + E)","; zonder die eis volstaat een gewone\nwachtrij en is het ",[47,24585,20303],{},". Meer over deze notatie lees je bij ",[28,24588,2398],{"href":2421},[39,24590,2248],{"id":2247},[129,24592,24593,24605,24611,24627,24637],{},[59,24594,24595,24598,24599,24601,24602,24604],{},[15,24596,24597],{},"Buren niet alfabetisch bekijken."," Bij ",[47,24600,20114],{}," zijn de buren ",[47,24603,20117],{},", in die volgorde. Neem je\nze in de volgorde waarin de kanten in de opgave staan, dan krijg je een ander antwoord.",[59,24606,24607,24610],{},[15,24608,24609],{},"BFS: een knoop pas markeren als hij uit de wachtrij komt."," Dan kan hij er twee keer in komen.\nMarkeer hem als bezocht zodra hij erin gaat.",[59,24612,24613,24616,24617,24619,24620,1483,24622,24624,24625,150],{},[15,24614,24615],{},"DFS als BFS uitvoeren."," Bij DFS ga je na ",[47,24618,20114],{}," meteen door naar de eerste onbezochte buur van ",[47,24621,20114],{},[47,24623,20122],{},"), niet eerst terug naar de andere buren van ",[47,24626,20106],{},[59,24628,24629,24632,24633,24636],{},[15,24630,24631],{},"Dijkstra: een afgeronde knoop opnieuw aanpassen of bij gelijke afstand overschrijven."," Een\nafstand verandert alleen als de nieuwe route ",[15,24634,24635],{},"strikt"," korter is.",[59,24638,24639,24642],{},[15,24640,24641],{},"Kahn: de ingangsgraden niet bijwerken."," Verlaag na elke keuze de ingangsgraad van alle\nopvolgers; pas dan zie je welke knopen nieuw beschikbaar zijn.",[39,24644,2316],{"id":2315},[56,24646,24647,24653,24659,24665],{},[59,24648,24649,24650,24652],{},"Een graaf bestaat uit knopen en kanten, gericht of ongericht, gewogen of niet; meestal sla je hem op\nals adjacency list (",[47,24651,20303],{}," geheugen).",[59,24654,24655,24656,24658],{},"BFS gebruikt een wachtrij en verkent laag voor laag; DFS gaat recursief zo diep mogelijk. Beide\n",[47,24657,20303],{},", buren altijd alfabetisch.",[59,24660,24661,24662,24664],{},"Dijkstra kiest steeds de knoop met de kleinste voorlopige afstand en werkt alleen met\nniet-negatieve gewichten: ",[47,24663,24525],{}," met een heap.",[59,24666,24667],{},"Kahn sorteert een DAG topologisch door steeds een knoop met ingangsgraad 0 te kiezen (bij ons de\nalfabetisch kleinste) en detecteert zo ook cycli.",[2371,24669,24670],{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":374,"searchDepth":414,"depth":414,"links":24672},[24673,24674,24675,24676,24677,24678,24679,24680,24681],{"id":19975,"depth":414,"text":19976},{"id":20066,"depth":414,"text":20067},{"id":20363,"depth":414,"text":20364},{"id":20510,"depth":414,"text":20511},{"id":21903,"depth":414,"text":21904},{"id":23343,"depth":414,"text":23344},{"id":2398,"depth":414,"text":17},{"id":2247,"depth":414,"text":2248},{"id":2315,"depth":414,"text":2316},"Leer grafen representeren met adjacency lists en matrices, en traceer BFS, DFS, Dijkstra en het algoritme van Kahn stap voor stap, met code in Python en Java.","i-lucide-waypoints",{},"\u002Fpracticely-dsa\u002Fgrafen",{"title":19952,"description":24682},"practicely-dsa\u002Fgrafen","J0aQBdQbYkvKjbrR1zl45Lv4_kltmHb8pUgHLstrMbU",1793084864256]