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