[{"data":1,"prerenderedAt":8551},["ShallowReactive",2],{"dsa-hashtabellen":3,"dsa-nav-hashtabellen":2640},{"id":4,"title":5,"body":6,"description":2631,"extension":2632,"icon":2633,"meta":2634,"navigation":883,"order":892,"path":2635,"seo":2636,"stem":2637,"topic":2638,"__hash__":2639},"practicelyDsa\u002Fpracticely-dsa\u002Fhashtabellen.md","Hashtabellen uitgelegd: hashfuncties, botsingen en linear probing",{"type":7,"value":8,"toc":2617},"minimark",[9,32,35,40,47,57,91,107,111,132,137,154,217,220,282,288,292,313,321,488,491,521,525,538,584,599,609,647,656,660,667,673,687,697,718,729,795,821,825,828,2328,2354,2358,2361,2393,2411,2434,2437,2517,2520,2524,2579,2583,2613],[10,11,12,13,17,18,22,23,27,28,31],"p",{},"Een hashtabel (",[14,15,16],"em",{},"hash table",") bewaart sleutels zo dat je ze in gemiddeld ",[19,20,21],"strong",{},"constante tijd"," terugvindt.\nGeen lijst doorlopen, geen binair zoeken: je rekent uit waar de sleutel moet staan en kijkt daar.\nElke ",[24,25,26],"code",{},"dict"," in Python en elke ",[24,29,30],{},"HashMap"," in Java werkt zo.",[10,33,34],{},"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.",[36,37,39],"h2",{"id":38},"de-hashfunctie","De hashfunctie",[10,41,42,43,46],{},"Een hashfunctie (",[14,44,45],{},"hash function",") zet een sleutel om in een vakjesnummer. Op Practicely gebruiken we\nsteeds dezelfde, eenvoudige functie:",[48,49,54],"pre",{"className":50,"code":52,"language":53},[51],"language-text","h(k) = k mod m\n","text",[24,55,52],{"__ignoreMap":56},"",[10,58,59,60,63,64,67,68,71,72,75,76,71,79,82,83,86,87,90],{},"Hierin is ",[24,61,62],{},"m"," de tabelgrootte, het aantal vakjes. Bij ",[24,65,66],{},"m = 7"," komt sleutel ",[24,69,70],{},"15"," in vakje ",[24,73,74],{},"15 mod 7 = 1","\nen sleutel ",[24,77,78],{},"27",[24,80,81],{},"27 mod 7 = 6",". De vakjes zijn genummerd van ",[24,84,85],{},"0"," tot en met ",[24,88,89],{},"m - 1",".",[10,92,93,94,96,97,100,101,103,104,106],{},"Een goede hashfunctie verdeelt sleutels gelijkmatig over de tabel. Daarom kiest men voor ",[24,95,62],{}," vaak een\npriemgetal: met ",[24,98,99],{},"m = 10"," belanden alle sleutels die op een ",[24,102,85],{}," eindigen in hetzelfde vakje, met ",[24,105,66],{},"\ngebeurt dat veel minder snel.",[36,108,110],{"id":109},"botsingen","Botsingen",[10,112,113,114,117,118,120,121,124,125,127,128,131],{},"Er zijn veel meer mogelijke sleutels dan vakjes, dus twee sleutels komen soms in hetzelfde vakje\nuit. Dat heet een botsing (",[14,115,116],{},"collision","). ",[24,119,70],{}," en ",[24,122,123],{},"8"," hebben bij ",[24,126,66],{}," allebei hashwaarde ",[24,129,130],{},"1",".\nBotsingen zijn niet te vermijden; de vraag is alleen hoe je ermee omgaat. Er zijn twee klassieke\noplossingen.",[133,134,136],"h3",{"id":135},"chaining","Chaining",[10,138,139,140,143,144,147,148,151,152,90],{},"Bij chaining (",[14,141,142],{},"separate chaining",") is elk vakje een lijst. Een nieuwe sleutel komt ",[19,145,146],{},"achteraan"," de\nlijst van zijn vakje. We voegen in deze volgorde in: ",[24,149,150],{},"15, 11, 27, 8, 20, 34"," met ",[24,153,66],{},[155,156,157,172],"table",{},[158,159,160],"thead",{},[161,162,163,167],"tr",{},[164,165,166],"th",{},"Sleutel",[164,168,169],{},[24,170,171],{},"h(k)",[173,174,175,182,190,197,203,210],"tbody",{},[161,176,177,180],{},[178,179,70],"td",{},[178,181,130],{},[161,183,184,187],{},[178,185,186],{},"11",[178,188,189],{},"4",[161,191,192,194],{},[178,193,78],{},[178,195,196],{},"6",[161,198,199,201],{},[178,200,123],{},[178,202,130],{},[161,204,205,208],{},[178,206,207],{},"20",[178,209,196],{},[161,211,212,215],{},[178,213,214],{},"34",[178,216,196],{},[10,218,219],{},"Eindresultaat:",[155,221,222,232],{},[158,223,224],{},[161,225,226,229],{},[164,227,228],{},"Vakje",[164,230,231],{},"Inhoud",[173,233,234,241,248,255,262,268,275],{},[161,235,236,238],{},[178,237,85],{},[178,239,240],{},"-",[161,242,243,245],{},[178,244,130],{},[178,246,247],{},"15 → 8",[161,249,250,253],{},[178,251,252],{},"2",[178,254,240],{},[161,256,257,260],{},[178,258,259],{},"3",[178,261,240],{},[161,263,264,266],{},[178,265,189],{},[178,267,186],{},[161,269,270,273],{},[178,271,272],{},"5",[178,274,240],{},[161,276,277,279],{},[178,278,196],{},[178,280,281],{},"27 → 20 → 34",[10,283,284,285,287],{},"Zoeken naar ",[24,286,214],{}," betekent: naar vakje 6 gaan en die lijst doorlopen. Hoe korter de lijsten, hoe sneller.",[133,289,291],{"id":290},"linear-probing","Linear probing",[10,293,294,295,298,299,302,303,306,307,302,309,312],{},"Bij open adressering (",[14,296,297],{},"open addressing",") staat elke sleutel direct in de tabel, zonder lijsten. De\neenvoudigste variant is linear probing: is het vakje bezet, probeer dan het ",[19,300,301],{},"volgende"," (",[24,304,305],{},"+1","). Ben je\nbij het laatste vakje, dan ga je verder bij ",[24,308,85],{},[14,310,311],{},"wrap-around",").",[10,314,315,316,318,319,90],{},"Dezelfde sleutels, dezelfde volgorde, ",[24,317,66],{},". Een leeg vakje noteren we als ",[24,320,240],{},[155,322,323,351],{},[158,324,325],{},[161,326,327,330,334,337,339,341,343,345,347,349],{},[164,328,329],{},"Invoeging",[164,331,332],{},[24,333,171],{},[164,335,336],{},"Geprobeerde vakjes",[164,338,85],{},[164,340,130],{},[164,342,252],{},[164,344,259],{},[164,346,189],{},[164,348,272],{},[164,350,196],{},[173,352,353,375,397,419,442,465],{},[161,354,355,357,359,361,363,365,367,369,371,373],{},[178,356,70],{},[178,358,130],{},[178,360,130],{},[178,362,240],{},[178,364,70],{},[178,366,240],{},[178,368,240],{},[178,370,240],{},[178,372,240],{},[178,374,240],{},[161,376,377,379,381,383,385,387,389,391,393,395],{},[178,378,186],{},[178,380,189],{},[178,382,189],{},[178,384,240],{},[178,386,70],{},[178,388,240],{},[178,390,240],{},[178,392,186],{},[178,394,240],{},[178,396,240],{},[161,398,399,401,403,405,407,409,411,413,415,417],{},[178,400,78],{},[178,402,196],{},[178,404,196],{},[178,406,240],{},[178,408,70],{},[178,410,240],{},[178,412,240],{},[178,414,186],{},[178,416,240],{},[178,418,78],{},[161,420,421,423,425,428,430,432,434,436,438,440],{},[178,422,123],{},[178,424,130],{},[178,426,427],{},"1, 2",[178,429,240],{},[178,431,70],{},[178,433,123],{},[178,435,240],{},[178,437,186],{},[178,439,240],{},[178,441,78],{},[161,443,444,446,448,451,453,455,457,459,461,463],{},[178,445,207],{},[178,447,196],{},[178,449,450],{},"6, 0",[178,452,207],{},[178,454,70],{},[178,456,123],{},[178,458,240],{},[178,460,186],{},[178,462,240],{},[178,464,78],{},[161,466,467,469,471,474,476,478,480,482,484,486],{},[178,468,214],{},[178,470,196],{},[178,472,473],{},"6, 0, 1, 2, 3",[178,475,207],{},[178,477,70],{},[178,479,123],{},[178,481,214],{},[178,483,186],{},[178,485,240],{},[178,487,78],{},[10,489,490],{},"Let op drie dingen:",[492,493,494,503,508],"ul",{},[495,496,497,499,500,502],"li",{},[24,498,123],{}," botst met ",[24,501,70],{}," in vakje 1 en schuift één plek op naar vakje 2.",[495,504,505,507],{},[24,506,207],{}," hoort in vakje 6, dat is bezet, dus via wrap-around naar vakje 0.",[495,509,510,512,513,516,517,520],{},[24,511,214],{}," hoort ook in vakje 6 en moet vijf vakjes proberen. Bezette vakjes vormen een aaneengesloten\nblok (",[14,514,515],{},"cluster","), en elke nieuwe sleutel die in dat blok valt, maakt het blok nog langer. Dat\nverschijnsel heet ",[14,518,519],{},"primary clustering"," en is het grote nadeel van linear probing.",[36,522,524],{"id":523},"zoeken-en-verwijderen","Zoeken en verwijderen",[10,526,527,530,531,533,534,537],{},[19,528,529],{},"Zoeken"," volgt exact dezelfde route als invoegen. Begin bij ",[24,532,171],{}," en schuif op tot je de sleutel\nvindt of een ",[19,535,536],{},"leeg"," vakje tegenkomt. Een leeg vakje betekent: hier zou de sleutel gestaan hebben, dus\nhij zit niet in de tabel.",[155,539,540,552],{},[158,541,542],{},[161,543,544,547,549],{},[164,545,546],{},"Zoek",[164,548,336],{},[164,550,551],{},"Resultaat",[173,553,554,563,574],{},[161,555,556,558,560],{},[178,557,214],{},[178,559,473],{},[178,561,562],{},"gevonden in vakje 3",[161,564,565,568,571],{},[178,566,567],{},"22",[178,569,570],{},"1, 2, 3, 4, 5",[178,572,573],{},"vakje 5 is leeg, dus niet gevonden",[161,575,576,579,582],{},[178,577,578],{},"13",[178,580,581],{},"6, 0, 1, 2, 3, 4, 5",[178,583,573],{},[10,585,586,589,590,592,593,595,596,598],{},[19,587,588],{},"Verwijderen"," is lastiger. Stel dat je ",[24,591,123],{}," uit vakje 2 haalt en het vakje gewoon leeg maakt. Zoek je\ndaarna naar ",[24,594,214],{},", dan probeer je 6, 0, 1, 2 en stopt bij het lege vakje 2: \"niet gevonden\", terwijl\n",[24,597,214],{}," gewoon in vakje 3 staat. Je hebt de keten doorgeknipt.",[10,600,601,602,605,606,90],{},"De oplossing is een grafsteen (",[14,603,604],{},"tombstone","): een markering \"hier stond iets\". Hieronder genoteerd als ",[24,607,608],{},"×",[155,610,611,629],{},[158,612,613],{},[161,614,615,617,619,621,623,625,627],{},[164,616,85],{},[164,618,130],{},[164,620,252],{},[164,622,259],{},[164,624,189],{},[164,626,272],{},[164,628,196],{},[173,630,631],{},[161,632,633,635,637,639,641,643,645],{},[178,634,207],{},[178,636,70],{},[178,638,608],{},[178,640,214],{},[178,642,186],{},[178,644,240],{},[178,646,78],{},[10,648,649,650,652,653,655],{},"Bij zoeken loop je door een ",[24,651,608],{}," heen; bij invoegen mag je een ",[24,654,608],{}," hergebruiken. Bij chaining speelt\ndit probleem niet: daar haal je de sleutel gewoon uit de lijst.",[36,657,659],{"id":658},"load-factor-en-rehashen","Load factor en rehashen",[10,661,662,663,666],{},"De load factor (",[14,664,665],{},"bezettingsgraad",") is",[48,668,671],{"className":669,"code":670,"language":53},[51],"α = n \u002F m\n",[24,672,670],{"__ignoreMap":56},[10,674,675,676,679,680,683,684,686],{},"met ",[24,677,678],{},"n"," het aantal opgeslagen sleutels. In het voorbeeld hierboven is ",[24,681,682],{},"α = 6\u002F7 ≈ 0,86",". Dat is hoog,\nen je ziet het effect: zoeken naar ",[24,685,578],{}," kost zeven stappen.",[10,688,689,690,693,694,696],{},"Bij linear probing moet ",[24,691,692],{},"α"," altijd kleiner dan 1 blijven (anders is de tabel vol) en in de praktijk\nruim onder 0,7. Bij chaining kan ",[24,695,692],{}," boven 1 komen, maar dan worden de lijsten lang.",[10,698,699,700,702,703,706,707,710,711,713,714,717],{},"Daarom groeit een hashtabel automatisch. Wordt ",[24,701,692],{}," te groot, dan maak je een nieuwe, grotere tabel\n(vaak ongeveer twee keer zo groot) en voeg je ",[19,704,705],{},"alle"," sleutels opnieuw in. Dat heet rehashen\n(",[14,708,709],{},"rehashing","). Je kunt de oude array niet zomaar kopiëren: met een nieuwe ",[24,712,62],{}," verandert ",[24,715,716],{},"k mod m","\nvoor bijna elke sleutel.",[10,719,720,721,724,725,728],{},"Rehashen we onze zes sleutels naar ",[24,722,723],{},"m = 13"," (in de volgorde waarin ze in de oude tabel staan:\n",[24,726,727],{},"20, 15, 8, 34, 11, 27","), dan krijg je:",[155,730,731,765],{},[158,732,733],{},[161,734,735,737,739,741,743,745,747,749,752,754,757,760,762],{},[164,736,85],{},[164,738,130],{},[164,740,252],{},[164,742,259],{},[164,744,189],{},[164,746,272],{},[164,748,196],{},[164,750,751],{},"7",[164,753,123],{},[164,755,756],{},"9",[164,758,759],{},"10",[164,761,186],{},[164,763,764],{},"12",[173,766,767],{},[161,768,769,771,773,775,777,779,781,783,785,787,789,791,793],{},[178,770,240],{},[178,772,78],{},[178,774,70],{},[178,776,240],{},[178,778,240],{},[178,780,240],{},[178,782,240],{},[178,784,207],{},[178,786,123],{},[178,788,214],{},[178,790,240],{},[178,792,186],{},[178,794,240],{},[10,796,797,798,120,800,802,803,806,807,810,811,302,814,817,818,90],{},"Nog maar één botsing (",[24,799,214],{},[24,801,123],{},", allebei vakje 8) en ",[24,804,805],{},"α = 6\u002F13 ≈ 0,46",". Rehashen kost ",[24,808,809],{},"O(n)",", maar\nomdat het steeds zeldzamer gebeurt naarmate de tabel groeit, is invoegen ",[14,812,813],{},"gemiddeld over alle\noperaties",[14,815,816],{},"amortized",") nog steeds ",[24,819,820],{},"O(1)",[36,822,824],{"id":823},"code-hashtabel-met-linear-probing","Code: hashtabel met linear probing",[10,826,827],{},"Een minimale hashtabel voor gehele getallen, met tombstones. Hij rehasht niet automatisch, zodat hij\nprecies dezelfde tabellen oplevert als de voorbeelden hierboven.",[829,830,831,1608],"code-tabs",{},[832,833,834],"template",{"v-slot:python":56},[48,835,839],{"className":836,"code":837,"language":838,"meta":56,"style":56},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","python",[24,840,841,857,878,885,890,904,931,948,974,979,998,1004,1026,1052,1081,1086,1104,1128,1156,1171,1195,1203,1214,1219,1237,1265,1274,1295,1339,1360,1366,1387,1392,1410,1430,1446,1470,1475,1480,1496,1538,1555,1602],{"__ignoreMap":56},[842,843,846,850,854],"span",{"class":844,"line":845},"line",1,[842,847,849],{"class":848},"sTEyZ","LEEG ",[842,851,853],{"class":852},"sMK4o","=",[842,855,856],{"class":852}," None\n",[842,858,860,863,865,868,871,874],{"class":844,"line":859},2,[842,861,862],{"class":848},"WEG ",[842,864,853],{"class":852},[842,866,867],{"class":852}," \"",[842,869,608],{"class":870},"sfazB",[842,872,873],{"class":852},"\"",[842,875,877],{"class":876},"sHwdD","  # tombstone\n",[842,879,881],{"class":844,"line":880},3,[842,882,884],{"emptyLinePlaceholder":883},true,"\n",[842,886,888],{"class":844,"line":887},4,[842,889,884],{"emptyLinePlaceholder":883},[842,891,893,897,901],{"class":844,"line":892},5,[842,894,896],{"class":895},"spNyl","class",[842,898,900],{"class":899},"sBMFI"," HashTabel",[842,902,903],{"class":852},":\n",[842,905,907,910,914,917,921,924,928],{"class":844,"line":906},6,[842,908,909],{"class":895},"    def",[842,911,913],{"class":912},"s2Zo4"," __init__",[842,915,916],{"class":852},"(",[842,918,920],{"class":919},"s5tWE","self",[842,922,923],{"class":852},",",[842,925,927],{"class":926},"sHdIc"," m",[842,929,930],{"class":852},"):\n",[842,932,934,937,939,942,945],{"class":844,"line":933},7,[842,935,936],{"class":848},"        self",[842,938,90],{"class":852},[842,940,62],{"class":941},"swJcz",[842,943,944],{"class":852}," =",[842,946,947],{"class":848}," m\n",[842,949,951,953,955,958,960,963,966,969,972],{"class":844,"line":950},8,[842,952,936],{"class":848},[842,954,90],{"class":852},[842,956,957],{"class":941},"vakjes",[842,959,944],{"class":852},[842,961,962],{"class":852}," [",[842,964,965],{"class":848},"LEEG",[842,967,968],{"class":852},"]",[842,970,971],{"class":852}," *",[842,973,947],{"class":848},[842,975,977],{"class":844,"line":976},9,[842,978,884],{"emptyLinePlaceholder":883},[842,980,982,984,987,989,991,993,996],{"class":844,"line":981},10,[842,983,909],{"class":895},[842,985,986],{"class":912}," _route",[842,988,916],{"class":852},[842,990,920],{"class":919},[842,992,923],{"class":852},[842,994,995],{"class":926}," k",[842,997,930],{"class":852},[842,999,1001],{"class":844,"line":1000},11,[842,1002,1003],{"class":876},"        # alle vakjes in probeervolgorde: h(k), h(k)+1, ... met wrap-around\n",[842,1005,1007,1010,1012,1015,1018,1021,1023],{"class":844,"line":1006},12,[842,1008,1009],{"class":848},"        start ",[842,1011,853],{"class":852},[842,1013,1014],{"class":848}," k ",[842,1016,1017],{"class":852},"%",[842,1019,1020],{"class":848}," self",[842,1022,90],{"class":852},[842,1024,1025],{"class":941},"m\n",[842,1027,1029,1033,1036,1039,1042,1044,1046,1048,1050],{"class":844,"line":1028},13,[842,1030,1032],{"class":1031},"s7zQu","        for",[842,1034,1035],{"class":848}," stap ",[842,1037,1038],{"class":1031},"in",[842,1040,1041],{"class":912}," range",[842,1043,916],{"class":852},[842,1045,920],{"class":848},[842,1047,90],{"class":852},[842,1049,62],{"class":941},[842,1051,930],{"class":852},[842,1053,1055,1058,1060,1063,1066,1069,1072,1075,1077,1079],{"class":844,"line":1054},14,[842,1056,1057],{"class":1031},"            yield",[842,1059,302],{"class":852},[842,1061,1062],{"class":848},"start ",[842,1064,1065],{"class":852},"+",[842,1067,1068],{"class":848}," stap",[842,1070,1071],{"class":852},")",[842,1073,1074],{"class":852}," %",[842,1076,1020],{"class":848},[842,1078,90],{"class":852},[842,1080,1025],{"class":941},[842,1082,1084],{"class":844,"line":1083},15,[842,1085,884],{"emptyLinePlaceholder":883},[842,1087,1089,1091,1094,1096,1098,1100,1102],{"class":844,"line":1088},16,[842,1090,909],{"class":895},[842,1092,1093],{"class":912}," zoek",[842,1095,916],{"class":852},[842,1097,920],{"class":919},[842,1099,923],{"class":852},[842,1101,995],{"class":926},[842,1103,930],{"class":852},[842,1105,1107,1109,1112,1114,1116,1118,1121,1123,1126],{"class":844,"line":1106},17,[842,1108,1032],{"class":1031},[842,1110,1111],{"class":848}," i ",[842,1113,1038],{"class":1031},[842,1115,1020],{"class":848},[842,1117,90],{"class":852},[842,1119,1120],{"class":912},"_route",[842,1122,916],{"class":852},[842,1124,1125],{"class":912},"k",[842,1127,930],{"class":852},[842,1129,1131,1134,1136,1138,1140,1143,1146,1148,1151,1154],{"class":844,"line":1130},18,[842,1132,1133],{"class":1031},"            if",[842,1135,1020],{"class":848},[842,1137,90],{"class":852},[842,1139,957],{"class":941},[842,1141,1142],{"class":852},"[",[842,1144,1145],{"class":941},"i",[842,1147,968],{"class":852},[842,1149,1150],{"class":852}," is",[842,1152,1153],{"class":848}," LEEG",[842,1155,903],{"class":852},[842,1157,1159,1162,1165,1168],{"class":844,"line":1158},19,[842,1160,1161],{"class":1031},"                return",[842,1163,1164],{"class":852}," -",[842,1166,130],{"class":1167},"sbssI",[842,1169,1170],{"class":876},"  # leeg vakje: sleutel bestaat niet\n",[842,1172,1174,1176,1178,1180,1182,1184,1186,1188,1191,1193],{"class":844,"line":1173},20,[842,1175,1133],{"class":1031},[842,1177,1020],{"class":848},[842,1179,90],{"class":852},[842,1181,957],{"class":941},[842,1183,1142],{"class":852},[842,1185,1145],{"class":941},[842,1187,968],{"class":852},[842,1189,1190],{"class":852}," ==",[842,1192,995],{"class":848},[842,1194,903],{"class":852},[842,1196,1198,1200],{"class":844,"line":1197},21,[842,1199,1161],{"class":1031},[842,1201,1202],{"class":848}," i\n",[842,1204,1206,1209,1211],{"class":844,"line":1205},22,[842,1207,1208],{"class":1031},"        return",[842,1210,1164],{"class":852},[842,1212,1213],{"class":1167},"1\n",[842,1215,1217],{"class":844,"line":1216},23,[842,1218,884],{"emptyLinePlaceholder":883},[842,1220,1222,1224,1227,1229,1231,1233,1235],{"class":844,"line":1221},24,[842,1223,909],{"class":895},[842,1225,1226],{"class":912}," voeg_toe",[842,1228,916],{"class":852},[842,1230,920],{"class":919},[842,1232,923],{"class":852},[842,1234,995],{"class":926},[842,1236,930],{"class":852},[842,1238,1240,1243,1245,1247,1250,1252,1254,1256,1259,1261,1263],{"class":844,"line":1239},25,[842,1241,1242],{"class":1031},"        if",[842,1244,1020],{"class":848},[842,1246,90],{"class":852},[842,1248,1249],{"class":912},"zoek",[842,1251,916],{"class":852},[842,1253,1125],{"class":912},[842,1255,1071],{"class":852},[842,1257,1258],{"class":852}," !=",[842,1260,1164],{"class":852},[842,1262,130],{"class":1167},[842,1264,903],{"class":852},[842,1266,1268,1271],{"class":844,"line":1267},26,[842,1269,1270],{"class":1031},"            return",[842,1272,1273],{"class":876},"  # al aanwezig\n",[842,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293],{"class":844,"line":1276},27,[842,1278,1032],{"class":1031},[842,1280,1111],{"class":848},[842,1282,1038],{"class":1031},[842,1284,1020],{"class":848},[842,1286,90],{"class":852},[842,1288,1120],{"class":912},[842,1290,916],{"class":852},[842,1292,1125],{"class":912},[842,1294,930],{"class":852},[842,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1317,1320,1322,1324,1326,1328,1330,1332,1334,1337],{"class":844,"line":1297},28,[842,1299,1133],{"class":1031},[842,1301,1020],{"class":848},[842,1303,90],{"class":852},[842,1305,957],{"class":941},[842,1307,1142],{"class":852},[842,1309,1145],{"class":941},[842,1311,968],{"class":852},[842,1313,1150],{"class":852},[842,1315,1316],{"class":848}," LEEG ",[842,1318,1319],{"class":852},"or",[842,1321,1020],{"class":848},[842,1323,90],{"class":852},[842,1325,957],{"class":941},[842,1327,1142],{"class":852},[842,1329,1145],{"class":941},[842,1331,968],{"class":852},[842,1333,1190],{"class":852},[842,1335,1336],{"class":848}," WEG",[842,1338,903],{"class":852},[842,1340,1342,1345,1347,1349,1351,1353,1355,1357],{"class":844,"line":1341},29,[842,1343,1344],{"class":848},"                self",[842,1346,90],{"class":852},[842,1348,957],{"class":941},[842,1350,1142],{"class":852},[842,1352,1145],{"class":941},[842,1354,968],{"class":852},[842,1356,944],{"class":852},[842,1358,1359],{"class":848}," k\n",[842,1361,1363],{"class":844,"line":1362},30,[842,1364,1365],{"class":1031},"                return\n",[842,1367,1369,1372,1375,1377,1379,1382,1384],{"class":844,"line":1368},31,[842,1370,1371],{"class":1031},"        raise",[842,1373,1374],{"class":899}," OverflowError",[842,1376,916],{"class":852},[842,1378,873],{"class":852},[842,1380,1381],{"class":870},"tabel is vol",[842,1383,873],{"class":852},[842,1385,1386],{"class":852},")\n",[842,1388,1390],{"class":844,"line":1389},32,[842,1391,884],{"emptyLinePlaceholder":883},[842,1393,1395,1397,1400,1402,1404,1406,1408],{"class":844,"line":1394},33,[842,1396,909],{"class":895},[842,1398,1399],{"class":912}," verwijder",[842,1401,916],{"class":852},[842,1403,920],{"class":919},[842,1405,923],{"class":852},[842,1407,995],{"class":926},[842,1409,930],{"class":852},[842,1411,1413,1416,1418,1420,1422,1424,1426,1428],{"class":844,"line":1412},34,[842,1414,1415],{"class":848},"        i ",[842,1417,853],{"class":852},[842,1419,1020],{"class":848},[842,1421,90],{"class":852},[842,1423,1249],{"class":912},[842,1425,916],{"class":852},[842,1427,1125],{"class":912},[842,1429,1386],{"class":852},[842,1431,1433,1435,1437,1440,1442,1444],{"class":844,"line":1432},35,[842,1434,1242],{"class":1031},[842,1436,1111],{"class":848},[842,1438,1439],{"class":852},"!=",[842,1441,1164],{"class":852},[842,1443,130],{"class":1167},[842,1445,903],{"class":852},[842,1447,1449,1452,1454,1456,1458,1460,1462,1464,1467],{"class":844,"line":1448},36,[842,1450,1451],{"class":848},"            self",[842,1453,90],{"class":852},[842,1455,957],{"class":941},[842,1457,1142],{"class":852},[842,1459,1145],{"class":941},[842,1461,968],{"class":852},[842,1463,944],{"class":852},[842,1465,1466],{"class":848}," WEG  ",[842,1468,1469],{"class":876},"# niet LEEG, anders breekt de zoekketen\n",[842,1471,1473],{"class":844,"line":1472},37,[842,1474,884],{"emptyLinePlaceholder":883},[842,1476,1478],{"class":844,"line":1477},38,[842,1479,884],{"emptyLinePlaceholder":883},[842,1481,1483,1486,1488,1490,1492,1494],{"class":844,"line":1482},39,[842,1484,1485],{"class":848},"t ",[842,1487,853],{"class":852},[842,1489,900],{"class":912},[842,1491,916],{"class":852},[842,1493,751],{"class":1167},[842,1495,1386],{"class":852},[842,1497,1499,1502,1504,1506,1508,1510,1512,1515,1517,1520,1522,1525,1527,1530,1532,1535],{"class":844,"line":1498},40,[842,1500,1501],{"class":1031},"for",[842,1503,1014],{"class":848},[842,1505,1038],{"class":1031},[842,1507,962],{"class":852},[842,1509,70],{"class":1167},[842,1511,923],{"class":852},[842,1513,1514],{"class":1167}," 11",[842,1516,923],{"class":852},[842,1518,1519],{"class":1167}," 27",[842,1521,923],{"class":852},[842,1523,1524],{"class":1167}," 8",[842,1526,923],{"class":852},[842,1528,1529],{"class":1167}," 20",[842,1531,923],{"class":852},[842,1533,1534],{"class":1167}," 34",[842,1536,1537],{"class":852},"]:\n",[842,1539,1541,1544,1546,1549,1551,1553],{"class":844,"line":1540},41,[842,1542,1543],{"class":848},"    t",[842,1545,90],{"class":852},[842,1547,1548],{"class":912},"voeg_toe",[842,1550,916],{"class":852},[842,1552,1125],{"class":912},[842,1554,1386],{"class":852},[842,1556,1558,1561,1564,1566,1568,1570,1573,1576,1579,1581,1584,1586,1588,1590,1592,1595,1597,1599],{"class":844,"line":1557},42,[842,1559,1560],{"class":912},"print",[842,1562,1563],{"class":852},"([",[842,1565,873],{"class":852},[842,1567,240],{"class":870},[842,1569,873],{"class":852},[842,1571,1572],{"class":1031}," if",[842,1574,1575],{"class":912}," v ",[842,1577,1578],{"class":852},"is",[842,1580,1316],{"class":912},[842,1582,1583],{"class":1031},"else",[842,1585,1575],{"class":912},[842,1587,1501],{"class":1031},[842,1589,1575],{"class":912},[842,1591,1038],{"class":1031},[842,1593,1594],{"class":912}," t",[842,1596,90],{"class":852},[842,1598,957],{"class":941},[842,1600,1601],{"class":852},"])\n",[842,1603,1605],{"class":844,"line":1604},43,[842,1606,1607],{"class":876},"# [20, 15, 8, 34, 11, '-', 27]\n",[832,1609,1610],{"v-slot:java":56},[48,1611,1615],{"className":1612,"code":1613,"language":1614,"meta":56,"style":56},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","java",[24,1616,1617,1638,1642,1655,1683,1716,1728,1744,1748,1764,1778,1799,1820,1825,1829,1848,1874,1878,1882,1899,1932,1965,1997,2024,2029,2039,2043,2047,2065,2094,2124,2154,2191,2208,2214,2219,2223,2243,2247,2251,2267,2284,2318,2322],{"__ignoreMap":56},[842,1618,1619,1622,1625,1627,1630,1632,1635],{"class":844,"line":845},[842,1620,1621],{"class":1167},"import",[842,1623,1624],{"class":895}," java",[842,1626,90],{"class":852},[842,1628,1629],{"class":895},"util",[842,1631,90],{"class":852},[842,1633,1634],{"class":895},"Arrays",[842,1636,1637],{"class":852},";\n",[842,1639,1640],{"class":844,"line":859},[842,1641,884],{"emptyLinePlaceholder":883},[842,1643,1644,1647,1650,1652],{"class":844,"line":880},[842,1645,1646],{"class":895},"static",[842,1648,1649],{"class":895}," class",[842,1651,900],{"class":899},[842,1653,1654],{"class":852}," {\n",[842,1656,1657,1660,1663,1666,1669,1671,1673,1676,1678,1681],{"class":844,"line":887},[842,1658,1659],{"class":895},"    private",[842,1661,1662],{"class":895}," static",[842,1664,1665],{"class":895}," final",[842,1667,1668],{"class":895}," int",[842,1670,1316],{"class":848},[842,1672,853],{"class":852},[842,1674,1675],{"class":848}," Integer",[842,1677,90],{"class":852},[842,1679,1680],{"class":848},"MIN_VALUE",[842,1682,1637],{"class":852},[842,1684,1685,1687,1689,1691,1693,1696,1698,1700,1702,1705,1707,1710,1713],{"class":844,"line":892},[842,1686,1659],{"class":895},[842,1688,1662],{"class":895},[842,1690,1665],{"class":895},[842,1692,1668],{"class":895},[842,1694,1695],{"class":848}," WEG ",[842,1697,853],{"class":852},[842,1699,1675],{"class":848},[842,1701,90],{"class":852},[842,1703,1704],{"class":848},"MIN_VALUE ",[842,1706,1065],{"class":852},[842,1708,1709],{"class":1167}," 1",[842,1711,1712],{"class":852},";",[842,1714,1715],{"class":876}," \u002F\u002F tombstone\n",[842,1717,1718,1720,1722,1724,1726],{"class":844,"line":906},[842,1719,1659],{"class":895},[842,1721,1665],{"class":895},[842,1723,1668],{"class":895},[842,1725,927],{"class":848},[842,1727,1637],{"class":852},[842,1729,1730,1732,1734,1736,1739,1742],{"class":844,"line":933},[842,1731,1659],{"class":895},[842,1733,1665],{"class":895},[842,1735,1668],{"class":895},[842,1737,1738],{"class":852},"[]",[842,1740,1741],{"class":848}," vakjes",[842,1743,1637],{"class":852},[842,1745,1746],{"class":844,"line":950},[842,1747,884],{"emptyLinePlaceholder":883},[842,1749,1750,1753,1755,1758,1760,1762],{"class":844,"line":976},[842,1751,1752],{"class":912},"    HashTabel",[842,1754,916],{"class":852},[842,1756,1757],{"class":895},"int",[842,1759,927],{"class":926},[842,1761,1071],{"class":852},[842,1763,1654],{"class":852},[842,1765,1766,1769,1772,1774,1776],{"class":844,"line":981},[842,1767,1768],{"class":852},"        this.",[842,1770,1771],{"class":848},"m ",[842,1773,853],{"class":852},[842,1775,927],{"class":848},[842,1777,1637],{"class":852},[842,1779,1780,1782,1785,1787,1790,1792,1794,1796],{"class":844,"line":1000},[842,1781,1768],{"class":852},[842,1783,1784],{"class":848},"vakjes ",[842,1786,853],{"class":852},[842,1788,1789],{"class":1031}," new",[842,1791,1668],{"class":895},[842,1793,1142],{"class":852},[842,1795,62],{"class":848},[842,1797,1798],{"class":852},"];\n",[842,1800,1801,1804,1806,1809,1811,1813,1815,1817],{"class":844,"line":1006},[842,1802,1803],{"class":848},"        Arrays",[842,1805,90],{"class":852},[842,1807,1808],{"class":912},"fill",[842,1810,916],{"class":852},[842,1812,957],{"class":848},[842,1814,923],{"class":852},[842,1816,1153],{"class":848},[842,1818,1819],{"class":852},");\n",[842,1821,1822],{"class":844,"line":1028},[842,1823,1824],{"class":852},"    }\n",[842,1826,1827],{"class":844,"line":1054},[842,1828,884],{"emptyLinePlaceholder":883},[842,1830,1831,1833,1835,1838,1840,1842,1844,1846],{"class":844,"line":1083},[842,1832,1659],{"class":895},[842,1834,1668],{"class":895},[842,1836,1837],{"class":912}," h",[842,1839,916],{"class":852},[842,1841,1757],{"class":895},[842,1843,995],{"class":926},[842,1845,1071],{"class":852},[842,1847,1654],{"class":852},[842,1849,1850,1852,1855,1857,1860,1862,1864,1866,1868,1871],{"class":844,"line":1088},[842,1851,1208],{"class":1031},[842,1853,1854],{"class":848}," Math",[842,1856,90],{"class":852},[842,1858,1859],{"class":912},"floorMod",[842,1861,916],{"class":852},[842,1863,1125],{"class":848},[842,1865,923],{"class":852},[842,1867,927],{"class":848},[842,1869,1870],{"class":852},");",[842,1872,1873],{"class":876}," \u002F\u002F ook correct voor negatieve sleutels\n",[842,1875,1876],{"class":844,"line":1106},[842,1877,1824],{"class":852},[842,1879,1880],{"class":844,"line":1130},[842,1881,884],{"emptyLinePlaceholder":883},[842,1883,1884,1887,1889,1891,1893,1895,1897],{"class":844,"line":1158},[842,1885,1886],{"class":895},"    int",[842,1888,1093],{"class":912},[842,1890,916],{"class":852},[842,1892,1757],{"class":895},[842,1894,995],{"class":926},[842,1896,1071],{"class":852},[842,1898,1654],{"class":852},[842,1900,1901,1903,1905,1907,1909,1911,1914,1916,1918,1921,1923,1925,1927,1930],{"class":844,"line":1173},[842,1902,1032],{"class":1031},[842,1904,302],{"class":852},[842,1906,1757],{"class":895},[842,1908,1035],{"class":848},[842,1910,853],{"class":852},[842,1912,1913],{"class":1167}," 0",[842,1915,1712],{"class":852},[842,1917,1035],{"class":848},[842,1919,1920],{"class":852},"\u003C",[842,1922,927],{"class":848},[842,1924,1712],{"class":852},[842,1926,1068],{"class":848},[842,1928,1929],{"class":852},"++)",[842,1931,1654],{"class":852},[842,1933,1934,1937,1939,1941,1943,1946,1948,1950,1952,1955,1957,1959,1961,1963],{"class":844,"line":1197},[842,1935,1936],{"class":895},"            int",[842,1938,1111],{"class":848},[842,1940,853],{"class":852},[842,1942,302],{"class":852},[842,1944,1945],{"class":912},"h",[842,1947,916],{"class":852},[842,1949,1125],{"class":848},[842,1951,1071],{"class":852},[842,1953,1954],{"class":852}," +",[842,1956,1068],{"class":848},[842,1958,1071],{"class":852},[842,1960,1074],{"class":852},[842,1962,927],{"class":848},[842,1964,1637],{"class":852},[842,1966,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1988,1990,1992,1994],{"class":844,"line":1205},[842,1968,1133],{"class":1031},[842,1970,302],{"class":852},[842,1972,957],{"class":848},[842,1974,1142],{"class":852},[842,1976,1145],{"class":848},[842,1978,968],{"class":852},[842,1980,1190],{"class":852},[842,1982,1153],{"class":848},[842,1984,1071],{"class":852},[842,1986,1987],{"class":1031}," return",[842,1989,1164],{"class":852},[842,1991,130],{"class":1167},[842,1993,1712],{"class":852},[842,1995,1996],{"class":876}," \u002F\u002F leeg vakje: sleutel bestaat niet\n",[842,1998,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2022],{"class":844,"line":1216},[842,2000,1133],{"class":1031},[842,2002,302],{"class":852},[842,2004,957],{"class":848},[842,2006,1142],{"class":852},[842,2008,1145],{"class":848},[842,2010,968],{"class":852},[842,2012,1190],{"class":852},[842,2014,995],{"class":848},[842,2016,1071],{"class":852},[842,2018,1987],{"class":1031},[842,2020,2021],{"class":848}," i",[842,2023,1637],{"class":852},[842,2025,2026],{"class":844,"line":1221},[842,2027,2028],{"class":852},"        }\n",[842,2030,2031,2033,2035,2037],{"class":844,"line":1239},[842,2032,1208],{"class":1031},[842,2034,1164],{"class":852},[842,2036,130],{"class":1167},[842,2038,1637],{"class":852},[842,2040,2041],{"class":844,"line":1267},[842,2042,1824],{"class":852},[842,2044,2045],{"class":844,"line":1276},[842,2046,884],{"emptyLinePlaceholder":883},[842,2048,2049,2052,2055,2057,2059,2061,2063],{"class":844,"line":1297},[842,2050,2051],{"class":895},"    void",[842,2053,2054],{"class":912}," voegToe",[842,2056,916],{"class":852},[842,2058,1757],{"class":895},[842,2060,995],{"class":926},[842,2062,1071],{"class":852},[842,2064,1654],{"class":852},[842,2066,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091],{"class":844,"line":1341},[842,2068,1242],{"class":1031},[842,2070,302],{"class":852},[842,2072,1249],{"class":912},[842,2074,916],{"class":852},[842,2076,1125],{"class":848},[842,2078,1071],{"class":852},[842,2080,1258],{"class":852},[842,2082,1164],{"class":852},[842,2084,130],{"class":1167},[842,2086,1071],{"class":852},[842,2088,1987],{"class":1031},[842,2090,1712],{"class":852},[842,2092,2093],{"class":876}," \u002F\u002F al aanwezig\n",[842,2095,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2122],{"class":844,"line":1362},[842,2097,1032],{"class":1031},[842,2099,302],{"class":852},[842,2101,1757],{"class":895},[842,2103,1035],{"class":848},[842,2105,853],{"class":852},[842,2107,1913],{"class":1167},[842,2109,1712],{"class":852},[842,2111,1035],{"class":848},[842,2113,1920],{"class":852},[842,2115,927],{"class":848},[842,2117,1712],{"class":852},[842,2119,1068],{"class":848},[842,2121,1929],{"class":852},[842,2123,1654],{"class":852},[842,2125,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152],{"class":844,"line":1368},[842,2127,1936],{"class":895},[842,2129,1111],{"class":848},[842,2131,853],{"class":852},[842,2133,302],{"class":852},[842,2135,1945],{"class":912},[842,2137,916],{"class":852},[842,2139,1125],{"class":848},[842,2141,1071],{"class":852},[842,2143,1954],{"class":852},[842,2145,1068],{"class":848},[842,2147,1071],{"class":852},[842,2149,1074],{"class":852},[842,2151,927],{"class":848},[842,2153,1637],{"class":852},[842,2155,2156,2158,2160,2162,2164,2166,2168,2170,2172,2175,2177,2179,2181,2183,2185,2187,2189],{"class":844,"line":1389},[842,2157,1133],{"class":1031},[842,2159,302],{"class":852},[842,2161,957],{"class":848},[842,2163,1142],{"class":852},[842,2165,1145],{"class":848},[842,2167,968],{"class":852},[842,2169,1190],{"class":852},[842,2171,1316],{"class":848},[842,2173,2174],{"class":852},"||",[842,2176,1741],{"class":848},[842,2178,1142],{"class":852},[842,2180,1145],{"class":848},[842,2182,968],{"class":852},[842,2184,1190],{"class":852},[842,2186,1336],{"class":848},[842,2188,1071],{"class":852},[842,2190,1654],{"class":852},[842,2192,2193,2196,2198,2200,2202,2204,2206],{"class":844,"line":1394},[842,2194,2195],{"class":848},"                vakjes",[842,2197,1142],{"class":852},[842,2199,1145],{"class":848},[842,2201,968],{"class":852},[842,2203,944],{"class":852},[842,2205,995],{"class":848},[842,2207,1637],{"class":852},[842,2209,2210,2212],{"class":844,"line":1412},[842,2211,1161],{"class":1031},[842,2213,1637],{"class":852},[842,2215,2216],{"class":844,"line":1432},[842,2217,2218],{"class":852},"            }\n",[842,2220,2221],{"class":844,"line":1448},[842,2222,2028],{"class":852},[842,2224,2225,2228,2230,2233,2235,2237,2239,2241],{"class":844,"line":1472},[842,2226,2227],{"class":1031},"        throw",[842,2229,1789],{"class":1031},[842,2231,2232],{"class":912}," IllegalStateException",[842,2234,916],{"class":852},[842,2236,873],{"class":852},[842,2238,1381],{"class":870},[842,2240,873],{"class":852},[842,2242,1819],{"class":852},[842,2244,2245],{"class":844,"line":1477},[842,2246,1824],{"class":852},[842,2248,2249],{"class":844,"line":1482},[842,2250,884],{"emptyLinePlaceholder":883},[842,2252,2253,2255,2257,2259,2261,2263,2265],{"class":844,"line":1498},[842,2254,2051],{"class":895},[842,2256,1399],{"class":912},[842,2258,916],{"class":852},[842,2260,1757],{"class":895},[842,2262,995],{"class":926},[842,2264,1071],{"class":852},[842,2266,1654],{"class":852},[842,2268,2269,2272,2274,2276,2278,2280,2282],{"class":844,"line":1540},[842,2270,2271],{"class":895},"        int",[842,2273,1111],{"class":848},[842,2275,853],{"class":852},[842,2277,1093],{"class":912},[842,2279,916],{"class":852},[842,2281,1125],{"class":848},[842,2283,1819],{"class":852},[842,2285,2286,2288,2290,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315],{"class":844,"line":1557},[842,2287,1242],{"class":1031},[842,2289,302],{"class":852},[842,2291,2292],{"class":848},"i ",[842,2294,1439],{"class":852},[842,2296,1164],{"class":852},[842,2298,130],{"class":1167},[842,2300,1071],{"class":852},[842,2302,1741],{"class":848},[842,2304,1142],{"class":852},[842,2306,1145],{"class":848},[842,2308,968],{"class":852},[842,2310,944],{"class":852},[842,2312,1336],{"class":848},[842,2314,1712],{"class":852},[842,2316,2317],{"class":876}," \u002F\u002F niet LEEG, anders breekt de zoekketen\n",[842,2319,2320],{"class":844,"line":1604},[842,2321,1824],{"class":852},[842,2323,2325],{"class":844,"line":2324},44,[842,2326,2327],{"class":852},"}\n",[10,2329,2330,2331,2334,2335,2337,2338,120,2340,2342,2343,2346,2347,2350,2351,90],{},"In Python geeft ",[24,2332,2333],{},"k % m"," voor een negatieve ",[24,2336,1125],{}," altijd een uitkomst tussen ",[24,2339,85],{},[24,2341,89],{},". In Java is\n",[24,2344,2345],{},"-3 % 7"," gelijk aan ",[24,2348,2349],{},"-3","; daarom gebruikt de Java-versie ",[24,2352,2353],{},"Math.floorMod",[36,2355,2357],{"id":2356},"in-de-praktijk-python-dict-en-java-hashmap","In de praktijk: Python dict en Java HashMap",[10,2359,2360],{},"Je schrijft zelden je eigen hashtabel, maar je gebruikt er dagelijks een.",[492,2362,2363,2377],{},[495,2364,2365,2373,2374,2376],{},[19,2366,2367,2368,120,2370],{},"Python ",[24,2369,26],{},[24,2371,2372],{},"set"," gebruiken open adressering, maar niet met ",[24,2375,305],{},": 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.",[495,2378,2379,2384,2385,2388,2389,2392],{},[19,2380,2381,2382],{},"Java ",[24,2383,30],{}," gebruikt chaining. De standaard maximale load factor is ",[24,2386,2387],{},"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 ",[24,2390,2391],{},"O(log n)"," blijft.",[10,2394,2395,2396,2399,2400,2403,2404,2406,2407,2410],{},"Voor objecten als sleutel roepen beide ",[24,2397,2398],{},"hash()"," of ",[24,2401,2402],{},"hashCode()"," aan. Daarom moet je in Java\n",[24,2405,2402],{}," overschrijven als je ",[24,2408,2409],{},"equals()"," overschrijft: twee gelijke objecten moeten in hetzelfde\nvakje uitkomen, anders vindt de map ze niet terug.",[10,2412,2413,2414,2416,2417,2422,2423,2426,2427,2429,2430,312],{},"Het opzoeken van een sleutel in een ",[24,2415,26],{}," is dus geen lineair zoeken zoals in\n",[2418,2419,2421],"a",{"href":2420},"\u002Fpracticely\u002Fdsa\u002Fzoeken","zoeken",", maar een berekening. Dat maakt het verschil tussen een ",[24,2424,2425],{},"O(n²)","- en een\n",[24,2428,809],{},"-oplossing bij veel sollicitatievragen (zie ",[2418,2431,2433],{"href":2432},"\u002Fpracticely\u002Fdsa\u002Fcomplexiteit","complexiteit",[36,2435,2436],{"id":2433},"Complexiteit",[155,2438,2439,2452],{},[158,2440,2441],{},[161,2442,2443,2446,2449],{},[164,2444,2445],{},"Operatie",[164,2447,2448],{},"Gemiddeld",[164,2450,2451],{},"Slechtste geval",[173,2453,2454,2466,2480,2492,2504],{},[161,2455,2456,2458,2462],{},[178,2457,529],{},[178,2459,2460],{},[24,2461,820],{},[178,2463,2464],{},[24,2465,809],{},[161,2467,2468,2471,2476],{},[178,2469,2470],{},"Invoegen",[178,2472,2473,2475],{},[24,2474,820],{}," (amortized)",[178,2477,2478],{},[24,2479,809],{},[161,2481,2482,2484,2488],{},[178,2483,588],{},[178,2485,2486],{},[24,2487,820],{},[178,2489,2490],{},[24,2491,809],{},[161,2493,2494,2497,2500],{},[178,2495,2496],{},"Rehashen",[178,2498,2499],{},"—",[178,2501,2502],{},[24,2503,809],{},[161,2505,2506,2509,2513],{},[178,2507,2508],{},"Geheugen",[178,2510,2511],{},[24,2512,809],{},[178,2514,2515],{},[24,2516,809],{},[10,2518,2519],{},"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.",[36,2521,2523],{"id":2522},"veelgemaakte-fouten-op-het-tentamen","Veelgemaakte fouten op het tentamen",[2525,2526,2527,2541,2550,2565,2571],"ol",{},[495,2528,2529,2532,2533,2535,2536,2538,2539,90],{},[19,2530,2531],{},"Wrap-around vergeten."," Valt een sleutel bij ",[24,2534,66],{}," op vakje 6 en dat is bezet, dan is de\nvolgende poging vakje ",[24,2537,85],{},", niet vakje ",[24,2540,751],{},[495,2542,2543,2546,2547,2549],{},[19,2544,2545],{},"Stoppen bij het eerste bezette vakje tijdens zoeken."," Je stopt pas bij de sleutel zelf of bij\neen ",[19,2548,536],{}," vakje. Een bezet vakje met een andere sleutel betekent: doorzoeken.",[495,2551,2552,2555,2556,2558,2559,2561,2562,90],{},[19,2553,2554],{},"Bij chaining vooraan invoegen."," In onze conventie komt een nieuwe sleutel ",[19,2557,146],{}," de lijst:\n",[24,2560,281],{},", niet ",[24,2563,2564],{},"34 → 20 → 27",[495,2566,2567,2570],{},[19,2568,2569],{},"Een verwijderd vakje leeg maken bij linear probing."," Daarmee knip je zoekketens door. Gebruik\neen tombstone.",[495,2572,2573,2576,2577,90],{},[19,2574,2575],{},"Bij rehashen de oude posities kopiëren."," Na het vergroten moet je elke sleutel opnieuw hashen\nmet de nieuwe ",[24,2578,62],{},[36,2580,2582],{"id":2581},"samenvatting","Samenvatting",[492,2584,2585,2594,2597,2600,2607],{},[495,2586,2587,2588,2591,2592,90],{},"Een hashtabel berekent de plek van een sleutel met ",[24,2589,2590],{},"h(k) = k mod m","; zoeken en invoegen kosten\ngemiddeld ",[24,2593,820],{},[495,2595,2596],{},"Botsingen los je op met chaining (lijst per vakje, achteraan toevoegen) of linear probing\n(volgende vakje, met wrap-around).",[495,2598,2599],{},"Bij linear probing stopt zoeken pas bij de sleutel of een leeg vakje; verwijderen gaat met een\ntombstone.",[495,2601,2602,2603,2606],{},"Houd de load factor ",[24,2604,2605],{},"α = n\u002Fm"," laag; wordt hij te hoog, dan rehash je naar een grotere tabel.",[495,2608,2609,2610,2612],{},"Slechtste geval is ",[24,2611,809],{},", als alle sleutels op dezelfde plek uitkomen.",[2614,2615,2616],"style",{},"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":56,"searchDepth":859,"depth":859,"links":2618},[2619,2620,2624,2625,2626,2627,2628,2629,2630],{"id":38,"depth":859,"text":39},{"id":109,"depth":859,"text":110,"children":2621},[2622,2623],{"id":135,"depth":880,"text":136},{"id":290,"depth":880,"text":291},{"id":523,"depth":859,"text":524},{"id":658,"depth":859,"text":659},{"id":823,"depth":859,"text":824},{"id":2356,"depth":859,"text":2357},{"id":2433,"depth":859,"text":2436},{"id":2522,"depth":859,"text":2523},{"id":2581,"depth":859,"text":2582},"Hoe werkt een hashtabel? Leer hashfuncties, botsingen, chaining en linear probing stap voor stap, plus load factor, rehashen en code in Python en Java.","md","i-lucide-hash",{},"\u002Fpracticely-dsa\u002Fhashtabellen",{"title":5,"description":2631},"practicely-dsa\u002Fhashtabellen","hashtabellen","EsIg57LVwl5TrF3wO864vy4tqQTkxKMgwpo2Nn07vnU",{"prev":2641,"next":5679},{"id":2642,"title":2643,"body":2644,"description":5671,"extension":2632,"icon":5672,"meta":5673,"navigation":883,"order":887,"path":5674,"seo":5675,"stem":5676,"topic":5677,"__hash__":5678},"practicelyDsa\u002Fpracticely-dsa\u002Fstapels-en-wachtrijen.md","Stapels en wachtrijen uitgelegd: LIFO, FIFO en gelinkte lijsten",{"type":7,"value":2645,"toc":5659},[2646,2666,2669,2673,2682,2685,2719,2726,2867,2871,2880,2910,2917,3055,3063,3067,3085,3594,3620,3624,3647,3653,3662,3687,3706,3784,3788,3803,3829,4558,4580,4584,4599,4608,4732,4757,5308,5312,5396,5403,5405,5529,5538,5540,5610,5612,5656],[10,2647,2648,2649,302,2652,2655,2656,302,2659,2662,2663,312],{},"Een ",[19,2650,2651],{},"stapel",[14,2653,2654],{},"stack",") en een ",[19,2657,2658],{},"wachtrij",[14,2660,2661],{},"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 (",[14,2664,2665],{},"call stack",[10,2667,2668],{},"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.",[36,2670,2672],{"id":2671},"stapel-last-in-first-out","Stapel: last in, first out",[10,2674,2675,2676,302,2679,312],{},"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: ",[19,2677,2678],{},"LIFO",[14,2680,2681],{},"last in, first out",[10,2683,2684],{},"De operaties:",[492,2686,2687,2697,2703,2713],{},[495,2688,2689,2692,2693,2696],{},[24,2690,2691],{},"push(x)",": leg ",[24,2694,2695],{},"x"," bovenop de stapel.",[495,2698,2699,2702],{},[24,2700,2701],{},"pop()",": haal het bovenste element weg en geef het terug.",[495,2704,2705,2708,2709,2712],{},[24,2706,2707],{},"peek()"," (of ",[24,2710,2711],{},"top()","): bekijk het bovenste element zonder het weg te halen.",[495,2714,2715,2718],{},[24,2716,2717],{},"isEmpty()",": is de stapel leeg?",[10,2720,2721,2722,2725],{},"We noteren de toestand van een stapel altijd van ",[19,2723,2724],{},"onder naar boven",": het meest rechtse element is\nde bovenkant.",[155,2727,2728,2743],{},[158,2729,2730],{},[161,2731,2732,2735,2737,2740],{},[164,2733,2734],{},"Stap",[164,2736,2445],{},[164,2738,2739],{},"Teruggegeven",[164,2741,2742],{},"Stapel (onder → boven)",[173,2744,2745,2761,2777,2793,2807,2823,2837,2851],{},[161,2746,2747,2749,2754,2757],{},[178,2748,130],{},[178,2750,2751],{},[24,2752,2753],{},"push(4)",[178,2755,2756],{},"–",[178,2758,2759],{},[24,2760,189],{},[161,2762,2763,2765,2770,2772],{},[178,2764,252],{},[178,2766,2767],{},[24,2768,2769],{},"push(7)",[178,2771,2756],{},[178,2773,2774],{},[24,2775,2776],{},"4, 7",[161,2778,2779,2781,2786,2788],{},[178,2780,259],{},[178,2782,2783],{},[24,2784,2785],{},"push(1)",[178,2787,2756],{},[178,2789,2790],{},[24,2791,2792],{},"4, 7, 1",[161,2794,2795,2797,2801,2803],{},[178,2796,189],{},[178,2798,2799],{},[24,2800,2701],{},[178,2802,130],{},[178,2804,2805],{},[24,2806,2776],{},[161,2808,2809,2811,2816,2818],{},[178,2810,272],{},[178,2812,2813],{},[24,2814,2815],{},"push(9)",[178,2817,2756],{},[178,2819,2820],{},[24,2821,2822],{},"4, 7, 9",[161,2824,2825,2827,2831,2833],{},[178,2826,196],{},[178,2828,2829],{},[24,2830,2701],{},[178,2832,756],{},[178,2834,2835],{},[24,2836,2776],{},[161,2838,2839,2841,2845,2847],{},[178,2840,751],{},[178,2842,2843],{},[24,2844,2701],{},[178,2846,751],{},[178,2848,2849],{},[24,2850,189],{},[161,2852,2853,2855,2860,2862],{},[178,2854,123],{},[178,2856,2857],{},[24,2858,2859],{},"push(5)",[178,2861,2756],{},[178,2863,2864],{},[24,2865,2866],{},"4, 5",[36,2868,2870],{"id":2869},"wachtrij-first-in-first-out","Wachtrij: first in, first out",[10,2872,2873,2874,302,2877,312],{},"Een wachtrij werkt als de rij bij de kassa: wie het eerst aansluit, wordt het eerst geholpen:\n",[19,2875,2876],{},"FIFO",[14,2878,2879],{},"first in, first out",[492,2881,2882,2894,2904],{},[495,2883,2884,2887,2888,2890,2891,2893],{},[24,2885,2886],{},"enqueue(x)",": zet ",[24,2889,2695],{}," ",[19,2892,146],{}," in de rij.",[495,2895,2896,2899,2900,2903],{},[24,2897,2898],{},"dequeue()",": haal het ",[19,2901,2902],{},"voorste"," element weg en geef het terug.",[495,2905,2906,2909],{},[24,2907,2908],{},"front()",": bekijk het voorste element.",[10,2911,2912,2913,2916],{},"De toestand noteren we van ",[19,2914,2915],{},"voor naar achter",": het meest linkse element is als eerste aan de beurt.\nDezelfde reeks als hierboven, maar nu met een wachtrij:",[155,2918,2919,2932],{},[158,2920,2921],{},[161,2922,2923,2925,2927,2929],{},[164,2924,2734],{},[164,2926,2445],{},[164,2928,2739],{},[164,2930,2931],{},"Wachtrij (voor → achter)",[173,2933,2934,2949,2964,2979,2994,3010,3025,3039],{},[161,2935,2936,2938,2943,2945],{},[178,2937,130],{},[178,2939,2940],{},[24,2941,2942],{},"enqueue(4)",[178,2944,2756],{},[178,2946,2947],{},[24,2948,189],{},[161,2950,2951,2953,2958,2960],{},[178,2952,252],{},[178,2954,2955],{},[24,2956,2957],{},"enqueue(7)",[178,2959,2756],{},[178,2961,2962],{},[24,2963,2776],{},[161,2965,2966,2968,2973,2975],{},[178,2967,259],{},[178,2969,2970],{},[24,2971,2972],{},"enqueue(1)",[178,2974,2756],{},[178,2976,2977],{},[24,2978,2792],{},[161,2980,2981,2983,2987,2989],{},[178,2982,189],{},[178,2984,2985],{},[24,2986,2898],{},[178,2988,189],{},[178,2990,2991],{},[24,2992,2993],{},"7, 1",[161,2995,2996,2998,3003,3005],{},[178,2997,272],{},[178,2999,3000],{},[24,3001,3002],{},"enqueue(9)",[178,3004,2756],{},[178,3006,3007],{},[24,3008,3009],{},"7, 1, 9",[161,3011,3012,3014,3018,3020],{},[178,3013,196],{},[178,3015,3016],{},[24,3017,2898],{},[178,3019,751],{},[178,3021,3022],{},[24,3023,3024],{},"1, 9",[161,3026,3027,3029,3033,3035],{},[178,3028,751],{},[178,3030,3031],{},[24,3032,2898],{},[178,3034,130],{},[178,3036,3037],{},[24,3038,756],{},[161,3040,3041,3043,3048,3050],{},[178,3042,123],{},[178,3044,3045],{},[24,3046,3047],{},"enqueue(5)",[178,3049,2756],{},[178,3051,3052],{},[24,3053,3054],{},"9, 5",[10,3056,3057,3058,3060,3061,90],{},"Zelfde invoer, totaal ander resultaat: de stapel eindigt met ",[24,3059,2866],{},", de wachtrij met ",[24,3062,3054],{},[36,3064,3066],{"id":3065},"een-stapel-met-een-array-of-lijst","Een stapel met een array of lijst",[10,3068,3069,3070,3073,3074,3077,3078,3081,3082,3084],{},"Een stapel is eenvoudig te bouwen op een dynamische array (Python ",[24,3071,3072],{},"list",", Java ",[24,3075,3076],{},"ArrayList","). De\nbovenkant is het ",[19,3079,3080],{},"einde"," van de lijst: toevoegen en weghalen aan het einde kost ",[24,3083,820],{}," (bij een\ndynamische array gemiddeld, omdat de array af en toe moet groeien).",[829,3086,3087,3316],{},[832,3088,3089],{"v-slot:python":56},[48,3090,3092],{"className":836,"code":3091,"language":838,"meta":56,"style":56},"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",[24,3093,3094,3103,3115,3129,3133,3151,3173,3177,3190,3205,3224,3242,3246,3259,3277,3281,3294],{"__ignoreMap":56},[842,3095,3096,3098,3101],{"class":844,"line":845},[842,3097,896],{"class":895},[842,3099,3100],{"class":899}," Stapel",[842,3102,903],{"class":852},[842,3104,3105,3107,3109,3111,3113],{"class":844,"line":859},[842,3106,909],{"class":895},[842,3108,913],{"class":912},[842,3110,916],{"class":852},[842,3112,920],{"class":919},[842,3114,930],{"class":852},[842,3116,3117,3119,3121,3124,3126],{"class":844,"line":880},[842,3118,936],{"class":848},[842,3120,90],{"class":852},[842,3122,3123],{"class":941},"data",[842,3125,944],{"class":852},[842,3127,3128],{"class":852}," []\n",[842,3130,3131],{"class":844,"line":887},[842,3132,884],{"emptyLinePlaceholder":883},[842,3134,3135,3137,3140,3142,3144,3146,3149],{"class":844,"line":892},[842,3136,909],{"class":895},[842,3138,3139],{"class":912}," push",[842,3141,916],{"class":852},[842,3143,920],{"class":919},[842,3145,923],{"class":852},[842,3147,3148],{"class":926}," x",[842,3150,930],{"class":852},[842,3152,3153,3155,3157,3159,3161,3164,3166,3168,3170],{"class":844,"line":906},[842,3154,936],{"class":848},[842,3156,90],{"class":852},[842,3158,3123],{"class":941},[842,3160,90],{"class":852},[842,3162,3163],{"class":912},"append",[842,3165,916],{"class":852},[842,3167,2695],{"class":912},[842,3169,1071],{"class":852},[842,3171,3172],{"class":876},"  # bovenkant = einde van de lijst\n",[842,3174,3175],{"class":844,"line":933},[842,3176,884],{"emptyLinePlaceholder":883},[842,3178,3179,3181,3184,3186,3188],{"class":844,"line":950},[842,3180,909],{"class":895},[842,3182,3183],{"class":912}," pop",[842,3185,916],{"class":852},[842,3187,920],{"class":919},[842,3189,930],{"class":852},[842,3191,3192,3194,3197,3199,3201,3203],{"class":844,"line":976},[842,3193,1242],{"class":1031},[842,3195,3196],{"class":852}," not",[842,3198,1020],{"class":848},[842,3200,90],{"class":852},[842,3202,3123],{"class":941},[842,3204,903],{"class":852},[842,3206,3207,3210,3213,3215,3217,3220,3222],{"class":844,"line":981},[842,3208,3209],{"class":1031},"            raise",[842,3211,3212],{"class":899}," IndexError",[842,3214,916],{"class":852},[842,3216,873],{"class":852},[842,3218,3219],{"class":870},"pop op lege stapel",[842,3221,873],{"class":852},[842,3223,1386],{"class":852},[842,3225,3226,3228,3230,3232,3234,3236,3239],{"class":844,"line":1000},[842,3227,1208],{"class":1031},[842,3229,1020],{"class":848},[842,3231,90],{"class":852},[842,3233,3123],{"class":941},[842,3235,90],{"class":852},[842,3237,3238],{"class":912},"pop",[842,3240,3241],{"class":852},"()\n",[842,3243,3244],{"class":844,"line":1006},[842,3245,884],{"emptyLinePlaceholder":883},[842,3247,3248,3250,3253,3255,3257],{"class":844,"line":1028},[842,3249,909],{"class":895},[842,3251,3252],{"class":912}," peek",[842,3254,916],{"class":852},[842,3256,920],{"class":919},[842,3258,930],{"class":852},[842,3260,3261,3263,3265,3267,3269,3272,3274],{"class":844,"line":1054},[842,3262,1208],{"class":1031},[842,3264,1020],{"class":848},[842,3266,90],{"class":852},[842,3268,3123],{"class":941},[842,3270,3271],{"class":852},"[-",[842,3273,130],{"class":1167},[842,3275,3276],{"class":852},"]\n",[842,3278,3279],{"class":844,"line":1083},[842,3280,884],{"emptyLinePlaceholder":883},[842,3282,3283,3285,3288,3290,3292],{"class":844,"line":1088},[842,3284,909],{"class":895},[842,3286,3287],{"class":912}," is_empty",[842,3289,916],{"class":852},[842,3291,920],{"class":919},[842,3293,930],{"class":852},[842,3295,3296,3298,3301,3303,3305,3307,3309,3311,3313],{"class":844,"line":1106},[842,3297,1208],{"class":1031},[842,3299,3300],{"class":912}," len",[842,3302,916],{"class":852},[842,3304,920],{"class":848},[842,3306,90],{"class":852},[842,3308,3123],{"class":941},[842,3310,1071],{"class":852},[842,3312,1190],{"class":852},[842,3314,3315],{"class":1167}," 0\n",[832,3317,3318],{"v-slot:java":56},[48,3319,3321],{"className":1612,"code":3320,"language":1614,"meta":56,"style":56},"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",[24,3322,3323,3339,3343,3351,3380,3384,3400,3419,3423,3427,3438,3456,3475,3479,3508,3512,3516,3526,3553,3557,3561,3573,3586,3590],{"__ignoreMap":56},[842,3324,3325,3327,3329,3331,3333,3335,3337],{"class":844,"line":845},[842,3326,1621],{"class":1167},[842,3328,1624],{"class":895},[842,3330,90],{"class":852},[842,3332,1629],{"class":895},[842,3334,90],{"class":852},[842,3336,3076],{"class":895},[842,3338,1637],{"class":852},[842,3340,3341],{"class":844,"line":859},[842,3342,884],{"emptyLinePlaceholder":883},[842,3344,3345,3347,3349],{"class":844,"line":880},[842,3346,896],{"class":895},[842,3348,3100],{"class":899},[842,3350,1654],{"class":852},[842,3352,3353,3355,3357,3360,3362,3365,3368,3371,3373,3375,3377],{"class":844,"line":887},[842,3354,1659],{"class":895},[842,3356,1665],{"class":895},[842,3358,3359],{"class":895}," ArrayList",[842,3361,1920],{"class":852},[842,3363,3364],{"class":895},"Integer",[842,3366,3367],{"class":852},">",[842,3369,3370],{"class":848}," data ",[842,3372,853],{"class":852},[842,3374,1789],{"class":1031},[842,3376,3359],{"class":895},[842,3378,3379],{"class":852},"\u003C>();\n",[842,3381,3382],{"class":844,"line":892},[842,3383,884],{"emptyLinePlaceholder":883},[842,3385,3386,3388,3390,3392,3394,3396,3398],{"class":844,"line":906},[842,3387,2051],{"class":895},[842,3389,3139],{"class":912},[842,3391,916],{"class":852},[842,3393,1757],{"class":895},[842,3395,3148],{"class":926},[842,3397,1071],{"class":852},[842,3399,1654],{"class":852},[842,3401,3402,3405,3407,3410,3412,3414,3416],{"class":844,"line":933},[842,3403,3404],{"class":848},"        data",[842,3406,90],{"class":852},[842,3408,3409],{"class":912},"add",[842,3411,916],{"class":852},[842,3413,2695],{"class":848},[842,3415,1870],{"class":852},[842,3417,3418],{"class":876}," \u002F\u002F bovenkant = einde van de lijst\n",[842,3420,3421],{"class":844,"line":950},[842,3422,1824],{"class":852},[842,3424,3425],{"class":844,"line":976},[842,3426,884],{"emptyLinePlaceholder":883},[842,3428,3429,3431,3433,3436],{"class":844,"line":981},[842,3430,1886],{"class":895},[842,3432,3183],{"class":912},[842,3434,3435],{"class":852},"()",[842,3437,1654],{"class":852},[842,3439,3440,3442,3444,3446,3448,3451,3454],{"class":844,"line":1000},[842,3441,1242],{"class":1031},[842,3443,302],{"class":852},[842,3445,3123],{"class":848},[842,3447,90],{"class":852},[842,3449,3450],{"class":912},"isEmpty",[842,3452,3453],{"class":852},"())",[842,3455,1654],{"class":852},[842,3457,3458,3461,3463,3465,3467,3469,3471,3473],{"class":844,"line":1006},[842,3459,3460],{"class":1031},"            throw",[842,3462,1789],{"class":1031},[842,3464,2232],{"class":912},[842,3466,916],{"class":852},[842,3468,873],{"class":852},[842,3470,3219],{"class":870},[842,3472,873],{"class":852},[842,3474,1819],{"class":852},[842,3476,3477],{"class":844,"line":1028},[842,3478,2028],{"class":852},[842,3480,3481,3483,3486,3488,3491,3493,3495,3497,3500,3502,3504,3506],{"class":844,"line":1054},[842,3482,1208],{"class":1031},[842,3484,3485],{"class":848}," data",[842,3487,90],{"class":852},[842,3489,3490],{"class":912},"remove",[842,3492,916],{"class":852},[842,3494,3123],{"class":848},[842,3496,90],{"class":852},[842,3498,3499],{"class":912},"size",[842,3501,3435],{"class":852},[842,3503,1164],{"class":852},[842,3505,1709],{"class":1167},[842,3507,1819],{"class":852},[842,3509,3510],{"class":844,"line":1083},[842,3511,1824],{"class":852},[842,3513,3514],{"class":844,"line":1088},[842,3515,884],{"emptyLinePlaceholder":883},[842,3517,3518,3520,3522,3524],{"class":844,"line":1106},[842,3519,1886],{"class":895},[842,3521,3252],{"class":912},[842,3523,3435],{"class":852},[842,3525,1654],{"class":852},[842,3527,3528,3530,3532,3534,3537,3539,3541,3543,3545,3547,3549,3551],{"class":844,"line":1130},[842,3529,1208],{"class":1031},[842,3531,3485],{"class":848},[842,3533,90],{"class":852},[842,3535,3536],{"class":912},"get",[842,3538,916],{"class":852},[842,3540,3123],{"class":848},[842,3542,90],{"class":852},[842,3544,3499],{"class":912},[842,3546,3435],{"class":852},[842,3548,1164],{"class":852},[842,3550,1709],{"class":1167},[842,3552,1819],{"class":852},[842,3554,3555],{"class":844,"line":1158},[842,3556,1824],{"class":852},[842,3558,3559],{"class":844,"line":1173},[842,3560,884],{"emptyLinePlaceholder":883},[842,3562,3563,3566,3569,3571],{"class":844,"line":1197},[842,3564,3565],{"class":895},"    boolean",[842,3567,3568],{"class":912}," isEmpty",[842,3570,3435],{"class":852},[842,3572,1654],{"class":852},[842,3574,3575,3577,3579,3581,3583],{"class":844,"line":1205},[842,3576,1208],{"class":1031},[842,3578,3485],{"class":848},[842,3580,90],{"class":852},[842,3582,3450],{"class":912},[842,3584,3585],{"class":852},"();\n",[842,3587,3588],{"class":844,"line":1216},[842,3589,1824],{"class":852},[842,3591,3592],{"class":844,"line":1221},[842,3593,2327],{"class":852},[10,3595,3596,3597,3600,3601,3604,3605,3608,3609,3611,3612,3615,3616,3619],{},"Voor een wachtrij werkt een gewone lijst slecht: ",[24,3598,3599],{},"dequeue"," haalt het ",[19,3602,3603],{},"eerste"," element weg, en dan\nmoeten alle andere elementen een plek opschuiven. In Python is ",[24,3606,3607],{},"list.pop(0)"," daarom ",[24,3610,809],{},". Gebruik\nvoor een wachtrij ",[24,3613,3614],{},"collections.deque"," (Python) of ",[24,3617,3618],{},"ArrayDeque"," (Java), of bouw er een met een\ngelinkte lijst.",[36,3621,3623],{"id":3622},"gelinkte-lijsten","Gelinkte lijsten",[10,3625,2648,3626,302,3629,3632,3633,3636,3637,302,3640,3643,3644,90],{},[19,3627,3628],{},"gelinkte lijst",[14,3630,3631],{},"linked list",") bestaat uit losse knopen (",[14,3634,3635],{},"nodes","). Elke knoop bevat een\nwaarde en een verwijzing naar de volgende knoop. In een ",[19,3638,3639],{},"enkel gelinkte lijst",[14,3641,3642],{},"singly linked\nlist",") wijst elke knoop alleen naar zijn opvolger; de lijst zelf onthoudt alleen de eerste knoop, de\n",[24,3645,3646],{},"head",[48,3648,3651],{"className":3649,"code":3650,"language":53},[51],"head → [4 | •] → [7 | •] → [1 | •] → null\n",[24,3652,3650],{"__ignoreMap":56},[10,3654,3655,3656,3661],{},"Het grote voordeel: ",[19,3657,3658,3659],{},"vooraan invoegen of verwijderen kost ",[24,3660,820],{},", want je verandert alleen een\npaar verwijzingen. Niets hoeft op te schuiven.",[492,3663,3664,3675],{},[495,3665,3666,3669,3670,3672,3673,90],{},[19,3667,3668],{},"Vooraan invoegen:"," maak een nieuwe knoop, laat hem naar de oude ",[24,3671,3646],{}," wijzen, maak hem de\nnieuwe ",[24,3674,3646],{},[495,3676,3677,3680,3681,3684,3685,90],{},[19,3678,3679],{},"Vooraan verwijderen:"," maak ",[24,3682,3683],{},"head.next"," de nieuwe ",[24,3686,3646],{},[10,3688,3689,3690,3692,3693,3695,3696,3698,3699,3701,3702,3705],{},"Het nadeel: je kunt niet direct naar index ",[24,3691,1145],{}," springen. Om het ",[24,3694,1145],{},"-de element te vinden, loop je\nvanaf ",[24,3697,3646],{}," de verwijzingen af: ",[24,3700,809],{},". Daarom werkt ",[2418,3703,3704],{"href":2420},"binair zoeken"," niet\nop een gelinkte lijst.",[155,3707,3708,3720],{},[158,3709,3710],{},[161,3711,3712,3714,3717],{},[164,3713,2445],{},[164,3715,3716],{},"Array",[164,3718,3719],{},"Enkel gelinkte lijst",[173,3721,3722,3737,3750,3770],{},[161,3723,3724,3729,3733],{},[178,3725,3726,3727],{},"element op index ",[24,3728,1145],{},[178,3730,3731],{},[24,3732,820],{},[178,3734,3735],{},[24,3736,809],{},[161,3738,3739,3742,3746],{},[178,3740,3741],{},"vooraan invoegen\u002Fverwijderen",[178,3743,3744],{},[24,3745,809],{},[178,3747,3748],{},[24,3749,820],{},[161,3751,3752,3755,3760],{},[178,3753,3754],{},"achteraan invoegen",[178,3756,3757,3759],{},[24,3758,820],{}," gemiddeld",[178,3761,3762,151,3764,3767,3768],{},[24,3763,820],{},[24,3765,3766],{},"tail","-verwijzing, anders ",[24,3769,809],{},[161,3771,3772,3775,3779],{},[178,3773,3774],{},"achteraan verwijderen",[178,3776,3777],{},[24,3778,820],{},[178,3780,3781,3783],{},[24,3782,809],{}," (je moet de voorlaatste knoop vinden)",[36,3785,3787],{"id":3786},"stapel-en-wachtrij-met-een-gelinkte-lijst","Stapel en wachtrij met een gelinkte lijst",[10,3789,2648,3790,3792,3793,3796,3797,3799,3800,3802],{},[19,3791,2651],{}," is een gelinkte lijst waarbij je alleen vooraan werkt: ",[24,3794,3795],{},"push"," voegt vooraan in, ",[24,3798,3238],{},"\nverwijdert vooraan. De ",[24,3801,3646],{}," is de bovenkant van de stapel.",[10,3804,2648,3805,3807,3808,3810,3811,3813,3814,3817,3818,3820,3821,3823,3824,3826,3827,90],{},[19,3806,2658],{}," houdt twee verwijzingen bij: ",[24,3809,3646],{}," (voorkant) en ",[24,3812,3766],{}," (achterkant).\n",[24,3815,3816],{},"enqueue"," hangt een knoop achter ",[24,3819,3766],{},", ",[24,3822,3599],{}," haalt ",[24,3825,3646],{}," weg. Allebei ",[24,3828,820],{},[829,3830,3831,4191],{},[832,3832,3833],{"v-slot:python":56},[48,3834,3836],{"className":836,"code":3835,"language":838,"meta":56,"style":56},"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",[24,3837,3838,3847,3870,3884,3897,3901,3905,3914,3926,3942,3957,3961,3978,3993,4011,4032,4039,4055,4067,4071,4084,4099,4116,4134,4155,4172,4184],{"__ignoreMap":56},[842,3839,3840,3842,3845],{"class":844,"line":845},[842,3841,896],{"class":895},[842,3843,3844],{"class":899}," Knoop",[842,3846,903],{"class":852},[842,3848,3849,3851,3853,3855,3857,3859,3862,3864,3867],{"class":844,"line":859},[842,3850,909],{"class":895},[842,3852,913],{"class":912},[842,3854,916],{"class":852},[842,3856,920],{"class":919},[842,3858,923],{"class":852},[842,3860,3861],{"class":926}," waarde",[842,3863,923],{"class":852},[842,3865,3866],{"class":926}," volgende",[842,3868,3869],{"class":852},"=None):\n",[842,3871,3872,3874,3876,3879,3881],{"class":844,"line":880},[842,3873,936],{"class":848},[842,3875,90],{"class":852},[842,3877,3878],{"class":941},"waarde",[842,3880,944],{"class":852},[842,3882,3883],{"class":848}," waarde\n",[842,3885,3886,3888,3890,3892,3894],{"class":844,"line":887},[842,3887,936],{"class":848},[842,3889,90],{"class":852},[842,3891,301],{"class":941},[842,3893,944],{"class":852},[842,3895,3896],{"class":848}," volgende\n",[842,3898,3899],{"class":844,"line":892},[842,3900,884],{"emptyLinePlaceholder":883},[842,3902,3903],{"class":844,"line":906},[842,3904,884],{"emptyLinePlaceholder":883},[842,3906,3907,3909,3912],{"class":844,"line":933},[842,3908,896],{"class":895},[842,3910,3911],{"class":899}," Wachtrij",[842,3913,903],{"class":852},[842,3915,3916,3918,3920,3922,3924],{"class":844,"line":950},[842,3917,909],{"class":895},[842,3919,913],{"class":912},[842,3921,916],{"class":852},[842,3923,920],{"class":919},[842,3925,930],{"class":852},[842,3927,3928,3930,3932,3934,3936,3939],{"class":844,"line":976},[842,3929,936],{"class":848},[842,3931,90],{"class":852},[842,3933,3646],{"class":941},[842,3935,944],{"class":852},[842,3937,3938],{"class":852}," None",[842,3940,3941],{"class":876},"  # voorkant: hier gaat het eruit\n",[842,3943,3944,3946,3948,3950,3952,3954],{"class":844,"line":981},[842,3945,936],{"class":848},[842,3947,90],{"class":852},[842,3949,3766],{"class":941},[842,3951,944],{"class":852},[842,3953,3938],{"class":852},[842,3955,3956],{"class":876},"  # achterkant: hier komt het erbij\n",[842,3958,3959],{"class":844,"line":1000},[842,3960,884],{"emptyLinePlaceholder":883},[842,3962,3963,3965,3968,3970,3972,3974,3976],{"class":844,"line":1006},[842,3964,909],{"class":895},[842,3966,3967],{"class":912}," enqueue",[842,3969,916],{"class":852},[842,3971,920],{"class":919},[842,3973,923],{"class":852},[842,3975,3148],{"class":926},[842,3977,930],{"class":852},[842,3979,3980,3983,3985,3987,3989,3991],{"class":844,"line":1028},[842,3981,3982],{"class":848},"        knoop ",[842,3984,853],{"class":852},[842,3986,3844],{"class":912},[842,3988,916],{"class":852},[842,3990,2695],{"class":912},[842,3992,1386],{"class":852},[842,3994,3995,3997,3999,4001,4003,4005,4008],{"class":844,"line":1054},[842,3996,1242],{"class":1031},[842,3998,1020],{"class":848},[842,4000,90],{"class":852},[842,4002,3766],{"class":941},[842,4004,1150],{"class":852},[842,4006,4007],{"class":852}," None:",[842,4009,4010],{"class":876},"  # lege wachtrij\n",[842,4012,4013,4015,4017,4019,4021,4023,4025,4027,4029],{"class":844,"line":1083},[842,4014,1451],{"class":848},[842,4016,90],{"class":852},[842,4018,3646],{"class":941},[842,4020,944],{"class":852},[842,4022,1020],{"class":848},[842,4024,90],{"class":852},[842,4026,3766],{"class":941},[842,4028,944],{"class":852},[842,4030,4031],{"class":848}," knoop\n",[842,4033,4034,4037],{"class":844,"line":1088},[842,4035,4036],{"class":1031},"        else",[842,4038,903],{"class":852},[842,4040,4041,4043,4045,4047,4049,4051,4053],{"class":844,"line":1106},[842,4042,1451],{"class":848},[842,4044,90],{"class":852},[842,4046,3766],{"class":941},[842,4048,90],{"class":852},[842,4050,301],{"class":941},[842,4052,944],{"class":852},[842,4054,4031],{"class":848},[842,4056,4057,4059,4061,4063,4065],{"class":844,"line":1130},[842,4058,1451],{"class":848},[842,4060,90],{"class":852},[842,4062,3766],{"class":941},[842,4064,944],{"class":852},[842,4066,4031],{"class":848},[842,4068,4069],{"class":844,"line":1158},[842,4070,884],{"emptyLinePlaceholder":883},[842,4072,4073,4075,4078,4080,4082],{"class":844,"line":1173},[842,4074,909],{"class":895},[842,4076,4077],{"class":912}," dequeue",[842,4079,916],{"class":852},[842,4081,920],{"class":919},[842,4083,930],{"class":852},[842,4085,4086,4088,4090,4092,4094,4096],{"class":844,"line":1197},[842,4087,1242],{"class":1031},[842,4089,1020],{"class":848},[842,4091,90],{"class":852},[842,4093,3646],{"class":941},[842,4095,1150],{"class":852},[842,4097,4098],{"class":852}," None:\n",[842,4100,4101,4103,4105,4107,4109,4112,4114],{"class":844,"line":1205},[842,4102,3209],{"class":1031},[842,4104,3212],{"class":899},[842,4106,916],{"class":852},[842,4108,873],{"class":852},[842,4110,4111],{"class":870},"dequeue op lege wachtrij",[842,4113,873],{"class":852},[842,4115,1386],{"class":852},[842,4117,4118,4121,4123,4125,4127,4129,4131],{"class":844,"line":1216},[842,4119,4120],{"class":848},"        x ",[842,4122,853],{"class":852},[842,4124,1020],{"class":848},[842,4126,90],{"class":852},[842,4128,3646],{"class":941},[842,4130,90],{"class":852},[842,4132,4133],{"class":941},"waarde\n",[842,4135,4136,4138,4140,4142,4144,4146,4148,4150,4152],{"class":844,"line":1221},[842,4137,936],{"class":848},[842,4139,90],{"class":852},[842,4141,3646],{"class":941},[842,4143,944],{"class":852},[842,4145,1020],{"class":848},[842,4147,90],{"class":852},[842,4149,3646],{"class":941},[842,4151,90],{"class":852},[842,4153,4154],{"class":941},"volgende\n",[842,4156,4157,4159,4161,4163,4165,4167,4169],{"class":844,"line":1239},[842,4158,1242],{"class":1031},[842,4160,1020],{"class":848},[842,4162,90],{"class":852},[842,4164,3646],{"class":941},[842,4166,1150],{"class":852},[842,4168,4007],{"class":852},[842,4170,4171],{"class":876},"  # wachtrij is nu leeg\n",[842,4173,4174,4176,4178,4180,4182],{"class":844,"line":1267},[842,4175,1451],{"class":848},[842,4177,90],{"class":852},[842,4179,3766],{"class":941},[842,4181,944],{"class":852},[842,4183,856],{"class":852},[842,4185,4186,4188],{"class":844,"line":1276},[842,4187,1208],{"class":1031},[842,4189,4190],{"class":848}," x\n",[832,4192,4193],{"v-slot:java":56},[48,4194,4196],{"className":1612,"code":4195,"language":1614,"meta":56,"style":56},"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",[24,4197,4198,4206,4218,4226,4235,4239,4253,4267,4271,4275,4279,4293,4307,4311,4327,4346,4367,4384,4394,4410,4421,4425,4429,4433,4443,4458,4476,4480,4497,4512,4529,4538,4542,4550,4554],{"__ignoreMap":56},[842,4199,4200,4202,4204],{"class":844,"line":845},[842,4201,896],{"class":895},[842,4203,3911],{"class":899},[842,4205,1654],{"class":852},[842,4207,4208,4210,4212,4214,4216],{"class":844,"line":859},[842,4209,1659],{"class":895},[842,4211,1662],{"class":895},[842,4213,1649],{"class":895},[842,4215,3844],{"class":899},[842,4217,1654],{"class":852},[842,4219,4220,4222,4224],{"class":844,"line":880},[842,4221,2271],{"class":895},[842,4223,3861],{"class":848},[842,4225,1637],{"class":852},[842,4227,4228,4231,4233],{"class":844,"line":887},[842,4229,4230],{"class":895},"        Knoop",[842,4232,3866],{"class":848},[842,4234,1637],{"class":852},[842,4236,4237],{"class":844,"line":892},[842,4238,884],{"emptyLinePlaceholder":883},[842,4240,4241,4243,4245,4247,4249,4251],{"class":844,"line":906},[842,4242,4230],{"class":912},[842,4244,916],{"class":852},[842,4246,1757],{"class":895},[842,4248,3861],{"class":926},[842,4250,1071],{"class":852},[842,4252,1654],{"class":852},[842,4254,4255,4258,4261,4263,4265],{"class":844,"line":933},[842,4256,4257],{"class":852},"            this.",[842,4259,4260],{"class":848},"waarde ",[842,4262,853],{"class":852},[842,4264,3861],{"class":848},[842,4266,1637],{"class":852},[842,4268,4269],{"class":844,"line":950},[842,4270,2028],{"class":852},[842,4272,4273],{"class":844,"line":976},[842,4274,1824],{"class":852},[842,4276,4277],{"class":844,"line":981},[842,4278,884],{"emptyLinePlaceholder":883},[842,4280,4281,4283,4285,4288,4290],{"class":844,"line":1000},[842,4282,1659],{"class":895},[842,4284,3844],{"class":895},[842,4286,4287],{"class":848}," head",[842,4289,1712],{"class":852},[842,4291,4292],{"class":876}," \u002F\u002F voorkant: hier gaat het eruit\n",[842,4294,4295,4297,4299,4302,4304],{"class":844,"line":1006},[842,4296,1659],{"class":895},[842,4298,3844],{"class":895},[842,4300,4301],{"class":848}," tail",[842,4303,1712],{"class":852},[842,4305,4306],{"class":876}," \u002F\u002F achterkant: hier komt het erbij\n",[842,4308,4309],{"class":844,"line":1028},[842,4310,884],{"emptyLinePlaceholder":883},[842,4312,4313,4315,4317,4319,4321,4323,4325],{"class":844,"line":1054},[842,4314,2051],{"class":895},[842,4316,3967],{"class":912},[842,4318,916],{"class":852},[842,4320,1757],{"class":895},[842,4322,3148],{"class":926},[842,4324,1071],{"class":852},[842,4326,1654],{"class":852},[842,4328,4329,4331,4334,4336,4338,4340,4342,4344],{"class":844,"line":1083},[842,4330,4230],{"class":895},[842,4332,4333],{"class":848}," knoop ",[842,4335,853],{"class":852},[842,4337,1789],{"class":1031},[842,4339,3844],{"class":912},[842,4341,916],{"class":852},[842,4343,2695],{"class":848},[842,4345,1819],{"class":852},[842,4347,4348,4350,4352,4355,4358,4361,4364],{"class":844,"line":1088},[842,4349,1242],{"class":1031},[842,4351,302],{"class":852},[842,4353,4354],{"class":848},"tail ",[842,4356,4357],{"class":852},"==",[842,4359,4360],{"class":852}," null)",[842,4362,4363],{"class":852}," {",[842,4365,4366],{"class":876}," \u002F\u002F lege wachtrij\n",[842,4368,4369,4372,4374,4377,4379,4382],{"class":844,"line":1106},[842,4370,4371],{"class":848},"            head ",[842,4373,853],{"class":852},[842,4375,4376],{"class":848}," tail ",[842,4378,853],{"class":852},[842,4380,4381],{"class":848}," knoop",[842,4383,1637],{"class":852},[842,4385,4386,4389,4392],{"class":844,"line":1130},[842,4387,4388],{"class":852},"        }",[842,4390,4391],{"class":1031}," else",[842,4393,1654],{"class":852},[842,4395,4396,4399,4401,4404,4406,4408],{"class":844,"line":1158},[842,4397,4398],{"class":848},"            tail",[842,4400,90],{"class":852},[842,4402,4403],{"class":848},"volgende ",[842,4405,853],{"class":852},[842,4407,4381],{"class":848},[842,4409,1637],{"class":852},[842,4411,4412,4415,4417,4419],{"class":844,"line":1173},[842,4413,4414],{"class":848},"            tail ",[842,4416,853],{"class":852},[842,4418,4381],{"class":848},[842,4420,1637],{"class":852},[842,4422,4423],{"class":844,"line":1197},[842,4424,2028],{"class":852},[842,4426,4427],{"class":844,"line":1205},[842,4428,1824],{"class":852},[842,4430,4431],{"class":844,"line":1216},[842,4432,884],{"emptyLinePlaceholder":883},[842,4434,4435,4437,4439,4441],{"class":844,"line":1221},[842,4436,1886],{"class":895},[842,4438,4077],{"class":912},[842,4440,3435],{"class":852},[842,4442,1654],{"class":852},[842,4444,4445,4447,4449,4452,4454,4456],{"class":844,"line":1239},[842,4446,1242],{"class":1031},[842,4448,302],{"class":852},[842,4450,4451],{"class":848},"head ",[842,4453,4357],{"class":852},[842,4455,4360],{"class":852},[842,4457,1654],{"class":852},[842,4459,4460,4462,4464,4466,4468,4470,4472,4474],{"class":844,"line":1267},[842,4461,3460],{"class":1031},[842,4463,1789],{"class":1031},[842,4465,2232],{"class":912},[842,4467,916],{"class":852},[842,4469,873],{"class":852},[842,4471,4111],{"class":870},[842,4473,873],{"class":852},[842,4475,1819],{"class":852},[842,4477,4478],{"class":844,"line":1276},[842,4479,2028],{"class":852},[842,4481,4482,4484,4487,4489,4491,4493,4495],{"class":844,"line":1297},[842,4483,2271],{"class":895},[842,4485,4486],{"class":848}," x ",[842,4488,853],{"class":852},[842,4490,4287],{"class":848},[842,4492,90],{"class":852},[842,4494,3878],{"class":848},[842,4496,1637],{"class":852},[842,4498,4499,4502,4504,4506,4508,4510],{"class":844,"line":1341},[842,4500,4501],{"class":848},"        head ",[842,4503,853],{"class":852},[842,4505,4287],{"class":848},[842,4507,90],{"class":852},[842,4509,301],{"class":848},[842,4511,1637],{"class":852},[842,4513,4514,4516,4518,4520,4522,4524,4526],{"class":844,"line":1362},[842,4515,1242],{"class":1031},[842,4517,302],{"class":852},[842,4519,4451],{"class":848},[842,4521,4357],{"class":852},[842,4523,4360],{"class":852},[842,4525,4363],{"class":852},[842,4527,4528],{"class":876}," \u002F\u002F wachtrij is nu leeg\n",[842,4530,4531,4533,4535],{"class":844,"line":1368},[842,4532,4414],{"class":848},[842,4534,853],{"class":852},[842,4536,4537],{"class":852}," null;\n",[842,4539,4540],{"class":844,"line":1389},[842,4541,2028],{"class":852},[842,4543,4544,4546,4548],{"class":844,"line":1394},[842,4545,1208],{"class":1031},[842,4547,3148],{"class":848},[842,4549,1637],{"class":852},[842,4551,4552],{"class":844,"line":1412},[842,4553,1824],{"class":852},[842,4555,4556],{"class":844,"line":1432},[842,4557,2327],{"class":852},[10,4559,4560,4561,4563,4564,4566,4567,4569,4570,4572,4573,4576,4577,4579],{},"Let op de randgevallen: bij de eerste ",[24,4562,3816],{}," moeten ",[24,4565,3646],{}," én ",[24,4568,3766],{}," naar de nieuwe knoop wijzen,\nen als de laatste knoop eruit gaat moet ",[24,4571,3766],{}," weer ",[24,4574,4575],{},"null"," worden. Vergeet je dat, dan wijst ",[24,4578,3766],{},"\nnaar een knoop die niet meer in de lijst zit.",[36,4581,4583],{"id":4582},"toepassing-haakjes-controleren","Toepassing: haakjes controleren",[10,4585,4586,4587,4590,4591,4594,4595,4598],{},"Klopt ",[24,4588,4589],{},"{[()()]}","? En ",[24,4592,4593],{},"([)]","? Elk sluithaakje moet passen bij het ",[19,4596,4597],{},"laatst geopende"," haakje dat nog\nopen staat. \"Laatst geopend, eerst gesloten\": dat is LIFO, dus een stapel.",[10,4600,4601,4602,4604,4605,4607],{},"Het algoritme: openingshaakje → ",[24,4603,3795],{},". Sluithaakje → ",[24,4606,3238],{}," en controleer of het bijbehorende\nopeningshaakje eruit komt. Aan het eind moet de stapel leeg zijn.",[155,4609,4610,4622],{},[158,4611,4612],{},[161,4613,4614,4617,4620],{},[164,4615,4616],{},"Teken",[164,4618,4619],{},"Actie",[164,4621,2742],{},[173,4623,4624,4637,4650,4663,4679,4691,4705,4719],{},[161,4625,4626,4631,4633],{},[178,4627,4628],{},[24,4629,4630],{},"{",[178,4632,3795],{},[178,4634,4635],{},[24,4636,4630],{},[161,4638,4639,4643,4645],{},[178,4640,4641],{},[24,4642,1142],{},[178,4644,3795],{},[178,4646,4647],{},[24,4648,4649],{},"{ [",[161,4651,4652,4656,4658],{},[178,4653,4654],{},[24,4655,916],{},[178,4657,3795],{},[178,4659,4660],{},[24,4661,4662],{},"{ [ (",[161,4664,4665,4669,4675],{},[178,4666,4667],{},[24,4668,1071],{},[178,4670,4671,4672,4674],{},"pop ",[24,4673,916],{},", past",[178,4676,4677],{},[24,4678,4649],{},[161,4680,4681,4685,4687],{},[178,4682,4683],{},[24,4684,916],{},[178,4686,3795],{},[178,4688,4689],{},[24,4690,4662],{},[161,4692,4693,4697,4701],{},[178,4694,4695],{},[24,4696,1071],{},[178,4698,4671,4699,4674],{},[24,4700,916],{},[178,4702,4703],{},[24,4704,4649],{},[161,4706,4707,4711,4715],{},[178,4708,4709],{},[24,4710,968],{},[178,4712,4671,4713,4674],{},[24,4714,1142],{},[178,4716,4717],{},[24,4718,4630],{},[161,4720,4721,4726,4730],{},[178,4722,4723],{},[24,4724,4725],{},"}",[178,4727,4671,4728,4674],{},[24,4729,4630],{},[178,4731,536],{},[10,4733,4734,4735,4737,4738,4740,4741,4743,4744,4746,4747,4749,4750,4753,4754,4756],{},"De stapel is leeg aan het einde: ",[24,4736,4589],{}," klopt. Bij ",[24,4739,4593],{}," gaat het mis bij het derde teken:\n",[24,4742,1071],{}," komt binnen, maar ",[24,4745,3238],{}," levert ",[24,4748,1142],{}," op. Fout. En bij ",[24,4751,4752],{},"(()"," blijft er aan het eind een ",[24,4755,916],{}," op de\nstapel staan: ook fout.",[829,4758,4759,4968],{},[832,4760,4761],{"v-slot:python":56},[48,4762,4764],{"className":836,"code":4763,"language":838,"meta":56,"style":56},"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",[24,4765,4766,4781,4839,4848,4863,4880,4899,4913,4918,4948,4955],{"__ignoreMap":56},[842,4767,4768,4771,4774,4776,4779],{"class":844,"line":845},[842,4769,4770],{"class":895},"def",[842,4772,4773],{"class":912}," haakjes_kloppen",[842,4775,916],{"class":852},[842,4777,4778],{"class":926},"s",[842,4780,930],{"class":852},[842,4782,4783,4786,4788,4790,4792,4794,4796,4799,4801,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,4837],{"class":844,"line":859},[842,4784,4785],{"class":848},"    paren ",[842,4787,853],{"class":852},[842,4789,4363],{"class":852},[842,4791,873],{"class":852},[842,4793,1071],{"class":870},[842,4795,873],{"class":852},[842,4797,4798],{"class":852},":",[842,4800,867],{"class":852},[842,4802,916],{"class":870},[842,4804,873],{"class":852},[842,4806,923],{"class":852},[842,4808,867],{"class":852},[842,4810,968],{"class":870},[842,4812,873],{"class":852},[842,4814,4798],{"class":852},[842,4816,867],{"class":852},[842,4818,1142],{"class":870},[842,4820,873],{"class":852},[842,4822,923],{"class":852},[842,4824,867],{"class":852},[842,4826,4725],{"class":870},[842,4828,873],{"class":852},[842,4830,4798],{"class":852},[842,4832,867],{"class":852},[842,4834,4630],{"class":870},[842,4836,873],{"class":852},[842,4838,2327],{"class":852},[842,4840,4841,4844,4846],{"class":844,"line":880},[842,4842,4843],{"class":848},"    stapel ",[842,4845,853],{"class":852},[842,4847,3128],{"class":852},[842,4849,4850,4853,4856,4858,4861],{"class":844,"line":887},[842,4851,4852],{"class":1031},"    for",[842,4854,4855],{"class":848}," c ",[842,4857,1038],{"class":1031},[842,4859,4860],{"class":848}," s",[842,4862,903],{"class":852},[842,4864,4865,4867,4869,4871,4873,4876,4878],{"class":844,"line":892},[842,4866,1242],{"class":1031},[842,4868,4855],{"class":848},[842,4870,1038],{"class":852},[842,4872,867],{"class":852},[842,4874,4875],{"class":870},"([{",[842,4877,873],{"class":852},[842,4879,903],{"class":852},[842,4881,4882,4885,4887,4889,4891,4894,4896],{"class":844,"line":906},[842,4883,4884],{"class":848},"            stapel",[842,4886,90],{"class":852},[842,4888,3163],{"class":912},[842,4890,916],{"class":852},[842,4892,4893],{"class":912},"c",[842,4895,1071],{"class":852},[842,4897,4898],{"class":876},"  # openingshaakje: push\n",[842,4900,4901,4904,4906,4908,4911],{"class":844,"line":933},[842,4902,4903],{"class":1031},"        elif",[842,4905,4855],{"class":848},[842,4907,1038],{"class":852},[842,4909,4910],{"class":848}," paren",[842,4912,903],{"class":852},[842,4914,4915],{"class":844,"line":950},[842,4916,4917],{"class":876},"            # sluithaakje: de bovenkant moet het juiste openingshaakje zijn\n",[842,4919,4920,4922,4924,4927,4929,4932,4934,4936,4938,4940,4942,4944,4946],{"class":844,"line":976},[842,4921,1133],{"class":1031},[842,4923,3196],{"class":852},[842,4925,4926],{"class":848}," stapel ",[842,4928,1319],{"class":852},[842,4930,4931],{"class":848}," stapel",[842,4933,90],{"class":852},[842,4935,3238],{"class":912},[842,4937,3435],{"class":852},[842,4939,1258],{"class":852},[842,4941,4910],{"class":848},[842,4943,1142],{"class":852},[842,4945,4893],{"class":848},[842,4947,1537],{"class":852},[842,4949,4950,4952],{"class":844,"line":981},[842,4951,1161],{"class":1031},[842,4953,4954],{"class":852}," False\n",[842,4956,4957,4960,4962,4965],{"class":844,"line":1000},[842,4958,4959],{"class":1031},"    return",[842,4961,3196],{"class":852},[842,4963,4964],{"class":848}," stapel  ",[842,4966,4967],{"class":876},"# alles moet gesloten zijn\n",[832,4969,4970],{"v-slot:java":56},[48,4971,4973],{"className":1612,"code":4972,"language":1614,"meta":56,"style":56},"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",[24,4974,4975,4996,5034,5058,5106,5123,5171,5231,5236,5269,5276,5280,5284,5288,5304],{"__ignoreMap":56},[842,4976,4977,4979,4982,4985,4987,4990,4992,4994],{"class":844,"line":845},[842,4978,1646],{"class":895},[842,4980,4981],{"class":895}," boolean",[842,4983,4984],{"class":912}," haakjesKloppen",[842,4986,916],{"class":852},[842,4988,4989],{"class":895},"String",[842,4991,4860],{"class":848},[842,4993,1071],{"class":852},[842,4995,1654],{"class":852},[842,4997,4998,5001,5003,5005,5007,5009,5011,5014,5016,5018,5020,5022,5024,5026,5028,5030,5032],{"class":844,"line":859},[842,4999,5000],{"class":895},"    java",[842,5002,90],{"class":852},[842,5004,1629],{"class":895},[842,5006,90],{"class":852},[842,5008,3618],{"class":895},[842,5010,1920],{"class":852},[842,5012,5013],{"class":895},"Character",[842,5015,3367],{"class":852},[842,5017,4926],{"class":848},[842,5019,853],{"class":852},[842,5021,1789],{"class":1031},[842,5023,1624],{"class":895},[842,5025,90],{"class":852},[842,5027,1629],{"class":895},[842,5029,90],{"class":852},[842,5031,3618],{"class":895},[842,5033,3379],{"class":852},[842,5035,5036,5038,5040,5043,5045,5047,5049,5051,5054,5056],{"class":844,"line":880},[842,5037,4852],{"class":1031},[842,5039,302],{"class":852},[842,5041,5042],{"class":895},"char",[842,5044,4855],{"class":848},[842,5046,4798],{"class":1031},[842,5048,4860],{"class":848},[842,5050,90],{"class":852},[842,5052,5053],{"class":912},"toCharArray",[842,5055,3453],{"class":852},[842,5057,1654],{"class":852},[842,5059,5060,5062,5064,5067,5069,5072,5074,5077,5080,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100,5102,5104],{"class":844,"line":887},[842,5061,1242],{"class":1031},[842,5063,302],{"class":852},[842,5065,5066],{"class":848},"c ",[842,5068,4357],{"class":852},[842,5070,5071],{"class":852}," '",[842,5073,916],{"class":870},[842,5075,5076],{"class":852},"'",[842,5078,5079],{"class":852}," ||",[842,5081,4855],{"class":848},[842,5083,4357],{"class":852},[842,5085,5071],{"class":852},[842,5087,1142],{"class":870},[842,5089,5076],{"class":852},[842,5091,5079],{"class":852},[842,5093,4855],{"class":848},[842,5095,4357],{"class":852},[842,5097,5071],{"class":852},[842,5099,4630],{"class":870},[842,5101,5076],{"class":852},[842,5103,1071],{"class":852},[842,5105,1654],{"class":852},[842,5107,5108,5110,5112,5114,5116,5118,5120],{"class":844,"line":892},[842,5109,4884],{"class":848},[842,5111,90],{"class":852},[842,5113,3795],{"class":912},[842,5115,916],{"class":852},[842,5117,4893],{"class":848},[842,5119,1870],{"class":852},[842,5121,5122],{"class":876}," \u002F\u002F openingshaakje: push\n",[842,5124,5125,5127,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147,5149,5151,5153,5155,5157,5159,5161,5163,5165,5167,5169],{"class":844,"line":906},[842,5126,4388],{"class":852},[842,5128,4391],{"class":1031},[842,5130,1572],{"class":1031},[842,5132,302],{"class":852},[842,5134,5066],{"class":848},[842,5136,4357],{"class":852},[842,5138,5071],{"class":852},[842,5140,1071],{"class":870},[842,5142,5076],{"class":852},[842,5144,5079],{"class":852},[842,5146,4855],{"class":848},[842,5148,4357],{"class":852},[842,5150,5071],{"class":852},[842,5152,968],{"class":870},[842,5154,5076],{"class":852},[842,5156,5079],{"class":852},[842,5158,4855],{"class":848},[842,5160,4357],{"class":852},[842,5162,5071],{"class":852},[842,5164,4725],{"class":870},[842,5166,5076],{"class":852},[842,5168,1071],{"class":852},[842,5170,1654],{"class":852},[842,5172,5173,5176,5179,5181,5183,5185,5187,5189,5191,5194,5196,5198,5200,5203,5205,5207,5209,5211,5213,5215,5217,5219,5221,5223,5225,5227,5229],{"class":844,"line":933},[842,5174,5175],{"class":895},"            char",[842,5177,5178],{"class":848}," verwacht ",[842,5180,853],{"class":852},[842,5182,4855],{"class":848},[842,5184,4357],{"class":852},[842,5186,5071],{"class":852},[842,5188,1071],{"class":870},[842,5190,5076],{"class":852},[842,5192,5193],{"class":1031}," ?",[842,5195,5071],{"class":852},[842,5197,916],{"class":870},[842,5199,5076],{"class":852},[842,5201,5202],{"class":1031}," :",[842,5204,4855],{"class":848},[842,5206,4357],{"class":852},[842,5208,5071],{"class":852},[842,5210,968],{"class":870},[842,5212,5076],{"class":852},[842,5214,5193],{"class":1031},[842,5216,5071],{"class":852},[842,5218,1142],{"class":870},[842,5220,5076],{"class":852},[842,5222,5202],{"class":1031},[842,5224,5071],{"class":852},[842,5226,4630],{"class":870},[842,5228,5076],{"class":852},[842,5230,1637],{"class":852},[842,5232,5233],{"class":844,"line":950},[842,5234,5235],{"class":876},"            \u002F\u002F sluithaakje: de bovenkant moet het juiste openingshaakje zijn\n",[842,5237,5238,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258,5260,5262,5265,5267],{"class":844,"line":976},[842,5239,1133],{"class":1031},[842,5241,302],{"class":852},[842,5243,2651],{"class":848},[842,5245,90],{"class":852},[842,5247,3450],{"class":912},[842,5249,3435],{"class":852},[842,5251,5079],{"class":852},[842,5253,4931],{"class":848},[842,5255,90],{"class":852},[842,5257,3238],{"class":912},[842,5259,3435],{"class":852},[842,5261,1258],{"class":852},[842,5263,5264],{"class":848}," verwacht",[842,5266,1071],{"class":852},[842,5268,1654],{"class":852},[842,5270,5271,5273],{"class":844,"line":981},[842,5272,1161],{"class":1031},[842,5274,5275],{"class":852}," false;\n",[842,5277,5278],{"class":844,"line":1000},[842,5279,2218],{"class":852},[842,5281,5282],{"class":844,"line":1006},[842,5283,2028],{"class":852},[842,5285,5286],{"class":844,"line":1028},[842,5287,1824],{"class":852},[842,5289,5290,5292,5294,5296,5298,5301],{"class":844,"line":1054},[842,5291,4959],{"class":1031},[842,5293,4931],{"class":848},[842,5295,90],{"class":852},[842,5297,3450],{"class":912},[842,5299,5300],{"class":852},"();",[842,5302,5303],{"class":876}," \u002F\u002F alles moet gesloten zijn\n",[842,5305,5306],{"class":844,"line":1083},[842,5307,2327],{"class":852},[36,5309,5311],{"id":5310},"meer-toepassingen","Meer toepassingen",[155,5313,5314,5327],{},[158,5315,5316],{},[161,5317,5318,5321,5324],{},[164,5319,5320],{},"Toepassing",[164,5322,5323],{},"Structuur",[164,5325,5326],{},"Waarom",[173,5328,5329,5339,5351,5362,5372,5386],{},[161,5330,5331,5334,5336],{},[178,5332,5333],{},"Undo in een editor",[178,5335,2651],{},[178,5337,5338],{},"de laatste wijziging maak je als eerste ongedaan",[161,5340,5341,5346,5348],{},[178,5342,5343,5344,1071],{},"Functieaanroepen (",[14,5345,2665],{},[178,5347,2651],{},[178,5349,5350],{},"de laatst aangeroepen functie keert als eerste terug",[161,5352,5353,5356,5359],{},[178,5354,5355],{},"DFS in een graaf",[178,5357,5358],{},"stapel (of recursie)",[178,5360,5361],{},"ga zo diep mogelijk, keer terug naar de laatste splitsing",[161,5363,5364,5367,5369],{},[178,5365,5366],{},"Printerwachtrij",[178,5368,2658],{},[178,5370,5371],{},"opdrachten in volgorde van binnenkomst",[161,5373,5374,5381,5383],{},[178,5375,5376,5377],{},"BFS in een ",[2418,5378,5380],{"href":5379},"\u002Fpracticely\u002Fdsa\u002Fgrafen","graaf",[178,5382,2658],{},[178,5384,5385],{},"knopen per laag verwerken, dichtstbijzijnde eerst",[161,5387,5388,5391,5393],{},[178,5389,5390],{},"Verzoeken op een webserver",[178,5392,2658],{},[178,5394,5395],{},"eerlijk: wie eerst komt, wordt eerst bediend",[10,5397,5398,5399,90],{},"Wil je in plaats van \"eerst binnen\" juist \"kleinste eerst\" verwerken, dan heb je een\nprioriteitswachtrij nodig. Die bouw je met een ",[2418,5400,5402],{"href":5401},"\u002Fpracticely\u002Fdsa\u002Fheaps","heap",[36,5404,2436],{"id":2433},[155,5406,5407,5431],{},[158,5408,5409],{},[161,5410,5411,5413,5416,5419,5428],{},[164,5412,2445],{},[164,5414,5415],{},"Stapel (array)",[164,5417,5418],{},"Stapel (gelinkte lijst)",[164,5420,5421,5422,5425,5426,1071],{},"Wachtrij (",[24,5423,5424],{},"deque","\u002F",[24,5427,3618],{},[164,5429,5430],{},"Wachtrij (gelinkte lijst met tail)",[173,5432,5433,5458,5482,5508],{},[161,5434,5435,5442,5446,5450,5454],{},[178,5436,5437,5439,5440],{},[24,5438,3795],{}," \u002F ",[24,5441,3816],{},[178,5443,5444,3759],{},[24,5445,820],{},[178,5447,5448],{},[24,5449,820],{},[178,5451,5452,3759],{},[24,5453,820],{},[178,5455,5456],{},[24,5457,820],{},[161,5459,5460,5466,5470,5474,5478],{},[178,5461,5462,5439,5464],{},[24,5463,3238],{},[24,5465,3599],{},[178,5467,5468],{},[24,5469,820],{},[178,5471,5472],{},[24,5473,820],{},[178,5475,5476],{},[24,5477,820],{},[178,5479,5480],{},[24,5481,820],{},[161,5483,5484,5492,5496,5500,5504],{},[178,5485,5486,5439,5489],{},[24,5487,5488],{},"peek",[24,5490,5491],{},"front",[178,5493,5494],{},[24,5495,820],{},[178,5497,5498],{},[24,5499,820],{},[178,5501,5502],{},[24,5503,820],{},[178,5505,5506],{},[24,5507,820],{},[161,5509,5510,5513,5517,5521,5525],{},[178,5511,5512],{},"zoeken naar een waarde",[178,5514,5515],{},[24,5516,809],{},[178,5518,5519],{},[24,5520,809],{},[178,5522,5523],{},[24,5524,809],{},[178,5526,5527],{},[24,5528,809],{},[10,5530,5531,5532,5534,5535,5537],{},"\"Gemiddeld\" (",[14,5533,816],{},") 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 ",[24,5536,820],{}," per\noperatie.",[36,5539,2523],{"id":2522},[2525,5541,5542,5558,5570,5588,5597],{},[495,5543,5544,5547,5548,5551,5552,2561,5554,5557],{},[19,5545,5546],{},"De stapel in de verkeerde richting opschrijven."," Wij noteren van onder naar boven: na\n",[24,5549,5550],{},"push(4), push(7)"," is het ",[24,5553,2776],{},[24,5555,5556],{},"7, 4",". Het meest rechtse element gaat er als eerste af.",[495,5559,5560,2890,5563,5565,5566,5569],{},[19,5561,5562],{},"Bij de wachtrij aan de verkeerde kant weghalen.",[24,5564,3599],{}," haalt het element weg dat het\nlangst wacht, dus het meest ",[19,5567,5568],{},"linkse"," in de notatie voor → achter.",[495,5571,5572,5575,5576,2399,5579,2890,5582,5584,5585,5587],{},[19,5573,5574],{},"Een gewone lijst als wachtrij gebruiken"," en denken dat ",[24,5577,5578],{},"pop(0)",[24,5580,5581],{},"remove(0)",[24,5583,820],{}," is. Het\nis ",[24,5586,809],{},", want alles schuift op.",[495,5589,5590,5593,5594,5596],{},[19,5591,5592],{},"Bij haakjes controleren vergeten te kijken of de stapel aan het eind leeg is."," Dan keur je\n",[24,5595,4752],{}," ten onrechte goed.",[495,5598,5599,5604,5605,5607,5608,90],{},[19,5600,5601,5603],{},[24,5602,3766],{}," niet bijwerken"," in een gelinkte wachtrij als de laatste knoop verdwijnt, of ",[24,5606,3646],{},"\nvergeten bij de eerste ",[24,5609,3816],{},[36,5611,2582],{"id":2581},[492,5613,5614,5625,5636,5645,5653],{},[495,5615,5616,5617,5619,5620,120,5622,5624],{},"Stapel = ",[19,5618,2678],{},": ",[24,5621,3795],{},[24,5623,3238],{}," aan dezelfde kant; noteer van onder naar boven.",[495,5626,5627,5628,5619,5630,5632,5633,5635],{},"Wachtrij = ",[19,5629,2876],{},[24,5631,3816],{}," achteraan, ",[24,5634,3599],{}," vooraan; noteer van voor naar achter.",[495,5637,5638,5639,5641,5642,5644],{},"Alle kernoperaties zijn ",[24,5640,820],{},", mits je de juiste implementatie kiest (geen ",[24,5643,5578],{}," op een lijst).",[495,5646,5647,5648,5650,5651,90],{},"Een enkel gelinkte lijst kan vooraan invoegen en verwijderen in ",[24,5649,820],{},", maar indexeren kost ",[24,5652,809],{},[495,5654,5655],{},"Stapel: haakjes, undo, call stack, DFS. Wachtrij: printer, BFS, verzoeken verwerken.",[2614,5657,5658],{},"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":56,"searchDepth":859,"depth":859,"links":5660},[5661,5662,5663,5664,5665,5666,5667,5668,5669,5670],{"id":2671,"depth":859,"text":2672},{"id":2869,"depth":859,"text":2870},{"id":3065,"depth":859,"text":3066},{"id":3622,"depth":859,"text":3623},{"id":3786,"depth":859,"text":3787},{"id":4582,"depth":859,"text":4583},{"id":5310,"depth":859,"text":5311},{"id":2433,"depth":859,"text":2436},{"id":2522,"depth":859,"text":2523},{"id":2581,"depth":859,"text":2582},"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":2643,"description":5671},"practicely-dsa\u002Fstapels-en-wachtrijen","stapels-en-wachtrijen","muo76bpaJ6VLu5iRSvDFur7L2y0vejg1my9MPrCy8rk",{"id":5680,"title":5681,"body":5682,"description":8543,"extension":2632,"icon":8544,"meta":8545,"navigation":883,"order":906,"path":8546,"seo":8547,"stem":8548,"topic":8549,"__hash__":8550},"practicelyDsa\u002Fpracticely-dsa\u002Fheaps.md","Heaps uitgelegd: binaire heap, sift-up, sift-down en priority queues",{"type":7,"value":5683,"toc":8531},[5684,5698,5705,5709,5712,5730,5737,5740,5790,5797,5803,5816,5820,5823,5838,5845,5978,5990,5994,5997,6023,6029,6114,6121,6135,6138,7647,7651,7670,7681,7743,7753,7757,7773,7777,7780,8324,8358,8360,8429,8431,8482,8484,8528],[10,5685,5686,5687,5689,5690,5693,5694,5697],{},"Een hoop (",[14,5688,5402],{},") 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(",[14,5691,5692],{},"priority queue","): de taakplanner van een besturingssysteem, het algoritme van Dijkstra\n(zie ",[2418,5695,5696],{"href":5379},"grafen",") en \"geef me de tien grootste waarden uit een miljoen\".",[10,5699,5700,5701,5704],{},"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 ",[19,5702,5703],{},"min-heap",": het kleinste element staat bovenaan.",[36,5706,5708],{"id":5707},"een-volledige-boom-in-een-array","Een volledige boom in een array",[10,5710,5711],{},"Een binaire heap is een binaire boom met twee eigenschappen:",[2525,5713,5714,5724],{},[495,5715,5716,5719,5720,5723],{},[19,5717,5718],{},"Vorm:"," de boom is volledig (",[14,5721,5722],{},"complete","). Alle niveaus zijn vol, behalve misschien het onderste,\nen dat wordt van links naar rechts gevuld.",[495,5725,5726,5729],{},[19,5727,5728],{},"Heap-eigenschap:"," elke ouder is kleiner dan of gelijk aan zijn kinderen. De wortel is dus\naltijd het minimum.",[10,5731,5732,5733,5736],{},"Let op: tussen broers of tussen verschillende takken geldt ",[19,5734,5735],{},"geen"," volgorde. Een heap is niet\ngesorteerd.",[10,5738,5739],{},"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:",[155,5741,5742,5752],{},[158,5743,5744],{},[161,5745,5746,5749],{},[164,5747,5748],{},"Gezocht",[164,5750,5751],{},"Formule",[173,5753,5754,5766,5778],{},[161,5755,5756,5761],{},[178,5757,5758,5759],{},"ouder van ",[24,5760,1145],{},[178,5762,5763],{},[24,5764,5765],{},"⌊(i - 1) \u002F 2⌋",[161,5767,5768,5773],{},[178,5769,5770,5771],{},"linkerkind van ",[24,5772,1145],{},[178,5774,5775],{},[24,5776,5777],{},"2i + 1",[161,5779,5780,5785],{},[178,5781,5782,5783],{},"rechterkind van ",[24,5784,1145],{},[178,5786,5787],{},[24,5788,5789],{},"2i + 2",[10,5791,5792,5793,5796],{},"Voorbeeld: de array ",[24,5794,5795],{},"[1, 6, 2, 10, 13, 3, 5]"," is deze boom:",[48,5798,5801],{"className":5799,"code":5800,"language":53},[51],"            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",[24,5802,5800],{"__ignoreMap":56},[10,5804,5805,5806,5808,5809,5812,5813,5815],{},"Het kind op index 4 (",[24,5807,578],{},") heeft als ouder ",[24,5810,5811],{},"⌊(4 - 1) \u002F 2⌋ = 1",", en dat is ",[24,5814,196],{},". Klopt.",[36,5817,5819],{"id":5818},"invoegen-met-sift-up","Invoegen met sift-up",[10,5821,5822],{},"Invoegen gaat in twee stappen:",[2525,5824,5825,5831],{},[495,5826,5827,5828,5830],{},"Zet het nieuwe element ",[19,5829,146],{}," de array (de eerste vrije plek in de boom).",[495,5832,5833,5834,5837],{},"Laat het omhoog zakken (",[14,5835,5836],{},"sift-up","): zolang het kleiner is dan zijn ouder, wissel je ze om.",[10,5839,5840,5841,5844],{},"We voegen ",[24,5842,5843],{},"3, 6, 2, 10, 13, 1, 5"," in een lege min-heap in:",[155,5846,5847,5857],{},[158,5848,5849],{},[161,5850,5851,5853,5855],{},[164,5852,2734],{},[164,5854,4619],{},[164,5856,3716],{},[173,5858,5859,5871,5883,5895,5907,5919,5931,5943,5955,5967],{},[161,5860,5861,5863,5866],{},[178,5862,130],{},[178,5864,5865],{},"voeg 3 toe",[178,5867,5868],{},[24,5869,5870],{},"[3]",[161,5872,5873,5875,5878],{},[178,5874,252],{},[178,5876,5877],{},"voeg 6 toe, 6 > 3: klaar",[178,5879,5880],{},[24,5881,5882],{},"[3, 6]",[161,5884,5885,5887,5890],{},[178,5886,259],{},[178,5888,5889],{},"voeg 2 toe",[178,5891,5892],{},[24,5893,5894],{},"[3, 6, 2]",[161,5896,5897,5899,5902],{},[178,5898],{},[178,5900,5901],{},"2 \u003C ouder 3: wissel",[178,5903,5904],{},[24,5905,5906],{},"[2, 6, 3]",[161,5908,5909,5911,5914],{},[178,5910,189],{},[178,5912,5913],{},"voeg 10 toe, 10 > 6: klaar",[178,5915,5916],{},[24,5917,5918],{},"[2, 6, 3, 10]",[161,5920,5921,5923,5926],{},[178,5922,272],{},[178,5924,5925],{},"voeg 13 toe, 13 > 6: klaar",[178,5927,5928],{},[24,5929,5930],{},"[2, 6, 3, 10, 13]",[161,5932,5933,5935,5938],{},[178,5934,196],{},[178,5936,5937],{},"voeg 1 toe (index 5)",[178,5939,5940],{},[24,5941,5942],{},"[2, 6, 3, 10, 13, 1]",[161,5944,5945,5947,5950],{},[178,5946],{},[178,5948,5949],{},"1 \u003C ouder 3 (index 2): wissel",[178,5951,5952],{},[24,5953,5954],{},"[2, 6, 1, 10, 13, 3]",[161,5956,5957,5959,5962],{},[178,5958],{},[178,5960,5961],{},"1 \u003C ouder 2 (index 0): wissel",[178,5963,5964],{},[24,5965,5966],{},"[1, 6, 2, 10, 13, 3]",[161,5968,5969,5971,5974],{},[178,5970,751],{},[178,5972,5973],{},"voeg 5 toe (index 6), 5 > ouder 2: klaar",[178,5975,5976],{},[24,5977,5795],{},[10,5979,5980,5981,5983,5984,5987,5988,90],{},"Elke wissel brengt het element één niveau omhoog. Een boom met ",[24,5982,678],{}," knopen heeft ongeveer ",[24,5985,5986],{},"log n","\nniveaus, dus invoegen kost hoogstens ",[24,5989,2391],{},[36,5991,5993],{"id":5992},"het-minimum-verwijderen-met-sift-down","Het minimum verwijderen met sift-down",[10,5995,5996],{},"Het minimum staat altijd op index 0. Het weghalen gaat zo:",[2525,5998,5999,6002,6009],{},[495,6000,6001],{},"Onthoud de wortel (dat is het antwoord).",[495,6003,6004,6005,6008],{},"Verplaats het ",[19,6006,6007],{},"laatste"," element naar de wortel en maak de array één korter.",[495,6010,6011,6012,6015,6016,6019,6020,90],{},"Laat het omlaag zakken (",[14,6013,6014],{},"sift-down","): wissel met het ",[19,6017,6018],{},"kleinste kind"," zolang dat kind kleiner is.\nZijn beide kinderen gelijk, kies dan het ",[19,6021,6022],{},"linker",[10,6024,6025,6026,6028],{},"Vanaf ",[24,6027,5795],{}," halen we twee keer het minimum weg:",[155,6030,6031,6041],{},[158,6032,6033],{},[161,6034,6035,6037,6039],{},[164,6036,2734],{},[164,6038,4619],{},[164,6040,3716],{},[173,6042,6043,6055,6067,6079,6091,6103],{},[161,6044,6045,6047,6050],{},[178,6046,130],{},[178,6048,6049],{},"verwijder 1, laatste (5) naar de wortel",[178,6051,6052],{},[24,6053,6054],{},"[5, 6, 2, 10, 13, 3]",[161,6056,6057,6059,6062],{},[178,6058],{},[178,6060,6061],{},"kinderen 6 en 2, kleinste is 2 \u003C 5: wissel",[178,6063,6064],{},[24,6065,6066],{},"[2, 6, 5, 10, 13, 3]",[161,6068,6069,6071,6074],{},[178,6070],{},[178,6072,6073],{},"kind (index 5) is 3 \u003C 5: wissel",[178,6075,6076],{},[24,6077,6078],{},"[2, 6, 3, 10, 13, 5]",[161,6080,6081,6083,6086],{},[178,6082,252],{},[178,6084,6085],{},"verwijder 2, laatste (5) naar de wortel",[178,6087,6088],{},[24,6089,6090],{},"[5, 6, 3, 10, 13]",[161,6092,6093,6095,6098],{},[178,6094],{},[178,6096,6097],{},"kinderen 6 en 3, kleinste is 3 \u003C 5: wissel",[178,6099,6100],{},[24,6101,6102],{},"[3, 6, 5, 10, 13]",[161,6104,6105,6107,6110],{},[178,6106],{},[178,6108,6109],{},"5 op index 2 heeft geen kinderen: klaar",[178,6111,6112],{},[24,6113,6102],{},[10,6115,6116,6117,6120],{},"Waarom met het ",[19,6118,6119],{},"kleinste"," kind wisselen? Wissel je met het grootste, dan wordt dat de ouder van het\nkleinere kind, en is de heap-eigenschap direct kapot.",[10,6122,6123,6124,6127,6128,6131,6132,90],{},"Een gelijkspel ziet er zo uit: uit ",[24,6125,6126],{},"[1, 3, 3, 5]"," het minimum halen geeft eerst ",[24,6129,6130],{},"[5, 3, 3]",". Beide\nkinderen zijn 3, dus wissel je met het linker: ",[24,6133,6134],{},"[3, 5, 3]",[36,6136,6137],{"id":24},"Code",[829,6139,6140,6897],{},[832,6141,6142],{"v-slot:python":56},[48,6143,6145],{"className":836,"code":6144,"language":838,"meta":56,"style":56},"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",[24,6146,6147,6156,6168,6180,6184,6200,6221,6244,6260,6283,6315,6320,6373,6383,6387,6400,6419,6438,6450,6472,6487,6494,6498,6515,6534,6541,6576,6585,6628,6638,6643,6682,6691,6704,6708,6760,6769,6773,6777,6788,6830,6845,6862,6880],{"__ignoreMap":56},[842,6148,6149,6151,6154],{"class":844,"line":845},[842,6150,896],{"class":895},[842,6152,6153],{"class":899}," MinHeap",[842,6155,903],{"class":852},[842,6157,6158,6160,6162,6164,6166],{"class":844,"line":859},[842,6159,909],{"class":895},[842,6161,913],{"class":912},[842,6163,916],{"class":852},[842,6165,920],{"class":919},[842,6167,930],{"class":852},[842,6169,6170,6172,6174,6176,6178],{"class":844,"line":880},[842,6171,936],{"class":848},[842,6173,90],{"class":852},[842,6175,2418],{"class":941},[842,6177,944],{"class":852},[842,6179,3128],{"class":852},[842,6181,6182],{"class":844,"line":887},[842,6183,884],{"emptyLinePlaceholder":883},[842,6185,6186,6188,6190,6192,6194,6196,6198],{"class":844,"line":892},[842,6187,909],{"class":895},[842,6189,1226],{"class":912},[842,6191,916],{"class":852},[842,6193,920],{"class":919},[842,6195,923],{"class":852},[842,6197,3148],{"class":926},[842,6199,930],{"class":852},[842,6201,6202,6204,6206,6208,6210,6212,6214,6216,6218],{"class":844,"line":906},[842,6203,936],{"class":848},[842,6205,90],{"class":852},[842,6207,2418],{"class":941},[842,6209,90],{"class":852},[842,6211,3163],{"class":912},[842,6213,916],{"class":852},[842,6215,2695],{"class":912},[842,6217,1071],{"class":852},[842,6219,6220],{"class":876},"  # achteraan\n",[842,6222,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241],{"class":844,"line":933},[842,6224,1415],{"class":848},[842,6226,853],{"class":852},[842,6228,3300],{"class":912},[842,6230,916],{"class":852},[842,6232,920],{"class":848},[842,6234,90],{"class":852},[842,6236,2418],{"class":941},[842,6238,1071],{"class":852},[842,6240,1164],{"class":852},[842,6242,6243],{"class":1167}," 1\n",[842,6245,6246,6249,6251,6253,6255,6257],{"class":844,"line":950},[842,6247,6248],{"class":1031},"        while",[842,6250,1111],{"class":848},[842,6252,3367],{"class":852},[842,6254,1913],{"class":1167},[842,6256,4798],{"class":852},[842,6258,6259],{"class":876},"  # sift-up\n",[842,6261,6262,6265,6267,6269,6271,6273,6275,6277,6280],{"class":844,"line":976},[842,6263,6264],{"class":848},"            ouder ",[842,6266,853],{"class":852},[842,6268,302],{"class":852},[842,6270,2292],{"class":848},[842,6272,240],{"class":852},[842,6274,1709],{"class":1167},[842,6276,1071],{"class":852},[842,6278,6279],{"class":852}," \u002F\u002F",[842,6281,6282],{"class":1167}," 2\n",[842,6284,6285,6287,6289,6291,6293,6295,6297,6299,6302,6304,6306,6308,6310,6313],{"class":844,"line":981},[842,6286,1133],{"class":1031},[842,6288,1020],{"class":848},[842,6290,90],{"class":852},[842,6292,2418],{"class":941},[842,6294,1142],{"class":852},[842,6296,1145],{"class":941},[842,6298,968],{"class":852},[842,6300,6301],{"class":852}," >=",[842,6303,1020],{"class":848},[842,6305,90],{"class":852},[842,6307,2418],{"class":941},[842,6309,1142],{"class":852},[842,6311,6312],{"class":941},"ouder",[842,6314,1537],{"class":852},[842,6316,6317],{"class":844,"line":1000},[842,6318,6319],{"class":1031},"                break\n",[842,6321,6322,6324,6326,6328,6330,6332,6335,6337,6339,6341,6343,6345,6347,6349,6351,6353,6355,6357,6359,6361,6363,6365,6367,6369,6371],{"class":844,"line":1006},[842,6323,1451],{"class":848},[842,6325,90],{"class":852},[842,6327,2418],{"class":941},[842,6329,1142],{"class":852},[842,6331,1145],{"class":941},[842,6333,6334],{"class":852},"],",[842,6336,1020],{"class":848},[842,6338,90],{"class":852},[842,6340,2418],{"class":941},[842,6342,1142],{"class":852},[842,6344,6312],{"class":941},[842,6346,968],{"class":852},[842,6348,944],{"class":852},[842,6350,1020],{"class":848},[842,6352,90],{"class":852},[842,6354,2418],{"class":941},[842,6356,1142],{"class":852},[842,6358,6312],{"class":941},[842,6360,6334],{"class":852},[842,6362,1020],{"class":848},[842,6364,90],{"class":852},[842,6366,2418],{"class":941},[842,6368,1142],{"class":852},[842,6370,1145],{"class":941},[842,6372,3276],{"class":852},[842,6374,6375,6378,6380],{"class":844,"line":1028},[842,6376,6377],{"class":848},"            i ",[842,6379,853],{"class":852},[842,6381,6382],{"class":848}," ouder\n",[842,6384,6385],{"class":844,"line":1054},[842,6386,884],{"emptyLinePlaceholder":883},[842,6388,6389,6391,6394,6396,6398],{"class":844,"line":1083},[842,6390,909],{"class":895},[842,6392,6393],{"class":912}," verwijder_min",[842,6395,916],{"class":852},[842,6397,920],{"class":919},[842,6399,930],{"class":852},[842,6401,6402,6405,6407,6409,6411,6413,6415,6417],{"class":844,"line":1088},[842,6403,6404],{"class":848},"        minimum ",[842,6406,853],{"class":852},[842,6408,1020],{"class":848},[842,6410,90],{"class":852},[842,6412,2418],{"class":941},[842,6414,1142],{"class":852},[842,6416,85],{"class":1167},[842,6418,3276],{"class":852},[842,6420,6421,6424,6426,6428,6430,6432,6434,6436],{"class":844,"line":1106},[842,6422,6423],{"class":848},"        laatste ",[842,6425,853],{"class":852},[842,6427,1020],{"class":848},[842,6429,90],{"class":852},[842,6431,2418],{"class":941},[842,6433,90],{"class":852},[842,6435,3238],{"class":912},[842,6437,3241],{"class":852},[842,6439,6440,6442,6444,6446,6448],{"class":844,"line":1130},[842,6441,1242],{"class":1031},[842,6443,1020],{"class":848},[842,6445,90],{"class":852},[842,6447,2418],{"class":941},[842,6449,903],{"class":852},[842,6451,6452,6454,6456,6458,6460,6462,6464,6466,6469],{"class":844,"line":1158},[842,6453,1451],{"class":848},[842,6455,90],{"class":852},[842,6457,2418],{"class":941},[842,6459,1142],{"class":852},[842,6461,85],{"class":1167},[842,6463,968],{"class":852},[842,6465,944],{"class":852},[842,6467,6468],{"class":848}," laatste  ",[842,6470,6471],{"class":876},"# laatste naar de wortel\n",[842,6473,6474,6476,6478,6481,6483,6485],{"class":844,"line":1173},[842,6475,1451],{"class":848},[842,6477,90],{"class":852},[842,6479,6480],{"class":912},"_sift_down",[842,6482,916],{"class":852},[842,6484,85],{"class":1167},[842,6486,1386],{"class":852},[842,6488,6489,6491],{"class":844,"line":1197},[842,6490,1208],{"class":1031},[842,6492,6493],{"class":848}," minimum\n",[842,6495,6496],{"class":844,"line":1205},[842,6497,884],{"emptyLinePlaceholder":883},[842,6499,6500,6502,6505,6507,6509,6511,6513],{"class":844,"line":1216},[842,6501,909],{"class":895},[842,6503,6504],{"class":912}," _sift_down",[842,6506,916],{"class":852},[842,6508,920],{"class":919},[842,6510,923],{"class":852},[842,6512,2021],{"class":926},[842,6514,930],{"class":852},[842,6516,6517,6520,6522,6524,6526,6528,6530,6532],{"class":844,"line":1221},[842,6518,6519],{"class":848},"        n ",[842,6521,853],{"class":852},[842,6523,3300],{"class":912},[842,6525,916],{"class":852},[842,6527,920],{"class":848},[842,6529,90],{"class":852},[842,6531,2418],{"class":941},[842,6533,1386],{"class":852},[842,6535,6536,6538],{"class":844,"line":1239},[842,6537,6248],{"class":1031},[842,6539,6540],{"class":852}," True:\n",[842,6542,6543,6546,6548,6551,6553,6556,6558,6560,6562,6564,6566,6568,6570,6572,6574],{"class":844,"line":1267},[842,6544,6545],{"class":848},"            links",[842,6547,923],{"class":852},[842,6549,6550],{"class":848}," rechts ",[842,6552,853],{"class":852},[842,6554,6555],{"class":1167}," 2",[842,6557,971],{"class":852},[842,6559,1111],{"class":848},[842,6561,1065],{"class":852},[842,6563,1709],{"class":1167},[842,6565,923],{"class":852},[842,6567,6555],{"class":1167},[842,6569,971],{"class":852},[842,6571,1111],{"class":848},[842,6573,1065],{"class":852},[842,6575,6282],{"class":1167},[842,6577,6578,6581,6583],{"class":844,"line":1276},[842,6579,6580],{"class":848},"            kleinste ",[842,6582,853],{"class":852},[842,6584,1202],{"class":848},[842,6586,6587,6589,6592,6594,6597,6600,6602,6604,6606,6608,6611,6613,6616,6618,6620,6622,6624,6626],{"class":844,"line":1297},[842,6588,1133],{"class":1031},[842,6590,6591],{"class":848}," links ",[842,6593,1920],{"class":852},[842,6595,6596],{"class":848}," n ",[842,6598,6599],{"class":852},"and",[842,6601,1020],{"class":848},[842,6603,90],{"class":852},[842,6605,2418],{"class":941},[842,6607,1142],{"class":852},[842,6609,6610],{"class":941},"links",[842,6612,968],{"class":852},[842,6614,6615],{"class":852}," \u003C",[842,6617,1020],{"class":848},[842,6619,90],{"class":852},[842,6621,2418],{"class":941},[842,6623,1142],{"class":852},[842,6625,6119],{"class":941},[842,6627,1537],{"class":852},[842,6629,6630,6633,6635],{"class":844,"line":1341},[842,6631,6632],{"class":848},"                kleinste ",[842,6634,853],{"class":852},[842,6636,6637],{"class":848}," links\n",[842,6639,6640],{"class":844,"line":1362},[842,6641,6642],{"class":876},"            # strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n",[842,6644,6645,6647,6649,6651,6653,6655,6657,6659,6661,6663,6666,6668,6670,6672,6674,6676,6678,6680],{"class":844,"line":1368},[842,6646,1133],{"class":1031},[842,6648,6550],{"class":848},[842,6650,1920],{"class":852},[842,6652,6596],{"class":848},[842,6654,6599],{"class":852},[842,6656,1020],{"class":848},[842,6658,90],{"class":852},[842,6660,2418],{"class":941},[842,6662,1142],{"class":852},[842,6664,6665],{"class":941},"rechts",[842,6667,968],{"class":852},[842,6669,6615],{"class":852},[842,6671,1020],{"class":848},[842,6673,90],{"class":852},[842,6675,2418],{"class":941},[842,6677,1142],{"class":852},[842,6679,6119],{"class":941},[842,6681,1537],{"class":852},[842,6683,6684,6686,6688],{"class":844,"line":1389},[842,6685,6632],{"class":848},[842,6687,853],{"class":852},[842,6689,6690],{"class":848}," rechts\n",[842,6692,6693,6695,6698,6700,6702],{"class":844,"line":1394},[842,6694,1133],{"class":1031},[842,6696,6697],{"class":848}," kleinste ",[842,6699,4357],{"class":852},[842,6701,2021],{"class":848},[842,6703,903],{"class":852},[842,6705,6706],{"class":844,"line":1412},[842,6707,1365],{"class":1031},[842,6709,6710,6712,6714,6716,6718,6720,6722,6724,6726,6728,6730,6732,6734,6736,6738,6740,6742,6744,6746,6748,6750,6752,6754,6756,6758],{"class":844,"line":1432},[842,6711,1451],{"class":848},[842,6713,90],{"class":852},[842,6715,2418],{"class":941},[842,6717,1142],{"class":852},[842,6719,1145],{"class":941},[842,6721,6334],{"class":852},[842,6723,1020],{"class":848},[842,6725,90],{"class":852},[842,6727,2418],{"class":941},[842,6729,1142],{"class":852},[842,6731,6119],{"class":941},[842,6733,968],{"class":852},[842,6735,944],{"class":852},[842,6737,1020],{"class":848},[842,6739,90],{"class":852},[842,6741,2418],{"class":941},[842,6743,1142],{"class":852},[842,6745,6119],{"class":941},[842,6747,6334],{"class":852},[842,6749,1020],{"class":848},[842,6751,90],{"class":852},[842,6753,2418],{"class":941},[842,6755,1142],{"class":852},[842,6757,1145],{"class":941},[842,6759,3276],{"class":852},[842,6761,6762,6764,6766],{"class":844,"line":1448},[842,6763,6377],{"class":848},[842,6765,853],{"class":852},[842,6767,6768],{"class":848}," kleinste\n",[842,6770,6771],{"class":844,"line":1472},[842,6772,884],{"emptyLinePlaceholder":883},[842,6774,6775],{"class":844,"line":1477},[842,6776,884],{"emptyLinePlaceholder":883},[842,6778,6779,6782,6784,6786],{"class":844,"line":1482},[842,6780,6781],{"class":848},"h ",[842,6783,853],{"class":852},[842,6785,6153],{"class":912},[842,6787,3241],{"class":852},[842,6789,6790,6792,6794,6796,6798,6800,6802,6805,6807,6809,6811,6814,6816,6819,6821,6823,6825,6828],{"class":844,"line":1498},[842,6791,1501],{"class":1031},[842,6793,4486],{"class":848},[842,6795,1038],{"class":1031},[842,6797,962],{"class":852},[842,6799,259],{"class":1167},[842,6801,923],{"class":852},[842,6803,6804],{"class":1167}," 6",[842,6806,923],{"class":852},[842,6808,6555],{"class":1167},[842,6810,923],{"class":852},[842,6812,6813],{"class":1167}," 10",[842,6815,923],{"class":852},[842,6817,6818],{"class":1167}," 13",[842,6820,923],{"class":852},[842,6822,1709],{"class":1167},[842,6824,923],{"class":852},[842,6826,6827],{"class":1167}," 5",[842,6829,1537],{"class":852},[842,6831,6832,6835,6837,6839,6841,6843],{"class":844,"line":1540},[842,6833,6834],{"class":848},"    h",[842,6836,90],{"class":852},[842,6838,1548],{"class":912},[842,6840,916],{"class":852},[842,6842,2695],{"class":912},[842,6844,1386],{"class":852},[842,6846,6847,6849,6851,6853,6855,6857,6859],{"class":844,"line":1557},[842,6848,1560],{"class":912},[842,6850,916],{"class":852},[842,6852,1945],{"class":912},[842,6854,90],{"class":852},[842,6856,2418],{"class":941},[842,6858,1071],{"class":852},[842,6860,6861],{"class":876},"                # [1, 6, 2, 10, 13, 3, 5]\n",[842,6863,6864,6866,6868,6870,6872,6875,6877],{"class":844,"line":1604},[842,6865,1560],{"class":912},[842,6867,916],{"class":852},[842,6869,1945],{"class":912},[842,6871,90],{"class":852},[842,6873,6874],{"class":912},"verwijder_min",[842,6876,3453],{"class":852},[842,6878,6879],{"class":876},"  # 1\n",[842,6881,6882,6884,6886,6888,6890,6892,6894],{"class":844,"line":2324},[842,6883,1560],{"class":912},[842,6885,916],{"class":852},[842,6887,1945],{"class":912},[842,6889,90],{"class":852},[842,6891,2418],{"class":941},[842,6893,1071],{"class":852},[842,6895,6896],{"class":876},"                # [2, 6, 3, 10, 13, 5]\n",[832,6898,6899],{"v-slot:java":56},[48,6900,6902],{"className":1612,"code":6901,"language":1614,"meta":56,"style":56},"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",[24,6903,6904,6920,6937,6941,6951,6976,6980,6996,7014,7037,7056,7082,7120,7136,7146,7150,7154,7158,7169,7190,7221,7238,7261,7272,7276,7285,7289,7293,7313,7329,7338,7382,7433,7438,7488,7507,7522,7532,7536,7540,7544,7570,7591,7619,7637,7642],{"__ignoreMap":56},[842,6905,6906,6908,6910,6912,6914,6916,6918],{"class":844,"line":845},[842,6907,1621],{"class":1167},[842,6909,1624],{"class":895},[842,6911,90],{"class":852},[842,6913,1629],{"class":895},[842,6915,90],{"class":852},[842,6917,3076],{"class":895},[842,6919,1637],{"class":852},[842,6921,6922,6924,6926,6928,6930,6932,6935],{"class":844,"line":859},[842,6923,1621],{"class":1167},[842,6925,1624],{"class":895},[842,6927,90],{"class":852},[842,6929,1629],{"class":895},[842,6931,90],{"class":852},[842,6933,6934],{"class":895},"List",[842,6936,1637],{"class":852},[842,6938,6939],{"class":844,"line":880},[842,6940,884],{"emptyLinePlaceholder":883},[842,6942,6943,6945,6947,6949],{"class":844,"line":887},[842,6944,1646],{"class":895},[842,6946,1649],{"class":895},[842,6948,6153],{"class":899},[842,6950,1654],{"class":852},[842,6952,6953,6956,6959,6961,6963,6965,6968,6970,6972,6974],{"class":844,"line":892},[842,6954,6955],{"class":895},"    final",[842,6957,6958],{"class":895}," List",[842,6960,1920],{"class":852},[842,6962,3364],{"class":895},[842,6964,3367],{"class":852},[842,6966,6967],{"class":848}," a ",[842,6969,853],{"class":852},[842,6971,1789],{"class":1031},[842,6973,3359],{"class":895},[842,6975,3379],{"class":852},[842,6977,6978],{"class":844,"line":906},[842,6979,884],{"emptyLinePlaceholder":883},[842,6981,6982,6984,6986,6988,6990,6992,6994],{"class":844,"line":933},[842,6983,2051],{"class":895},[842,6985,2054],{"class":912},[842,6987,916],{"class":852},[842,6989,1757],{"class":895},[842,6991,3148],{"class":926},[842,6993,1071],{"class":852},[842,6995,1654],{"class":852},[842,6997,6998,7001,7003,7005,7007,7009,7011],{"class":844,"line":950},[842,6999,7000],{"class":848},"        a",[842,7002,90],{"class":852},[842,7004,3409],{"class":912},[842,7006,916],{"class":852},[842,7008,2695],{"class":848},[842,7010,1870],{"class":852},[842,7012,7013],{"class":876}," \u002F\u002F achteraan\n",[842,7015,7016,7018,7020,7022,7025,7027,7029,7031,7033,7035],{"class":844,"line":976},[842,7017,2271],{"class":895},[842,7019,1111],{"class":848},[842,7021,853],{"class":852},[842,7023,7024],{"class":848}," a",[842,7026,90],{"class":852},[842,7028,3499],{"class":912},[842,7030,3435],{"class":852},[842,7032,1164],{"class":852},[842,7034,1709],{"class":1167},[842,7036,1637],{"class":852},[842,7038,7039,7041,7043,7045,7047,7049,7051,7053],{"class":844,"line":981},[842,7040,6248],{"class":1031},[842,7042,302],{"class":852},[842,7044,2292],{"class":848},[842,7046,3367],{"class":852},[842,7048,1913],{"class":1167},[842,7050,1071],{"class":852},[842,7052,4363],{"class":852},[842,7054,7055],{"class":876}," \u002F\u002F sift-up\n",[842,7057,7058,7060,7063,7065,7067,7069,7071,7073,7075,7078,7080],{"class":844,"line":1000},[842,7059,1936],{"class":895},[842,7061,7062],{"class":848}," ouder ",[842,7064,853],{"class":852},[842,7066,302],{"class":852},[842,7068,2292],{"class":848},[842,7070,240],{"class":852},[842,7072,1709],{"class":1167},[842,7074,1071],{"class":852},[842,7076,7077],{"class":852}," \u002F",[842,7079,6555],{"class":1167},[842,7081,1637],{"class":852},[842,7083,7084,7086,7088,7090,7092,7094,7096,7098,7100,7102,7104,7106,7108,7110,7112,7115,7118],{"class":844,"line":1006},[842,7085,1133],{"class":1031},[842,7087,302],{"class":852},[842,7089,2418],{"class":848},[842,7091,90],{"class":852},[842,7093,3536],{"class":912},[842,7095,916],{"class":852},[842,7097,1145],{"class":848},[842,7099,1071],{"class":852},[842,7101,6301],{"class":852},[842,7103,7024],{"class":848},[842,7105,90],{"class":852},[842,7107,3536],{"class":912},[842,7109,916],{"class":852},[842,7111,6312],{"class":848},[842,7113,7114],{"class":852},"))",[842,7116,7117],{"class":1031}," break",[842,7119,1637],{"class":852},[842,7121,7122,7125,7127,7129,7131,7134],{"class":844,"line":1028},[842,7123,7124],{"class":912},"            wissel",[842,7126,916],{"class":852},[842,7128,1145],{"class":848},[842,7130,923],{"class":852},[842,7132,7133],{"class":848}," ouder",[842,7135,1819],{"class":852},[842,7137,7138,7140,7142,7144],{"class":844,"line":1054},[842,7139,6377],{"class":848},[842,7141,853],{"class":852},[842,7143,7133],{"class":848},[842,7145,1637],{"class":852},[842,7147,7148],{"class":844,"line":1083},[842,7149,2028],{"class":852},[842,7151,7152],{"class":844,"line":1088},[842,7153,1824],{"class":852},[842,7155,7156],{"class":844,"line":1106},[842,7157,884],{"emptyLinePlaceholder":883},[842,7159,7160,7162,7165,7167],{"class":844,"line":1130},[842,7161,1886],{"class":895},[842,7163,7164],{"class":912}," verwijderMin",[842,7166,3435],{"class":852},[842,7168,1654],{"class":852},[842,7170,7171,7173,7176,7178,7180,7182,7184,7186,7188],{"class":844,"line":1158},[842,7172,2271],{"class":895},[842,7174,7175],{"class":848}," minimum ",[842,7177,853],{"class":852},[842,7179,7024],{"class":848},[842,7181,90],{"class":852},[842,7183,3536],{"class":912},[842,7185,916],{"class":852},[842,7187,85],{"class":1167},[842,7189,1819],{"class":852},[842,7191,7192,7194,7197,7199,7201,7203,7205,7207,7209,7211,7213,7215,7217,7219],{"class":844,"line":1173},[842,7193,2271],{"class":895},[842,7195,7196],{"class":848}," laatste ",[842,7198,853],{"class":852},[842,7200,7024],{"class":848},[842,7202,90],{"class":852},[842,7204,3490],{"class":912},[842,7206,916],{"class":852},[842,7208,2418],{"class":848},[842,7210,90],{"class":852},[842,7212,3499],{"class":912},[842,7214,3435],{"class":852},[842,7216,1164],{"class":852},[842,7218,1709],{"class":1167},[842,7220,1819],{"class":852},[842,7222,7223,7225,7228,7230,7232,7234,7236],{"class":844,"line":1197},[842,7224,1242],{"class":1031},[842,7226,7227],{"class":852}," (!",[842,7229,2418],{"class":848},[842,7231,90],{"class":852},[842,7233,3450],{"class":912},[842,7235,3453],{"class":852},[842,7237,1654],{"class":852},[842,7239,7240,7243,7245,7247,7249,7251,7253,7256,7258],{"class":844,"line":1205},[842,7241,7242],{"class":848},"            a",[842,7244,90],{"class":852},[842,7246,2372],{"class":912},[842,7248,916],{"class":852},[842,7250,85],{"class":1167},[842,7252,923],{"class":852},[842,7254,7255],{"class":848}," laatste",[842,7257,1870],{"class":852},[842,7259,7260],{"class":876}," \u002F\u002F laatste naar de wortel\n",[842,7262,7263,7266,7268,7270],{"class":844,"line":1216},[842,7264,7265],{"class":912},"            siftDown",[842,7267,916],{"class":852},[842,7269,85],{"class":1167},[842,7271,1819],{"class":852},[842,7273,7274],{"class":844,"line":1221},[842,7275,2028],{"class":852},[842,7277,7278,7280,7283],{"class":844,"line":1239},[842,7279,1208],{"class":1031},[842,7281,7282],{"class":848}," minimum",[842,7284,1637],{"class":852},[842,7286,7287],{"class":844,"line":1267},[842,7288,1824],{"class":852},[842,7290,7291],{"class":844,"line":1276},[842,7292,884],{"emptyLinePlaceholder":883},[842,7294,7295,7297,7300,7303,7305,7307,7309,7311],{"class":844,"line":1297},[842,7296,1659],{"class":895},[842,7298,7299],{"class":895}," void",[842,7301,7302],{"class":912}," siftDown",[842,7304,916],{"class":852},[842,7306,1757],{"class":895},[842,7308,2021],{"class":926},[842,7310,1071],{"class":852},[842,7312,1654],{"class":852},[842,7314,7315,7317,7319,7321,7323,7325,7327],{"class":844,"line":1341},[842,7316,2271],{"class":895},[842,7318,6596],{"class":848},[842,7320,853],{"class":852},[842,7322,7024],{"class":848},[842,7324,90],{"class":852},[842,7326,3499],{"class":912},[842,7328,3585],{"class":852},[842,7330,7331,7333,7336],{"class":844,"line":1362},[842,7332,6248],{"class":1031},[842,7334,7335],{"class":852}," (true)",[842,7337,1654],{"class":852},[842,7339,7340,7342,7344,7346,7348,7350,7352,7354,7356,7358,7360,7362,7364,7366,7368,7370,7372,7374,7376,7378,7380],{"class":844,"line":1368},[842,7341,1936],{"class":895},[842,7343,6591],{"class":848},[842,7345,853],{"class":852},[842,7347,6555],{"class":1167},[842,7349,971],{"class":852},[842,7351,1111],{"class":848},[842,7353,1065],{"class":852},[842,7355,1709],{"class":1167},[842,7357,923],{"class":852},[842,7359,6550],{"class":848},[842,7361,853],{"class":852},[842,7363,6555],{"class":1167},[842,7365,971],{"class":852},[842,7367,1111],{"class":848},[842,7369,1065],{"class":852},[842,7371,6555],{"class":1167},[842,7373,923],{"class":852},[842,7375,6697],{"class":848},[842,7377,853],{"class":852},[842,7379,2021],{"class":848},[842,7381,1637],{"class":852},[842,7383,7384,7386,7388,7391,7393,7395,7398,7400,7402,7404,7406,7408,7410,7412,7414,7416,7418,7420,7422,7424,7426,7428,7431],{"class":844,"line":1389},[842,7385,1133],{"class":1031},[842,7387,302],{"class":852},[842,7389,7390],{"class":848},"links ",[842,7392,1920],{"class":852},[842,7394,6596],{"class":848},[842,7396,7397],{"class":852},"&&",[842,7399,7024],{"class":848},[842,7401,90],{"class":852},[842,7403,3536],{"class":912},[842,7405,916],{"class":852},[842,7407,6610],{"class":848},[842,7409,1071],{"class":852},[842,7411,6615],{"class":852},[842,7413,7024],{"class":848},[842,7415,90],{"class":852},[842,7417,3536],{"class":912},[842,7419,916],{"class":852},[842,7421,6119],{"class":848},[842,7423,7114],{"class":852},[842,7425,6697],{"class":848},[842,7427,853],{"class":852},[842,7429,7430],{"class":848}," links",[842,7432,1637],{"class":852},[842,7434,7435],{"class":844,"line":1394},[842,7436,7437],{"class":876},"            \u002F\u002F strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n",[842,7439,7440,7442,7444,7447,7449,7451,7453,7455,7457,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477,7479,7481,7483,7486],{"class":844,"line":1412},[842,7441,1133],{"class":1031},[842,7443,302],{"class":852},[842,7445,7446],{"class":848},"rechts ",[842,7448,1920],{"class":852},[842,7450,6596],{"class":848},[842,7452,7397],{"class":852},[842,7454,7024],{"class":848},[842,7456,90],{"class":852},[842,7458,3536],{"class":912},[842,7460,916],{"class":852},[842,7462,6665],{"class":848},[842,7464,1071],{"class":852},[842,7466,6615],{"class":852},[842,7468,7024],{"class":848},[842,7470,90],{"class":852},[842,7472,3536],{"class":912},[842,7474,916],{"class":852},[842,7476,6119],{"class":848},[842,7478,7114],{"class":852},[842,7480,6697],{"class":848},[842,7482,853],{"class":852},[842,7484,7485],{"class":848}," rechts",[842,7487,1637],{"class":852},[842,7489,7490,7492,7494,7497,7499,7501,7503,7505],{"class":844,"line":1432},[842,7491,1133],{"class":1031},[842,7493,302],{"class":852},[842,7495,7496],{"class":848},"kleinste ",[842,7498,4357],{"class":852},[842,7500,2021],{"class":848},[842,7502,1071],{"class":852},[842,7504,1987],{"class":1031},[842,7506,1637],{"class":852},[842,7508,7509,7511,7513,7515,7517,7520],{"class":844,"line":1448},[842,7510,7124],{"class":912},[842,7512,916],{"class":852},[842,7514,1145],{"class":848},[842,7516,923],{"class":852},[842,7518,7519],{"class":848}," kleinste",[842,7521,1819],{"class":852},[842,7523,7524,7526,7528,7530],{"class":844,"line":1472},[842,7525,6377],{"class":848},[842,7527,853],{"class":852},[842,7529,7519],{"class":848},[842,7531,1637],{"class":852},[842,7533,7534],{"class":844,"line":1477},[842,7535,2028],{"class":852},[842,7537,7538],{"class":844,"line":1482},[842,7539,1824],{"class":852},[842,7541,7542],{"class":844,"line":1498},[842,7543,884],{"emptyLinePlaceholder":883},[842,7545,7546,7548,7550,7553,7555,7557,7559,7561,7563,7566,7568],{"class":844,"line":1540},[842,7547,1659],{"class":895},[842,7549,7299],{"class":895},[842,7551,7552],{"class":912}," wissel",[842,7554,916],{"class":852},[842,7556,1757],{"class":895},[842,7558,2021],{"class":926},[842,7560,923],{"class":852},[842,7562,1668],{"class":895},[842,7564,7565],{"class":926}," j",[842,7567,1071],{"class":852},[842,7569,1654],{"class":852},[842,7571,7572,7574,7577,7579,7581,7583,7585,7587,7589],{"class":844,"line":1557},[842,7573,2271],{"class":895},[842,7575,7576],{"class":848}," t ",[842,7578,853],{"class":852},[842,7580,7024],{"class":848},[842,7582,90],{"class":852},[842,7584,3536],{"class":912},[842,7586,916],{"class":852},[842,7588,1145],{"class":848},[842,7590,1819],{"class":852},[842,7592,7593,7595,7597,7599,7601,7603,7605,7607,7609,7611,7613,7616],{"class":844,"line":1604},[842,7594,7000],{"class":848},[842,7596,90],{"class":852},[842,7598,2372],{"class":912},[842,7600,916],{"class":852},[842,7602,1145],{"class":848},[842,7604,923],{"class":852},[842,7606,7024],{"class":848},[842,7608,90],{"class":852},[842,7610,3536],{"class":912},[842,7612,916],{"class":852},[842,7614,7615],{"class":848},"j",[842,7617,7618],{"class":852},"));\n",[842,7620,7621,7623,7625,7627,7629,7631,7633,7635],{"class":844,"line":2324},[842,7622,7000],{"class":848},[842,7624,90],{"class":852},[842,7626,2372],{"class":912},[842,7628,916],{"class":852},[842,7630,7615],{"class":848},[842,7632,923],{"class":852},[842,7634,1594],{"class":848},[842,7636,1819],{"class":852},[842,7638,7640],{"class":844,"line":7639},45,[842,7641,1824],{"class":852},[842,7643,7645],{"class":844,"line":7644},46,[842,7646,2327],{"class":852},[36,7648,7650],{"id":7649},"heapify-een-hele-array-in-on","Heapify: een hele array in O(n)",[10,7652,7653,7654,7656,7657,7659,7660,7663,7664,7667,7668,90],{},"Heb je al een array, dan kun je de elementen één voor één invoegen: ",[24,7655,678],{}," keer ",[24,7658,2391],{},". Het kan\nsneller. Bij heapify (",[14,7661,7662],{},"bottom-up heap construction",") roep je sift-down aan op elke knoop die kinderen\nheeft, van achter naar voren: van index ",[24,7665,7666],{},"⌊n\u002F2⌋ - 1"," terug naar ",[24,7669,85],{},[10,7671,7672,7673,7676,7677,7680],{},"Voor ",[24,7674,7675],{},"[9, 4, 7, 1, 8, 2, 6]"," (dus ",[24,7678,7679],{},"n = 7",", start bij index 2):",[155,7682,7683,7694],{},[158,7684,7685],{},[161,7686,7687,7689,7692],{},[164,7688,2734],{},[164,7690,7691],{},"Sift-down op",[164,7693,3716],{},[173,7695,7696,7707,7719,7731],{},[161,7697,7698,7701,7703],{},[178,7699,7700],{},"start",[178,7702],{},[178,7704,7705],{},[24,7706,7675],{},[161,7708,7709,7711,7714],{},[178,7710,130],{},[178,7712,7713],{},"index 2 (7): wissel met kind 2",[178,7715,7716],{},[24,7717,7718],{},"[9, 4, 2, 1, 8, 7, 6]",[161,7720,7721,7723,7726],{},[178,7722,252],{},[178,7724,7725],{},"index 1 (4): wissel met kind 1",[178,7727,7728],{},[24,7729,7730],{},"[9, 1, 2, 4, 8, 7, 6]",[161,7732,7733,7735,7738],{},[178,7734,259],{},[178,7736,7737],{},"index 0 (9): wissel met 1, daarna met 4",[178,7739,7740],{},[24,7741,7742],{},"[1, 4, 2, 9, 8, 7, 6]",[10,7744,7745,7746,7748,7749,7752],{},"Dit is ",[24,7747,809],{}," en niet ",[24,7750,7751],{},"O(n log n)",", omdat de meeste knopen onderaan zitten en nauwelijks hoeven te\nzakken. De helft van de knopen zijn bladeren en zakken helemaal niet.",[36,7754,7756],{"id":7755},"heapsort","Heapsort",[10,7758,7759,7760,7762,7763,7765,7766,7768,7769,90],{},"Heapsort gebruikt dezelfde bouwstenen: maak met heapify een heap en haal dan ",[24,7761,678],{}," 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",[24,7764,7751],{},", ook in het slechtste geval, en gebruikt ",[24,7767,820],{}," extra geheugen, maar is niet stabiel.\nMeer over sorteeralgoritmen lees je bij ",[2418,7770,7772],{"href":7771},"\u002Fpracticely\u002Fdsa\u002Fsorteren","sorteren",[36,7774,7776],{"id":7775},"priority-queues-in-python-en-java","Priority queues in Python en Java",[10,7778,7779],{},"In de praktijk gebruik je de ingebouwde heap.",[829,7781,7782,8037],{},[832,7783,7784],{"v-slot:python":56},[48,7785,7787],{"className":836,"code":7786,"language":838,"meta":56,"style":56},"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",[24,7788,7789,7796,7800,7809,7842,7871,7900,7904,7914,7943,7960,7964,7969,8008,8024],{"__ignoreMap":56},[842,7790,7791,7793],{"class":844,"line":845},[842,7792,1621],{"class":1031},[842,7794,7795],{"class":848}," heapq\n",[842,7797,7798],{"class":844,"line":859},[842,7799,884],{"emptyLinePlaceholder":883},[842,7801,7802,7805,7807],{"class":844,"line":880},[842,7803,7804],{"class":848},"taken ",[842,7806,853],{"class":852},[842,7808,3128],{"class":852},[842,7810,7811,7814,7816,7819,7821,7824,7826,7828,7830,7832,7834,7837,7839],{"class":844,"line":887},[842,7812,7813],{"class":848},"heapq",[842,7815,90],{"class":852},[842,7817,7818],{"class":912},"heappush",[842,7820,916],{"class":852},[842,7822,7823],{"class":912},"taken",[842,7825,923],{"class":852},[842,7827,302],{"class":852},[842,7829,252],{"class":1167},[842,7831,923],{"class":852},[842,7833,867],{"class":852},[842,7835,7836],{"class":870},"mail beantwoorden",[842,7838,873],{"class":852},[842,7840,7841],{"class":852},"))\n",[842,7843,7844,7846,7848,7850,7852,7854,7856,7858,7860,7862,7864,7867,7869],{"class":844,"line":892},[842,7845,7813],{"class":848},[842,7847,90],{"class":852},[842,7849,7818],{"class":912},[842,7851,916],{"class":852},[842,7853,7823],{"class":912},[842,7855,923],{"class":852},[842,7857,302],{"class":852},[842,7859,130],{"class":1167},[842,7861,923],{"class":852},[842,7863,867],{"class":852},[842,7865,7866],{"class":870},"server herstarten",[842,7868,873],{"class":852},[842,7870,7841],{"class":852},[842,7872,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891,7893,7896,7898],{"class":844,"line":906},[842,7874,7813],{"class":848},[842,7876,90],{"class":852},[842,7878,7818],{"class":912},[842,7880,916],{"class":852},[842,7882,7823],{"class":912},[842,7884,923],{"class":852},[842,7886,302],{"class":852},[842,7888,259],{"class":1167},[842,7890,923],{"class":852},[842,7892,867],{"class":852},[842,7894,7895],{"class":870},"koffie halen",[842,7897,873],{"class":852},[842,7899,7841],{"class":852},[842,7901,7902],{"class":844,"line":933},[842,7903,884],{"emptyLinePlaceholder":883},[842,7905,7906,7909,7912],{"class":844,"line":950},[842,7907,7908],{"class":1031},"while",[842,7910,7911],{"class":848}," taken",[842,7913,903],{"class":852},[842,7915,7916,7919,7921,7924,7926,7929,7931,7934,7936,7938,7940],{"class":844,"line":976},[842,7917,7918],{"class":848},"    prioriteit",[842,7920,923],{"class":852},[842,7922,7923],{"class":848}," taak ",[842,7925,853],{"class":852},[842,7927,7928],{"class":848}," heapq",[842,7930,90],{"class":852},[842,7932,7933],{"class":912},"heappop",[842,7935,916],{"class":852},[842,7937,7823],{"class":912},[842,7939,1071],{"class":852},[842,7941,7942],{"class":876},"  # kleinste prioriteit eerst\n",[842,7944,7945,7948,7950,7953,7955,7958],{"class":844,"line":981},[842,7946,7947],{"class":912},"    print",[842,7949,916],{"class":852},[842,7951,7952],{"class":912},"prioriteit",[842,7954,923],{"class":852},[842,7956,7957],{"class":912}," taak",[842,7959,1386],{"class":852},[842,7961,7962],{"class":844,"line":1000},[842,7963,884],{"emptyLinePlaceholder":883},[842,7965,7966],{"class":844,"line":1006},[842,7967,7968],{"class":876},"# een bestaande lijst in O(n) omzetten\n",[842,7970,7971,7974,7976,7978,7980,7982,7985,7987,7990,7992,7994,7996,7998,8000,8002,8004,8006],{"class":844,"line":1028},[842,7972,7973],{"class":848},"getallen ",[842,7975,853],{"class":852},[842,7977,962],{"class":852},[842,7979,756],{"class":1167},[842,7981,923],{"class":852},[842,7983,7984],{"class":1167}," 4",[842,7986,923],{"class":852},[842,7988,7989],{"class":1167}," 7",[842,7991,923],{"class":852},[842,7993,1709],{"class":1167},[842,7995,923],{"class":852},[842,7997,1524],{"class":1167},[842,7999,923],{"class":852},[842,8001,6555],{"class":1167},[842,8003,923],{"class":852},[842,8005,6804],{"class":1167},[842,8007,3276],{"class":852},[842,8009,8010,8012,8014,8017,8019,8022],{"class":844,"line":1054},[842,8011,7813],{"class":848},[842,8013,90],{"class":852},[842,8015,8016],{"class":912},"heapify",[842,8018,916],{"class":852},[842,8020,8021],{"class":912},"getallen",[842,8023,1386],{"class":852},[842,8025,8026,8028,8030,8032,8034],{"class":844,"line":1083},[842,8027,1560],{"class":912},[842,8029,916],{"class":852},[842,8031,8021],{"class":912},[842,8033,1071],{"class":852},[842,8035,8036],{"class":876},"  # [1, 4, 2, 9, 8, 7, 6]\n",[832,8038,8039],{"v-slot:java":56},[48,8040,8042],{"className":1612,"code":8041,"language":1614,"meta":56,"style":56},"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",[24,8043,8044,8061,8065,8078,8083,8146,8176,8203,8230,8234,8251,8273,8316,8320],{"__ignoreMap":56},[842,8045,8046,8048,8050,8052,8054,8056,8059],{"class":844,"line":845},[842,8047,1621],{"class":1167},[842,8049,1624],{"class":895},[842,8051,90],{"class":852},[842,8053,1629],{"class":895},[842,8055,90],{"class":852},[842,8057,8058],{"class":895},"PriorityQueue",[842,8060,1637],{"class":852},[842,8062,8063],{"class":844,"line":859},[842,8064,884],{"emptyLinePlaceholder":883},[842,8066,8067,8069,8071,8074,8076],{"class":844,"line":880},[842,8068,1646],{"class":895},[842,8070,7299],{"class":895},[842,8072,8073],{"class":912}," prioriteiten",[842,8075,3435],{"class":852},[842,8077,1654],{"class":852},[842,8079,8080],{"class":844,"line":887},[842,8081,8082],{"class":876},"    \u002F\u002F min-heap op prioriteit; een int[] is {prioriteit, taaknummer}\n",[842,8084,8085,8088,8090,8092,8095,8098,8100,8102,8105,8108,8110,8112,8115,8117,8120,8122,8124,8127,8129,8131,8133,8135,8137,8139,8141,8143],{"class":844,"line":892},[842,8086,8087],{"class":895},"    PriorityQueue",[842,8089,1920],{"class":852},[842,8091,1757],{"class":895},[842,8093,8094],{"class":852},"[]>",[842,8096,8097],{"class":848}," taken ",[842,8099,853],{"class":852},[842,8101,1789],{"class":1031},[842,8103,8104],{"class":895}," PriorityQueue",[842,8106,8107],{"class":852},"\u003C>((",[842,8109,2695],{"class":848},[842,8111,923],{"class":852},[842,8113,8114],{"class":848}," y",[842,8116,1071],{"class":852},[842,8118,8119],{"class":895}," ->",[842,8121,1675],{"class":848},[842,8123,90],{"class":852},[842,8125,8126],{"class":912},"compare",[842,8128,916],{"class":852},[842,8130,2695],{"class":848},[842,8132,1142],{"class":852},[842,8134,85],{"class":1167},[842,8136,6334],{"class":852},[842,8138,8114],{"class":848},[842,8140,1142],{"class":852},[842,8142,85],{"class":1167},[842,8144,8145],{"class":852},"]));\n",[842,8147,8148,8151,8153,8155,8157,8160,8162,8164,8166,8168,8170,8173],{"class":844,"line":906},[842,8149,8150],{"class":848},"    taken",[842,8152,90],{"class":852},[842,8154,3409],{"class":912},[842,8156,916],{"class":852},[842,8158,8159],{"class":1031},"new",[842,8161,1668],{"class":895},[842,8163,1738],{"class":852},[842,8165,4363],{"class":852},[842,8167,252],{"class":1167},[842,8169,923],{"class":852},[842,8171,8172],{"class":1167}," 101",[842,8174,8175],{"class":852},"});\n",[842,8177,8178,8180,8182,8184,8186,8188,8190,8192,8194,8196,8198,8201],{"class":844,"line":933},[842,8179,8150],{"class":848},[842,8181,90],{"class":852},[842,8183,3409],{"class":912},[842,8185,916],{"class":852},[842,8187,8159],{"class":1031},[842,8189,1668],{"class":895},[842,8191,1738],{"class":852},[842,8193,4363],{"class":852},[842,8195,130],{"class":1167},[842,8197,923],{"class":852},[842,8199,8200],{"class":1167}," 102",[842,8202,8175],{"class":852},[842,8204,8205,8207,8209,8211,8213,8215,8217,8219,8221,8223,8225,8228],{"class":844,"line":950},[842,8206,8150],{"class":848},[842,8208,90],{"class":852},[842,8210,3409],{"class":912},[842,8212,916],{"class":852},[842,8214,8159],{"class":1031},[842,8216,1668],{"class":895},[842,8218,1738],{"class":852},[842,8220,4363],{"class":852},[842,8222,259],{"class":1167},[842,8224,923],{"class":852},[842,8226,8227],{"class":1167}," 103",[842,8229,8175],{"class":852},[842,8231,8232],{"class":844,"line":976},[842,8233,884],{"emptyLinePlaceholder":883},[842,8235,8236,8239,8241,8243,8245,8247,8249],{"class":844,"line":981},[842,8237,8238],{"class":1031},"    while",[842,8240,7227],{"class":852},[842,8242,7823],{"class":848},[842,8244,90],{"class":852},[842,8246,3450],{"class":912},[842,8248,3453],{"class":852},[842,8250,1654],{"class":852},[842,8252,8253,8255,8257,8259,8261,8263,8265,8268,8270],{"class":844,"line":1000},[842,8254,2271],{"class":895},[842,8256,1738],{"class":852},[842,8258,7576],{"class":848},[842,8260,853],{"class":852},[842,8262,7911],{"class":848},[842,8264,90],{"class":852},[842,8266,8267],{"class":912},"poll",[842,8269,5300],{"class":852},[842,8271,8272],{"class":876}," \u002F\u002F kleinste prioriteit eerst\n",[842,8274,8275,8278,8280,8283,8285,8288,8290,8293,8295,8297,8299,8301,8303,8305,8307,8309,8311,8313],{"class":844,"line":1006},[842,8276,8277],{"class":848},"        System",[842,8279,90],{"class":852},[842,8281,8282],{"class":848},"out",[842,8284,90],{"class":852},[842,8286,8287],{"class":912},"println",[842,8289,916],{"class":852},[842,8291,8292],{"class":848},"t",[842,8294,1142],{"class":852},[842,8296,85],{"class":1167},[842,8298,968],{"class":852},[842,8300,1954],{"class":852},[842,8302,867],{"class":852},[842,8304,867],{"class":852},[842,8306,1954],{"class":852},[842,8308,1594],{"class":848},[842,8310,1142],{"class":852},[842,8312,130],{"class":1167},[842,8314,8315],{"class":852},"]);\n",[842,8317,8318],{"class":844,"line":1028},[842,8319,1824],{"class":852},[842,8321,8322],{"class":844,"line":1054},[842,8323,2327],{"class":852},[10,8325,8326,8328,8329,8332,8333,8335,8336,8339,8340,8343,8344,8346,8347,2890,8349,8352,8353,8355,8356,90],{},[24,8327,7813],{}," werkt op een gewone lijst en is altijd een min-heap; voor een max-heap sla je ",[24,8330,8331],{},"-x"," op. Java's\n",[24,8334,8058],{}," is standaard ook een min-heap; met ",[24,8337,8338],{},"Comparator.reverseOrder()"," maak je er een max-heap\nvan. Let op: ",[24,8341,8342],{},"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(",[24,8345,6126],{}," wordt bij ",[24,8348,7813],{},[24,8350,8351],{},"[3, 3, 5]"," in plaats van ",[24,8354,6134],{},"). Traceer op het tentamen dus\nmet de hand, niet met ",[24,8357,7813],{},[36,8359,2436],{"id":2433},[155,8361,8362,8371],{},[158,8363,8364],{},[161,8365,8366,8368],{},[164,8367,2445],{},[164,8369,8370],{},"Tijd",[173,8372,8373,8382,8391,8400,8412,8420],{},[161,8374,8375,8378],{},[178,8376,8377],{},"Minimum bekijken",[178,8379,8380],{},[24,8381,820],{},[161,8383,8384,8387],{},[178,8385,8386],{},"Invoegen (sift-up)",[178,8388,8389],{},[24,8390,2391],{},[161,8392,8393,8396],{},[178,8394,8395],{},"Minimum verwijderen (sift-down)",[178,8397,8398],{},[24,8399,2391],{},[161,8401,8402,8408],{},[178,8403,8404,8405,8407],{},"Heapify van ",[24,8406,678],{}," elementen",[178,8409,8410],{},[24,8411,809],{},[161,8413,8414,8416],{},[178,8415,7756],{},[178,8417,8418],{},[24,8419,7751],{},[161,8421,8422,8425],{},[178,8423,8424],{},"Willekeurig element zoeken",[178,8426,8427],{},[24,8428,809],{},[36,8430,2523],{"id":2522},[2525,8432,8433,8442,8451,8468,8476],{},[495,8434,8435,8438,8439,8441],{},[19,8436,8437],{},"Met het verkeerde kind wisselen."," Bij sift-down wissel je met het ",[19,8440,6119],{}," kind, niet met\nhet linker of met het eerste kind dat kleiner is dan de ouder. Bij gelijke kinderen: het linker.",[495,8443,8444,8447,8448,8450],{},[19,8445,8446],{},"De wortel weghalen en alles opschuiven."," Je verplaatst het ",[19,8449,6007],{}," element naar de wortel;\nde rest van de array blijft staan.",[495,8452,8453,8456,8457,120,8459,8461,8462,120,8465,8467],{},[19,8454,8455],{},"Verkeerde indexformules."," Bij een 0-geïndexeerde array zijn de kinderen ",[24,8458,5777],{},[24,8460,5789],{},".\nDe formules ",[24,8463,8464],{},"2i",[24,8466,5777],{}," horen bij een 1-geïndexeerde heap.",[495,8469,8470,2890,8473,8475],{},[19,8471,8472],{},"Denken dat een heap gesorteerd is.",[24,8474,5795],{}," is een geldige heap, maar geen\ngesorteerde array.",[495,8477,8478,8481],{},[19,8479,8480],{},"Te vroeg stoppen met sift-up of sift-down."," Een element kan meerdere niveaus moeten verhuizen;\ncontroleer na elke wissel opnieuw.",[36,8483,2582],{"id":2581},[492,8485,8486,8493,8507,8512,8520],{},[495,8487,8488,8489,8492],{},"Een binaire min-heap is een volledige boom in een array waarin elke ouder ",[24,8490,8491],{},"≤"," zijn kinderen is.",[495,8494,8495,8496,8498,8499,8502,8503,120,8505,90],{},"Ouder van ",[24,8497,1145],{}," is ",[24,8500,8501],{},"⌊(i - 1)\u002F2⌋",", kinderen zijn ",[24,8504,5777],{},[24,8506,5789],{},[495,8508,8509,8510,90],{},"Invoegen: achteraan toevoegen en sift-up. Minimum verwijderen: laatste naar de wortel en sift-down\nmet het kleinste kind (bij gelijkspel links). Beide ",[24,8511,2391],{},[495,8513,8514,8515,8517,8518,90],{},"Heapify bouwt een heap in ",[24,8516,809],{},"; heapsort sorteert in ",[24,8519,7751],{},[495,8521,8522,8523,3615,8525,8527],{},"Gebruik in de praktijk ",[24,8524,7813],{},[24,8526,8058],{}," (Java) als prioriteitswachtrij.",[2614,8529,8530],{},"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":56,"searchDepth":859,"depth":859,"links":8532},[8533,8534,8535,8536,8537,8538,8539,8540,8541,8542],{"id":5707,"depth":859,"text":5708},{"id":5818,"depth":859,"text":5819},{"id":5992,"depth":859,"text":5993},{"id":24,"depth":859,"text":6137},{"id":7649,"depth":859,"text":7650},{"id":7755,"depth":859,"text":7756},{"id":7775,"depth":859,"text":7776},{"id":2433,"depth":859,"text":2436},{"id":2522,"depth":859,"text":2523},{"id":2581,"depth":859,"text":2582},"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":5681,"description":8543},"practicely-dsa\u002Fheaps","heaps","tehA8rYAMeP8QOZWDsroQdXlbmGCA7-KZP3piHQR8n0",1793084907925]