[{"data":1,"prerenderedAt":11109},["ShallowReactive",2],{"dsa-binaire-zoekbomen":3,"dsa-nav-binaire-zoekbomen":3450},{"id":4,"title":5,"body":6,"description":3441,"extension":3442,"icon":3443,"meta":3444,"navigation":548,"order":617,"path":3445,"seo":3446,"stem":3447,"topic":3448,"__hash__":3449},"practicelyDsa\u002Fpracticely-dsa\u002Fbinaire-zoekbomen.md","Binaire zoekbomen uitgelegd: invoegen, verwijderen en de vier doorloopvolgordes",{"type":7,"value":8,"toc":3427},"minimark",[9,24,32,37,45,69,72,76,82,89,211,214,224,227,231,234,272,283,287,290,302,319,325,346,371,377,380,384,391,458,472,508,511,3109,3113,3127,3166,3172,3179,3184,3191,3211,3232,3236,3316,3327,3331,3394,3398,3423],[10,11,12,13,17,18,23],"p",{},"Een binaire zoekboom (",[14,15,16],"em",{},"binary search tree",", BST) combineert het beste van een gesorteerde array en een\ngelinkte lijst. Je kunt erin zoeken zoals bij ",[19,20,22],"a",{"href":21},"\u002Fpracticely\u002Fdsa\u002Fzoeken","binair zoeken",", maar invoegen en\nverwijderen gaan zonder alles op te schuiven.",[10,25,26,27,31],{},"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 ",[28,29,30],"code",{},"TreeMap"," in Java, database-indexen\nen de bestandssystemen op je laptop.",[33,34,36],"h2",{"id":35},"de-bst-eigenschap","De BST-eigenschap",[10,38,39,40,44],{},"Elke knoop heeft een sleutel en hoogstens twee kinderen. Voor ",[41,42,43],"strong",{},"elke"," knoop geldt:",[46,47,48,60],"ul",{},[49,50,51,52,55,56,59],"li",{},"alle sleutels in de ",[41,53,54],{},"linker"," deelboom zijn ",[41,57,58],{},"kleiner",";",[49,61,51,62,55,65,68],{},[41,63,64],{},"rechter",[41,66,67],{},"groter",".",[10,70,71],{},"Dat geldt dus voor de hele deelboom, niet alleen voor de directe kinderen. In de opgaven komen geen\ndubbele sleutels voor.",[33,73,75],{"id":74},"invoegen","Invoegen",[10,77,78,79,68],{},"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 ",[41,80,81],{},"altijd een blad",[10,83,84,85,88],{},"We voegen ",[28,86,87],{},"8, 3, 10, 1, 6, 14, 4, 7, 13"," in deze volgorde in:",[90,91,92,108],"table",{},[93,94,95],"thead",{},[96,97,98,102,105],"tr",{},[99,100,101],"th",{},"Sleutel",[99,103,104],{},"Route",[99,106,107],{},"Wordt",[109,110,111,123,134,145,156,167,178,189,200],"tbody",{},[96,112,113,117,120],{},[114,115,116],"td",{},"8",[114,118,119],{},"lege boom",[114,121,122],{},"wortel",[96,124,125,128,131],{},[114,126,127],{},"3",[114,129,130],{},"8 → links",[114,132,133],{},"linkerkind van 8",[96,135,136,139,142],{},[114,137,138],{},"10",[114,140,141],{},"8 → rechts",[114,143,144],{},"rechterkind van 8",[96,146,147,150,153],{},[114,148,149],{},"1",[114,151,152],{},"8 → links, 3 → links",[114,154,155],{},"linkerkind van 3",[96,157,158,161,164],{},[114,159,160],{},"6",[114,162,163],{},"8 → links, 3 → rechts",[114,165,166],{},"rechterkind van 3",[96,168,169,172,175],{},[114,170,171],{},"14",[114,173,174],{},"8 → rechts, 10 → rechts",[114,176,177],{},"rechterkind van 10",[96,179,180,183,186],{},[114,181,182],{},"4",[114,184,185],{},"8 → links, 3 → rechts, 6 → links",[114,187,188],{},"linkerkind van 6",[96,190,191,194,197],{},[114,192,193],{},"7",[114,195,196],{},"8 → links, 3 → rechts, 6 → rechts",[114,198,199],{},"rechterkind van 6",[96,201,202,205,208],{},[114,203,204],{},"13",[114,206,207],{},"8 → rechts, 10 → rechts, 14 → links",[114,209,210],{},"linkerkind van 14",[10,212,213],{},"Het resultaat, de voorbeeldboom voor de rest van deze pagina:",[215,216,221],"pre",{"className":217,"code":219,"language":220},[218],"language-text","            8\n          \u002F   \\\n         3     10\n        \u002F \\      \\\n       1   6      14\n          \u002F \\    \u002F\n         4   7  13\n","text",[28,222,219],{"__ignoreMap":223},"",[10,225,226],{},"De invoegvolgorde bepaalt de vorm. Dezelfde sleutels in een andere volgorde geven een andere boom.",[33,228,230],{"id":229},"zoeken","Zoeken",[10,232,233],{},"Zoeken volgt dezelfde route als invoegen. Bij elke knoop vergelijk je en ga je links of rechts.",[90,235,236,249],{},[93,237,238],{},[96,239,240,243,246],{},[99,241,242],{},"Zoek",[99,244,245],{},"Bezochte knopen",[99,247,248],{},"Resultaat",[109,250,251,261],{},[96,252,253,255,258],{},[114,254,193],{},[114,256,257],{},"8, 3, 6, 7",[114,259,260],{},"gevonden",[96,262,263,266,269],{},[114,264,265],{},"5",[114,267,268],{},"8, 3, 6, 4",[114,270,271],{},"4 heeft geen rechterkind: niet gevonden",[10,273,274,275,278,279,282],{},"Je bezoekt hoogstens één knoop per niveau. Het aantal stappen is dus de ",[41,276,277],{},"hoogte"," ",[28,280,281],{},"h"," van de boom.",[33,284,286],{"id":285},"verwijderen-drie-gevallen","Verwijderen: drie gevallen",[10,288,289],{},"Zoek eerst de knoop. Wat je daarna doet, hangt af van het aantal kinderen.",[10,291,292,295,296,298,299,301],{},[41,293,294],{},"Geval 1: blad (geen kinderen)."," Haal de knoop gewoon weg. Verwijder ",[28,297,204],{},": het linkerkind van ",[28,300,171],{},"\nwordt leeg, de rest van de boom blijft hetzelfde.",[10,303,304,307,308,310,311,313,314,316,317,68],{},[41,305,306],{},"Geval 2: één kind."," Het kind schuift op naar de plek van de knoop. Verwijder ",[28,309,138],{},": de deelboom\n",[28,312,171],{}," (met ",[28,315,204],{},") wordt het rechterkind van ",[28,318,116],{},[215,320,323],{"className":321,"code":322,"language":220},[218],"            8\n          \u002F   \\\n         3     14\n        \u002F \\    \u002F\n       1   6  13\n          \u002F \\\n         4   7\n",[28,324,322],{"__ignoreMap":223},[10,326,327,330,331,334,335,338,339,342,343,345],{},[41,328,329],{},"Geval 3: twee kinderen."," Zoek de ",[41,332,333],{},"opvolger"," (",[14,336,337],{},"in-order successor","): de ",[41,340,341],{},"kleinste"," sleutel in de\n",[41,344,64],{}," 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,347,348,349,351,352,354,355,358,359,361,362,364,365,367,368,370],{},"Verwijder ",[28,350,127],{}," uit de oorspronkelijke boom. De rechter deelboom van ",[28,353,127],{}," is ",[28,356,357],{},"6, 4, 7","; de kleinste\ndaarin is ",[28,360,182],{},". Dus ",[28,363,182],{}," komt op de plek van ",[28,366,127],{},", en het blad ",[28,369,182],{}," verdwijnt:",[215,372,375],{"className":373,"code":374,"language":220},[218],"            8\n          \u002F   \\\n         4     10\n        \u002F \\      \\\n       1   6      14\n            \\    \u002F\n             7  13\n",[28,376,374],{"__ignoreMap":223},[10,378,379],{},"Waarom werkt dit? De opvolger is groter dan alles links en kleiner dan alles wat rechts overblijft,\ndus de BST-eigenschap blijft intact.",[33,381,383],{"id":382},"de-vier-doorloopvolgordes","De vier doorloopvolgordes",[10,385,386,387,390],{},"Een boom doorlopen (",[14,388,389],{},"traversal",") betekent elke knoop één keer bezoeken. Voor de voorbeeldboom:",[90,392,393,405],{},[93,394,395],{},[96,396,397,400,403],{},[99,398,399],{},"Volgorde",[99,401,402],{},"Regel",[99,404,248],{},[109,406,407,420,433,446],{},[96,408,409,412,415],{},[114,410,411],{},"Preorder",[114,413,414],{},"knoop, links, rechts",[114,416,417],{},[28,418,419],{},"8, 3, 1, 6, 4, 7, 10, 14, 13",[96,421,422,425,428],{},[114,423,424],{},"Inorder",[114,426,427],{},"links, knoop, rechts",[114,429,430],{},[28,431,432],{},"1, 3, 4, 6, 7, 8, 10, 13, 14",[96,434,435,438,441],{},[114,436,437],{},"Postorder",[114,439,440],{},"links, rechts, knoop",[114,442,443],{},[28,444,445],{},"1, 4, 7, 6, 3, 13, 14, 10, 8",[96,447,448,451,454],{},[114,449,450],{},"Level-order",[114,452,453],{},"per niveau, van links naar rechts",[114,455,456],{},[28,457,87],{},[10,459,460,461,463,464,467,468,471],{},"Ezelsbruggetje: ",[14,462,215],{},", ",[14,465,466],{},"in"," en ",[14,469,470],{},"post"," zeggen wanneer de knoop zelf aan de beurt is: vóór, tussen of\nna zijn deelbomen.",[46,473,474,483,488,493],{},[49,475,476,478,479,482],{},[41,477,424],{}," geeft bij een BST altijd de ",[41,480,481],{},"gesorteerde"," volgorde. Handige controle voor je\nantwoord.",[49,484,485,487],{},[41,486,411],{}," 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.",[49,489,490,492],{},[41,491,437],{}," verwerkt kinderen vóór de ouder, bijvoorbeeld bij het opruimen van een boom of het\nuitrekenen van een expressieboom.",[49,494,495,497,498,502,503,507],{},[41,496,450],{}," is breedte-eerst zoeken en gebruikt een wachtrij, net als BFS bij\n",[19,499,501],{"href":500},"\u002Fpracticely\u002Fdsa\u002Fgrafen","grafen"," (zie ook ",[19,504,506],{"href":505},"\u002Fpracticely\u002Fdsa\u002Fstapels-en-wachtrijen","stapels en wachtrijen",").",[33,509,510],{"id":28},"Code",[512,513,514,1772],"code-tabs",{},[515,516,517],"template",{"v-slot:python":223},[215,518,522],{"className":519,"code":520,"language":521,"meta":223,"style":223},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","python",[28,523,524,543,550,555,570,597,615,630,644,649,654,674,689,708,728,757,776,803,812,817,822,840,872,910,917,922,927,945,956,963,980,1007,1024,1051,1059,1080,1092,1110,1122,1139,1158,1172,1190,1221,1228,1233,1238,1253,1313,1318,1323,1337,1392,1397,1402,1416,1472,1477,1482,1496,1533,1543,1561,1582,1612,1626,1643,1651,1656,1661,1671,1730,1751],{"__ignoreMap":223},[525,526,529,533,537,540],"span",{"class":527,"line":528},"line",1,[525,530,532],{"class":531},"s7zQu","from",[525,534,536],{"class":535},"sTEyZ"," collections ",[525,538,539],{"class":531},"import",[525,541,542],{"class":535}," deque\n",[525,544,546],{"class":527,"line":545},2,[525,547,549],{"emptyLinePlaceholder":548},true,"\n",[525,551,553],{"class":527,"line":552},3,[525,554,549],{"emptyLinePlaceholder":548},[525,556,558,562,566],{"class":527,"line":557},4,[525,559,561],{"class":560},"spNyl","class",[525,563,565],{"class":564},"sBMFI"," Knoop",[525,567,569],{"class":568},"sMK4o",":\n",[525,571,573,576,580,583,587,590,594],{"class":527,"line":572},5,[525,574,575],{"class":560},"    def",[525,577,579],{"class":578},"s2Zo4"," __init__",[525,581,582],{"class":568},"(",[525,584,586],{"class":585},"s5tWE","self",[525,588,589],{"class":568},",",[525,591,593],{"class":592},"sHdIc"," sleutel",[525,595,596],{"class":568},"):\n",[525,598,600,603,605,609,612],{"class":527,"line":599},6,[525,601,602],{"class":535},"        self",[525,604,68],{"class":568},[525,606,608],{"class":607},"swJcz","sleutel",[525,610,611],{"class":568}," =",[525,613,614],{"class":535}," sleutel\n",[525,616,618,620,622,625,627],{"class":527,"line":617},7,[525,619,602],{"class":535},[525,621,68],{"class":568},[525,623,624],{"class":607},"links",[525,626,611],{"class":568},[525,628,629],{"class":568}," None\n",[525,631,633,635,637,640,642],{"class":527,"line":632},8,[525,634,602],{"class":535},[525,636,68],{"class":568},[525,638,639],{"class":607},"rechts",[525,641,611],{"class":568},[525,643,629],{"class":568},[525,645,647],{"class":527,"line":646},9,[525,648,549],{"emptyLinePlaceholder":548},[525,650,652],{"class":527,"line":651},10,[525,653,549],{"emptyLinePlaceholder":548},[525,655,657,660,663,665,668,670,672],{"class":527,"line":656},11,[525,658,659],{"class":560},"def",[525,661,662],{"class":578}," voeg_toe",[525,664,582],{"class":568},[525,666,667],{"class":592},"knoop",[525,669,589],{"class":568},[525,671,593],{"class":592},[525,673,596],{"class":568},[525,675,677,680,683,686],{"class":527,"line":676},12,[525,678,679],{"class":531},"    if",[525,681,682],{"class":535}," knoop ",[525,684,685],{"class":568},"is",[525,687,688],{"class":568}," None:\n",[525,690,692,695,697,699,701,704],{"class":527,"line":691},13,[525,693,694],{"class":531},"        return",[525,696,565],{"class":578},[525,698,582],{"class":568},[525,700,608],{"class":578},[525,702,703],{"class":568},")",[525,705,707],{"class":706},"sHwdD","  # nieuwe sleutel wordt een blad\n",[525,709,711,713,716,719,722,724,726],{"class":527,"line":710},14,[525,712,679],{"class":531},[525,714,715],{"class":535}," sleutel ",[525,717,718],{"class":568},"\u003C",[525,720,721],{"class":535}," knoop",[525,723,68],{"class":568},[525,725,608],{"class":607},[525,727,569],{"class":568},[525,729,731,734,736,738,740,742,744,746,748,750,752,754],{"class":527,"line":730},15,[525,732,733],{"class":535},"        knoop",[525,735,68],{"class":568},[525,737,624],{"class":607},[525,739,611],{"class":568},[525,741,662],{"class":578},[525,743,582],{"class":568},[525,745,667],{"class":578},[525,747,68],{"class":568},[525,749,624],{"class":607},[525,751,589],{"class":568},[525,753,593],{"class":578},[525,755,756],{"class":568},")\n",[525,758,760,763,765,768,770,772,774],{"class":527,"line":759},16,[525,761,762],{"class":531},"    elif",[525,764,715],{"class":535},[525,766,767],{"class":568},">",[525,769,721],{"class":535},[525,771,68],{"class":568},[525,773,608],{"class":607},[525,775,569],{"class":568},[525,777,779,781,783,785,787,789,791,793,795,797,799,801],{"class":527,"line":778},17,[525,780,733],{"class":535},[525,782,68],{"class":568},[525,784,639],{"class":607},[525,786,611],{"class":568},[525,788,662],{"class":578},[525,790,582],{"class":568},[525,792,667],{"class":578},[525,794,68],{"class":568},[525,796,639],{"class":607},[525,798,589],{"class":568},[525,800,593],{"class":578},[525,802,756],{"class":568},[525,804,806,809],{"class":527,"line":805},18,[525,807,808],{"class":531},"    return",[525,810,811],{"class":535}," knoop\n",[525,813,815],{"class":527,"line":814},19,[525,816,549],{"emptyLinePlaceholder":548},[525,818,820],{"class":527,"line":819},20,[525,821,549],{"emptyLinePlaceholder":548},[525,823,825,827,830,832,834,836,838],{"class":527,"line":824},21,[525,826,659],{"class":560},[525,828,829],{"class":578}," zoek",[525,831,582],{"class":568},[525,833,667],{"class":592},[525,835,589],{"class":568},[525,837,593],{"class":592},[525,839,596],{"class":568},[525,841,843,846,848,850,853,856,859,861,863,865,868,870],{"class":527,"line":842},22,[525,844,845],{"class":531},"    while",[525,847,682],{"class":535},[525,849,685],{"class":568},[525,851,852],{"class":568}," not",[525,854,855],{"class":568}," None",[525,857,858],{"class":568}," and",[525,860,721],{"class":535},[525,862,68],{"class":568},[525,864,608],{"class":607},[525,866,867],{"class":568}," !=",[525,869,593],{"class":535},[525,871,569],{"class":568},[525,873,875,878,881,883,885,887,890,892,894,896,898,900,903,905,907],{"class":527,"line":874},23,[525,876,877],{"class":535},"        knoop ",[525,879,880],{"class":568},"=",[525,882,721],{"class":535},[525,884,68],{"class":568},[525,886,624],{"class":607},[525,888,889],{"class":531}," if",[525,891,715],{"class":535},[525,893,718],{"class":568},[525,895,721],{"class":535},[525,897,68],{"class":568},[525,899,608],{"class":607},[525,901,902],{"class":531}," else",[525,904,721],{"class":535},[525,906,68],{"class":568},[525,908,909],{"class":607},"rechts\n",[525,911,913,915],{"class":527,"line":912},24,[525,914,808],{"class":531},[525,916,811],{"class":535},[525,918,920],{"class":527,"line":919},25,[525,921,549],{"emptyLinePlaceholder":548},[525,923,925],{"class":527,"line":924},26,[525,926,549],{"emptyLinePlaceholder":548},[525,928,930,932,935,937,939,941,943],{"class":527,"line":929},27,[525,931,659],{"class":560},[525,933,934],{"class":578}," verwijder",[525,936,582],{"class":568},[525,938,667],{"class":592},[525,940,589],{"class":568},[525,942,593],{"class":592},[525,944,596],{"class":568},[525,946,948,950,952,954],{"class":527,"line":947},28,[525,949,679],{"class":531},[525,951,682],{"class":535},[525,953,685],{"class":568},[525,955,688],{"class":568},[525,957,959,961],{"class":527,"line":958},29,[525,960,694],{"class":531},[525,962,629],{"class":568},[525,964,966,968,970,972,974,976,978],{"class":527,"line":965},30,[525,967,679],{"class":531},[525,969,715],{"class":535},[525,971,718],{"class":568},[525,973,721],{"class":535},[525,975,68],{"class":568},[525,977,608],{"class":607},[525,979,569],{"class":568},[525,981,983,985,987,989,991,993,995,997,999,1001,1003,1005],{"class":527,"line":982},31,[525,984,733],{"class":535},[525,986,68],{"class":568},[525,988,624],{"class":607},[525,990,611],{"class":568},[525,992,934],{"class":578},[525,994,582],{"class":568},[525,996,667],{"class":578},[525,998,68],{"class":568},[525,1000,624],{"class":607},[525,1002,589],{"class":568},[525,1004,593],{"class":578},[525,1006,756],{"class":568},[525,1008,1010,1012,1014,1016,1018,1020,1022],{"class":527,"line":1009},32,[525,1011,762],{"class":531},[525,1013,715],{"class":535},[525,1015,767],{"class":568},[525,1017,721],{"class":535},[525,1019,68],{"class":568},[525,1021,608],{"class":607},[525,1023,569],{"class":568},[525,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049],{"class":527,"line":1026},33,[525,1028,733],{"class":535},[525,1030,68],{"class":568},[525,1032,639],{"class":607},[525,1034,611],{"class":568},[525,1036,934],{"class":578},[525,1038,582],{"class":568},[525,1040,667],{"class":578},[525,1042,68],{"class":568},[525,1044,639],{"class":607},[525,1046,589],{"class":568},[525,1048,593],{"class":578},[525,1050,756],{"class":568},[525,1052,1054,1057],{"class":527,"line":1053},34,[525,1055,1056],{"class":531},"    else",[525,1058,569],{"class":568},[525,1060,1062,1065,1067,1069,1071,1074,1077],{"class":527,"line":1061},35,[525,1063,1064],{"class":531},"        if",[525,1066,721],{"class":535},[525,1068,68],{"class":568},[525,1070,624],{"class":607},[525,1072,1073],{"class":568}," is",[525,1075,1076],{"class":568}," None:",[525,1078,1079],{"class":706},"  # blad of alleen rechterkind\n",[525,1081,1083,1086,1088,1090],{"class":527,"line":1082},36,[525,1084,1085],{"class":531},"            return",[525,1087,721],{"class":535},[525,1089,68],{"class":568},[525,1091,909],{"class":607},[525,1093,1095,1097,1099,1101,1103,1105,1107],{"class":527,"line":1094},37,[525,1096,1064],{"class":531},[525,1098,721],{"class":535},[525,1100,68],{"class":568},[525,1102,639],{"class":607},[525,1104,1073],{"class":568},[525,1106,1076],{"class":568},[525,1108,1109],{"class":706},"  # alleen linkerkind\n",[525,1111,1113,1115,1117,1119],{"class":527,"line":1112},38,[525,1114,1085],{"class":531},[525,1116,721],{"class":535},[525,1118,68],{"class":568},[525,1120,1121],{"class":607},"links\n",[525,1123,1125,1128,1130,1132,1134,1136],{"class":527,"line":1124},39,[525,1126,1127],{"class":535},"        opvolger ",[525,1129,880],{"class":568},[525,1131,721],{"class":535},[525,1133,68],{"class":568},[525,1135,639],{"class":607},[525,1137,1138],{"class":706},"  # twee kinderen: kleinste in rechter deelboom\n",[525,1140,1142,1145,1148,1150,1152,1154,1156],{"class":527,"line":1141},40,[525,1143,1144],{"class":531},"        while",[525,1146,1147],{"class":535}," opvolger",[525,1149,68],{"class":568},[525,1151,624],{"class":607},[525,1153,1073],{"class":568},[525,1155,852],{"class":568},[525,1157,688],{"class":568},[525,1159,1161,1164,1166,1168,1170],{"class":527,"line":1160},41,[525,1162,1163],{"class":535},"            opvolger ",[525,1165,880],{"class":568},[525,1167,1147],{"class":535},[525,1169,68],{"class":568},[525,1171,1121],{"class":607},[525,1173,1175,1177,1179,1181,1183,1185,1187],{"class":527,"line":1174},42,[525,1176,733],{"class":535},[525,1178,68],{"class":568},[525,1180,608],{"class":607},[525,1182,611],{"class":568},[525,1184,1147],{"class":535},[525,1186,68],{"class":568},[525,1188,1189],{"class":607},"sleutel\n",[525,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219],{"class":527,"line":1192},43,[525,1194,733],{"class":535},[525,1196,68],{"class":568},[525,1198,639],{"class":607},[525,1200,611],{"class":568},[525,1202,934],{"class":578},[525,1204,582],{"class":568},[525,1206,667],{"class":578},[525,1208,68],{"class":568},[525,1210,639],{"class":607},[525,1212,589],{"class":568},[525,1214,1147],{"class":578},[525,1216,68],{"class":568},[525,1218,608],{"class":607},[525,1220,756],{"class":568},[525,1222,1224,1226],{"class":527,"line":1223},44,[525,1225,808],{"class":531},[525,1227,811],{"class":535},[525,1229,1231],{"class":527,"line":1230},45,[525,1232,549],{"emptyLinePlaceholder":548},[525,1234,1236],{"class":527,"line":1235},46,[525,1237,549],{"emptyLinePlaceholder":548},[525,1239,1241,1243,1246,1248,1251],{"class":527,"line":1240},47,[525,1242,659],{"class":560},[525,1244,1245],{"class":578}," preorder",[525,1247,582],{"class":568},[525,1249,1250],{"class":592},"k",[525,1252,596],{"class":568},[525,1254,1256,1258,1261,1263,1266,1268,1270,1272,1275,1277,1279,1281,1284,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311],{"class":527,"line":1255},48,[525,1257,808],{"class":531},[525,1259,1260],{"class":568}," []",[525,1262,889],{"class":531},[525,1264,1265],{"class":535}," k ",[525,1267,685],{"class":568},[525,1269,855],{"class":568},[525,1271,902],{"class":531},[525,1273,1274],{"class":568}," [",[525,1276,1250],{"class":535},[525,1278,68],{"class":568},[525,1280,608],{"class":607},[525,1282,1283],{"class":568},"]",[525,1285,1286],{"class":568}," +",[525,1288,1245],{"class":578},[525,1290,582],{"class":568},[525,1292,1250],{"class":578},[525,1294,68],{"class":568},[525,1296,624],{"class":607},[525,1298,703],{"class":568},[525,1300,1286],{"class":568},[525,1302,1245],{"class":578},[525,1304,582],{"class":568},[525,1306,1250],{"class":578},[525,1308,68],{"class":568},[525,1310,639],{"class":607},[525,1312,756],{"class":568},[525,1314,1316],{"class":527,"line":1315},49,[525,1317,549],{"emptyLinePlaceholder":548},[525,1319,1321],{"class":527,"line":1320},50,[525,1322,549],{"emptyLinePlaceholder":548},[525,1324,1326,1328,1331,1333,1335],{"class":527,"line":1325},51,[525,1327,659],{"class":560},[525,1329,1330],{"class":578}," inorder",[525,1332,582],{"class":568},[525,1334,1250],{"class":592},[525,1336,596],{"class":568},[525,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390],{"class":527,"line":1339},52,[525,1341,808],{"class":531},[525,1343,1260],{"class":568},[525,1345,889],{"class":531},[525,1347,1265],{"class":535},[525,1349,685],{"class":568},[525,1351,855],{"class":568},[525,1353,902],{"class":531},[525,1355,1330],{"class":578},[525,1357,582],{"class":568},[525,1359,1250],{"class":578},[525,1361,68],{"class":568},[525,1363,624],{"class":607},[525,1365,703],{"class":568},[525,1367,1286],{"class":568},[525,1369,1274],{"class":568},[525,1371,1250],{"class":535},[525,1373,68],{"class":568},[525,1375,608],{"class":607},[525,1377,1283],{"class":568},[525,1379,1286],{"class":568},[525,1381,1330],{"class":578},[525,1383,582],{"class":568},[525,1385,1250],{"class":578},[525,1387,68],{"class":568},[525,1389,639],{"class":607},[525,1391,756],{"class":568},[525,1393,1395],{"class":527,"line":1394},53,[525,1396,549],{"emptyLinePlaceholder":548},[525,1398,1400],{"class":527,"line":1399},54,[525,1401,549],{"emptyLinePlaceholder":548},[525,1403,1405,1407,1410,1412,1414],{"class":527,"line":1404},55,[525,1406,659],{"class":560},[525,1408,1409],{"class":578}," postorder",[525,1411,582],{"class":568},[525,1413,1250],{"class":592},[525,1415,596],{"class":568},[525,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469],{"class":527,"line":1418},56,[525,1420,808],{"class":531},[525,1422,1260],{"class":568},[525,1424,889],{"class":531},[525,1426,1265],{"class":535},[525,1428,685],{"class":568},[525,1430,855],{"class":568},[525,1432,902],{"class":531},[525,1434,1409],{"class":578},[525,1436,582],{"class":568},[525,1438,1250],{"class":578},[525,1440,68],{"class":568},[525,1442,624],{"class":607},[525,1444,703],{"class":568},[525,1446,1286],{"class":568},[525,1448,1409],{"class":578},[525,1450,582],{"class":568},[525,1452,1250],{"class":578},[525,1454,68],{"class":568},[525,1456,639],{"class":607},[525,1458,703],{"class":568},[525,1460,1286],{"class":568},[525,1462,1274],{"class":568},[525,1464,1250],{"class":535},[525,1466,68],{"class":568},[525,1468,608],{"class":607},[525,1470,1471],{"class":568},"]\n",[525,1473,1475],{"class":527,"line":1474},57,[525,1476,549],{"emptyLinePlaceholder":548},[525,1478,1480],{"class":527,"line":1479},58,[525,1481,549],{"emptyLinePlaceholder":548},[525,1483,1485,1487,1490,1492,1494],{"class":527,"line":1484},59,[525,1486,659],{"class":560},[525,1488,1489],{"class":578}," level_order",[525,1491,582],{"class":568},[525,1493,122],{"class":592},[525,1495,596],{"class":568},[525,1497,1499,1502,1504,1507,1509,1512,1515,1518,1520,1522,1524,1527,1530],{"class":527,"line":1498},60,[525,1500,1501],{"class":535},"    resultaat",[525,1503,589],{"class":568},[525,1505,1506],{"class":535}," wachtrij ",[525,1508,880],{"class":568},[525,1510,1511],{"class":568}," [],",[525,1513,1514],{"class":578}," deque",[525,1516,1517],{"class":568},"([",[525,1519,122],{"class":578},[525,1521,1283],{"class":568},[525,1523,889],{"class":531},[525,1525,1526],{"class":578}," wortel ",[525,1528,1529],{"class":531},"else",[525,1531,1532],{"class":568}," [])\n",[525,1534,1536,1538,1541],{"class":527,"line":1535},61,[525,1537,845],{"class":531},[525,1539,1540],{"class":535}," wachtrij",[525,1542,569],{"class":568},[525,1544,1546,1549,1551,1553,1555,1558],{"class":527,"line":1545},62,[525,1547,1548],{"class":535},"        k ",[525,1550,880],{"class":568},[525,1552,1540],{"class":535},[525,1554,68],{"class":568},[525,1556,1557],{"class":578},"popleft",[525,1559,1560],{"class":568},"()\n",[525,1562,1564,1567,1569,1572,1574,1576,1578,1580],{"class":527,"line":1563},63,[525,1565,1566],{"class":535},"        resultaat",[525,1568,68],{"class":568},[525,1570,1571],{"class":578},"append",[525,1573,582],{"class":568},[525,1575,1250],{"class":578},[525,1577,68],{"class":568},[525,1579,608],{"class":607},[525,1581,756],{"class":568},[525,1583,1585,1588,1591,1593,1595,1597,1599,1601,1603,1606,1608,1610],{"class":527,"line":1584},64,[525,1586,1587],{"class":531},"        for",[525,1589,1590],{"class":535}," kind ",[525,1592,466],{"class":531},[525,1594,334],{"class":568},[525,1596,1250],{"class":535},[525,1598,68],{"class":568},[525,1600,624],{"class":607},[525,1602,589],{"class":568},[525,1604,1605],{"class":535}," k",[525,1607,68],{"class":568},[525,1609,639],{"class":607},[525,1611,596],{"class":568},[525,1613,1615,1618,1620,1622,1624],{"class":527,"line":1614},65,[525,1616,1617],{"class":531},"            if",[525,1619,1590],{"class":535},[525,1621,685],{"class":568},[525,1623,852],{"class":568},[525,1625,688],{"class":568},[525,1627,1629,1632,1634,1636,1638,1641],{"class":527,"line":1628},66,[525,1630,1631],{"class":535},"                wachtrij",[525,1633,68],{"class":568},[525,1635,1571],{"class":578},[525,1637,582],{"class":568},[525,1639,1640],{"class":578},"kind",[525,1642,756],{"class":568},[525,1644,1646,1648],{"class":527,"line":1645},67,[525,1647,808],{"class":531},[525,1649,1650],{"class":535}," resultaat\n",[525,1652,1654],{"class":527,"line":1653},68,[525,1655,549],{"emptyLinePlaceholder":548},[525,1657,1659],{"class":527,"line":1658},69,[525,1660,549],{"emptyLinePlaceholder":548},[525,1662,1664,1667,1669],{"class":527,"line":1663},70,[525,1665,1666],{"class":535},"wortel ",[525,1668,880],{"class":568},[525,1670,629],{"class":568},[525,1672,1674,1677,1680,1682,1684,1687,1689,1692,1694,1697,1699,1702,1704,1707,1709,1712,1714,1717,1719,1722,1724,1727],{"class":527,"line":1673},71,[525,1675,1676],{"class":531},"for",[525,1678,1679],{"class":535}," s ",[525,1681,466],{"class":531},[525,1683,1274],{"class":568},[525,1685,116],{"class":1686},"sbssI",[525,1688,589],{"class":568},[525,1690,1691],{"class":1686}," 3",[525,1693,589],{"class":568},[525,1695,1696],{"class":1686}," 10",[525,1698,589],{"class":568},[525,1700,1701],{"class":1686}," 1",[525,1703,589],{"class":568},[525,1705,1706],{"class":1686}," 6",[525,1708,589],{"class":568},[525,1710,1711],{"class":1686}," 14",[525,1713,589],{"class":568},[525,1715,1716],{"class":1686}," 4",[525,1718,589],{"class":568},[525,1720,1721],{"class":1686}," 7",[525,1723,589],{"class":568},[525,1725,1726],{"class":1686}," 13",[525,1728,1729],{"class":568},"]:\n",[525,1731,1733,1736,1738,1740,1742,1744,1746,1749],{"class":527,"line":1732},72,[525,1734,1735],{"class":535},"    wortel ",[525,1737,880],{"class":568},[525,1739,662],{"class":578},[525,1741,582],{"class":568},[525,1743,122],{"class":578},[525,1745,589],{"class":568},[525,1747,1748],{"class":578}," s",[525,1750,756],{"class":568},[525,1752,1754,1757,1759,1762,1764,1766,1769],{"class":527,"line":1753},73,[525,1755,1756],{"class":578},"print",[525,1758,582],{"class":568},[525,1760,1761],{"class":578},"inorder",[525,1763,582],{"class":568},[525,1765,122],{"class":578},[525,1767,1768],{"class":568},"))",[525,1770,1771],{"class":706},"  # [1, 3, 4, 6, 7, 8, 10, 13, 14]\n",[515,1773,1774],{"v-slot:java":223},[215,1775,1779],{"className":1776,"code":1777,"language":1778,"meta":223,"style":223},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","java",[28,1780,1781,1801,1818,1835,1852,1856,1869,1878,1893,1897,1912,1926,1931,1936,1940,1967,2000,2044,2089,2097,2101,2105,2129,2160,2196,2200,2208,2212,2216,2240,2257,2277,2303,2328,2354,2362,2391,2420,2441,2469,2487,2517,2521,2529,2533,2537,2571,2588,2608,2627,2645,2649,2653,2683,2699,2718,2736,2754,2758,2762,2792,2808,2827,2845,2863,2867,2871,2897,2921,2943,2967,2987,3005,3023,3056,3089,3094,3104],{"__ignoreMap":223},[525,1782,1783,1785,1788,1790,1793,1795,1798],{"class":527,"line":528},[525,1784,539],{"class":1686},[525,1786,1787],{"class":560}," java",[525,1789,68],{"class":568},[525,1791,1792],{"class":560},"util",[525,1794,68],{"class":568},[525,1796,1797],{"class":560},"ArrayDeque",[525,1799,1800],{"class":568},";\n",[525,1802,1803,1805,1807,1809,1811,1813,1816],{"class":527,"line":545},[525,1804,539],{"class":1686},[525,1806,1787],{"class":560},[525,1808,68],{"class":568},[525,1810,1792],{"class":560},[525,1812,68],{"class":568},[525,1814,1815],{"class":560},"ArrayList",[525,1817,1800],{"class":568},[525,1819,1820,1822,1824,1826,1828,1830,1833],{"class":527,"line":552},[525,1821,539],{"class":1686},[525,1823,1787],{"class":560},[525,1825,68],{"class":568},[525,1827,1792],{"class":560},[525,1829,68],{"class":568},[525,1831,1832],{"class":560},"Deque",[525,1834,1800],{"class":568},[525,1836,1837,1839,1841,1843,1845,1847,1850],{"class":527,"line":557},[525,1838,539],{"class":1686},[525,1840,1787],{"class":560},[525,1842,68],{"class":568},[525,1844,1792],{"class":560},[525,1846,68],{"class":568},[525,1848,1849],{"class":560},"List",[525,1851,1800],{"class":568},[525,1853,1854],{"class":527,"line":572},[525,1855,549],{"emptyLinePlaceholder":548},[525,1857,1858,1861,1864,1866],{"class":527,"line":599},[525,1859,1860],{"class":560},"static",[525,1862,1863],{"class":560}," class",[525,1865,565],{"class":564},[525,1867,1868],{"class":568}," {\n",[525,1870,1871,1874,1876],{"class":527,"line":617},[525,1872,1873],{"class":560},"    int",[525,1875,593],{"class":535},[525,1877,1800],{"class":568},[525,1879,1880,1883,1886,1888,1891],{"class":527,"line":632},[525,1881,1882],{"class":560},"    Knoop",[525,1884,1885],{"class":535}," links",[525,1887,589],{"class":568},[525,1889,1890],{"class":535}," rechts",[525,1892,1800],{"class":568},[525,1894,1895],{"class":527,"line":646},[525,1896,549],{"emptyLinePlaceholder":548},[525,1898,1899,1901,1903,1906,1908,1910],{"class":527,"line":651},[525,1900,1882],{"class":578},[525,1902,582],{"class":568},[525,1904,1905],{"class":560},"int",[525,1907,593],{"class":592},[525,1909,703],{"class":568},[525,1911,1868],{"class":568},[525,1913,1914,1917,1920,1922,1924],{"class":527,"line":656},[525,1915,1916],{"class":568},"        this.",[525,1918,1919],{"class":535},"sleutel ",[525,1921,880],{"class":568},[525,1923,593],{"class":535},[525,1925,1800],{"class":568},[525,1927,1928],{"class":527,"line":676},[525,1929,1930],{"class":568},"    }\n",[525,1932,1933],{"class":527,"line":691},[525,1934,1935],{"class":568},"}\n",[525,1937,1938],{"class":527,"line":710},[525,1939,549],{"emptyLinePlaceholder":548},[525,1941,1942,1944,1946,1949,1951,1954,1956,1958,1961,1963,1965],{"class":527,"line":730},[525,1943,1860],{"class":560},[525,1945,565],{"class":560},[525,1947,1948],{"class":578}," voegToe",[525,1950,582],{"class":568},[525,1952,1953],{"class":560},"Knoop",[525,1955,721],{"class":535},[525,1957,589],{"class":568},[525,1959,1960],{"class":560}," int",[525,1962,593],{"class":535},[525,1964,703],{"class":568},[525,1966,1868],{"class":568},[525,1968,1969,1971,1973,1976,1979,1982,1985,1988,1990,1992,1994,1997],{"class":527,"line":759},[525,1970,679],{"class":531},[525,1972,334],{"class":568},[525,1974,1975],{"class":535},"knoop ",[525,1977,1978],{"class":568},"==",[525,1980,1981],{"class":568}," null)",[525,1983,1984],{"class":531}," return",[525,1986,1987],{"class":531}," new",[525,1989,565],{"class":578},[525,1991,582],{"class":568},[525,1993,608],{"class":535},[525,1995,1996],{"class":568},");",[525,1998,1999],{"class":706}," \u002F\u002F nieuwe sleutel wordt een blad\n",[525,2001,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2025,2027,2029,2031,2033,2035,2037,2039,2041],{"class":527,"line":778},[525,2003,679],{"class":531},[525,2005,334],{"class":568},[525,2007,1919],{"class":535},[525,2009,718],{"class":568},[525,2011,721],{"class":535},[525,2013,68],{"class":568},[525,2015,608],{"class":535},[525,2017,703],{"class":568},[525,2019,721],{"class":535},[525,2021,68],{"class":568},[525,2023,2024],{"class":535},"links ",[525,2026,880],{"class":568},[525,2028,1948],{"class":578},[525,2030,582],{"class":568},[525,2032,667],{"class":535},[525,2034,68],{"class":568},[525,2036,624],{"class":535},[525,2038,589],{"class":568},[525,2040,593],{"class":535},[525,2042,2043],{"class":568},");\n",[525,2045,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2071,2073,2075,2077,2079,2081,2083,2085,2087],{"class":527,"line":805},[525,2047,1056],{"class":531},[525,2049,889],{"class":531},[525,2051,334],{"class":568},[525,2053,1919],{"class":535},[525,2055,767],{"class":568},[525,2057,721],{"class":535},[525,2059,68],{"class":568},[525,2061,608],{"class":535},[525,2063,703],{"class":568},[525,2065,721],{"class":535},[525,2067,68],{"class":568},[525,2069,2070],{"class":535},"rechts ",[525,2072,880],{"class":568},[525,2074,1948],{"class":578},[525,2076,582],{"class":568},[525,2078,667],{"class":535},[525,2080,68],{"class":568},[525,2082,639],{"class":535},[525,2084,589],{"class":568},[525,2086,593],{"class":535},[525,2088,2043],{"class":568},[525,2090,2091,2093,2095],{"class":527,"line":814},[525,2092,808],{"class":531},[525,2094,721],{"class":535},[525,2096,1800],{"class":568},[525,2098,2099],{"class":527,"line":819},[525,2100,1935],{"class":568},[525,2102,2103],{"class":527,"line":824},[525,2104,549],{"emptyLinePlaceholder":548},[525,2106,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127],{"class":527,"line":842},[525,2108,1860],{"class":560},[525,2110,565],{"class":560},[525,2112,829],{"class":578},[525,2114,582],{"class":568},[525,2116,1953],{"class":560},[525,2118,721],{"class":535},[525,2120,589],{"class":568},[525,2122,1960],{"class":560},[525,2124,593],{"class":535},[525,2126,703],{"class":568},[525,2128,1868],{"class":568},[525,2130,2131,2133,2135,2137,2140,2143,2146,2148,2150,2152,2154,2156,2158],{"class":527,"line":874},[525,2132,845],{"class":531},[525,2134,334],{"class":568},[525,2136,1975],{"class":535},[525,2138,2139],{"class":568},"!=",[525,2141,2142],{"class":568}," null",[525,2144,2145],{"class":568}," &&",[525,2147,721],{"class":535},[525,2149,68],{"class":568},[525,2151,1919],{"class":535},[525,2153,2139],{"class":568},[525,2155,593],{"class":535},[525,2157,703],{"class":568},[525,2159,1868],{"class":568},[525,2161,2162,2164,2166,2168,2170,2172,2174,2176,2179,2181,2183,2185,2188,2190,2192,2194],{"class":527,"line":912},[525,2163,877],{"class":535},[525,2165,880],{"class":568},[525,2167,715],{"class":535},[525,2169,718],{"class":568},[525,2171,721],{"class":535},[525,2173,68],{"class":568},[525,2175,1919],{"class":535},[525,2177,2178],{"class":531},"?",[525,2180,721],{"class":535},[525,2182,68],{"class":568},[525,2184,2024],{"class":535},[525,2186,2187],{"class":531},":",[525,2189,721],{"class":535},[525,2191,68],{"class":568},[525,2193,639],{"class":535},[525,2195,1800],{"class":568},[525,2197,2198],{"class":527,"line":919},[525,2199,1930],{"class":568},[525,2201,2202,2204,2206],{"class":527,"line":924},[525,2203,808],{"class":531},[525,2205,721],{"class":535},[525,2207,1800],{"class":568},[525,2209,2210],{"class":527,"line":929},[525,2211,1935],{"class":568},[525,2213,2214],{"class":527,"line":947},[525,2215,549],{"emptyLinePlaceholder":548},[525,2217,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238],{"class":527,"line":958},[525,2219,1860],{"class":560},[525,2221,565],{"class":560},[525,2223,934],{"class":578},[525,2225,582],{"class":568},[525,2227,1953],{"class":560},[525,2229,721],{"class":535},[525,2231,589],{"class":568},[525,2233,1960],{"class":560},[525,2235,593],{"class":535},[525,2237,703],{"class":568},[525,2239,1868],{"class":568},[525,2241,2242,2244,2246,2248,2250,2252,2254],{"class":527,"line":965},[525,2243,679],{"class":531},[525,2245,334],{"class":568},[525,2247,1975],{"class":535},[525,2249,1978],{"class":568},[525,2251,1981],{"class":568},[525,2253,1984],{"class":531},[525,2255,2256],{"class":568}," null;\n",[525,2258,2259,2261,2263,2265,2267,2269,2271,2273,2275],{"class":527,"line":982},[525,2260,679],{"class":531},[525,2262,334],{"class":568},[525,2264,1919],{"class":535},[525,2266,718],{"class":568},[525,2268,721],{"class":535},[525,2270,68],{"class":568},[525,2272,608],{"class":535},[525,2274,703],{"class":568},[525,2276,1868],{"class":568},[525,2278,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301],{"class":527,"line":1009},[525,2280,733],{"class":535},[525,2282,68],{"class":568},[525,2284,2024],{"class":535},[525,2286,880],{"class":568},[525,2288,934],{"class":578},[525,2290,582],{"class":568},[525,2292,667],{"class":535},[525,2294,68],{"class":568},[525,2296,624],{"class":535},[525,2298,589],{"class":568},[525,2300,593],{"class":535},[525,2302,2043],{"class":568},[525,2304,2305,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326],{"class":527,"line":1026},[525,2306,2307],{"class":568},"    }",[525,2309,902],{"class":531},[525,2311,889],{"class":531},[525,2313,334],{"class":568},[525,2315,1919],{"class":535},[525,2317,767],{"class":568},[525,2319,721],{"class":535},[525,2321,68],{"class":568},[525,2323,608],{"class":535},[525,2325,703],{"class":568},[525,2327,1868],{"class":568},[525,2329,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352],{"class":527,"line":1053},[525,2331,733],{"class":535},[525,2333,68],{"class":568},[525,2335,2070],{"class":535},[525,2337,880],{"class":568},[525,2339,934],{"class":578},[525,2341,582],{"class":568},[525,2343,667],{"class":535},[525,2345,68],{"class":568},[525,2347,639],{"class":535},[525,2349,589],{"class":568},[525,2351,593],{"class":535},[525,2353,2043],{"class":568},[525,2355,2356,2358,2360],{"class":527,"line":1061},[525,2357,2307],{"class":568},[525,2359,902],{"class":531},[525,2361,1868],{"class":568},[525,2363,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388],{"class":527,"line":1082},[525,2365,1064],{"class":531},[525,2367,334],{"class":568},[525,2369,667],{"class":535},[525,2371,68],{"class":568},[525,2373,2024],{"class":535},[525,2375,1978],{"class":568},[525,2377,1981],{"class":568},[525,2379,1984],{"class":531},[525,2381,721],{"class":535},[525,2383,68],{"class":568},[525,2385,639],{"class":535},[525,2387,59],{"class":568},[525,2389,2390],{"class":706}," \u002F\u002F blad of alleen rechterkind\n",[525,2392,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417],{"class":527,"line":1094},[525,2394,1064],{"class":531},[525,2396,334],{"class":568},[525,2398,667],{"class":535},[525,2400,68],{"class":568},[525,2402,2070],{"class":535},[525,2404,1978],{"class":568},[525,2406,1981],{"class":568},[525,2408,1984],{"class":531},[525,2410,721],{"class":535},[525,2412,68],{"class":568},[525,2414,624],{"class":535},[525,2416,59],{"class":568},[525,2418,2419],{"class":706}," \u002F\u002F alleen linkerkind\n",[525,2421,2422,2425,2428,2430,2432,2434,2436,2438],{"class":527,"line":1112},[525,2423,2424],{"class":560},"        Knoop",[525,2426,2427],{"class":535}," opvolger ",[525,2429,880],{"class":568},[525,2431,721],{"class":535},[525,2433,68],{"class":568},[525,2435,639],{"class":535},[525,2437,59],{"class":568},[525,2439,2440],{"class":706}," \u002F\u002F twee kinderen: kleinste in rechter deelboom\n",[525,2442,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467],{"class":527,"line":1124},[525,2444,1144],{"class":531},[525,2446,334],{"class":568},[525,2448,333],{"class":535},[525,2450,68],{"class":568},[525,2452,2024],{"class":535},[525,2454,2139],{"class":568},[525,2456,1981],{"class":568},[525,2458,2427],{"class":535},[525,2460,880],{"class":568},[525,2462,1147],{"class":535},[525,2464,68],{"class":568},[525,2466,624],{"class":535},[525,2468,1800],{"class":568},[525,2470,2471,2473,2475,2477,2479,2481,2483,2485],{"class":527,"line":1141},[525,2472,733],{"class":535},[525,2474,68],{"class":568},[525,2476,1919],{"class":535},[525,2478,880],{"class":568},[525,2480,1147],{"class":535},[525,2482,68],{"class":568},[525,2484,608],{"class":535},[525,2486,1800],{"class":568},[525,2488,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515],{"class":527,"line":1160},[525,2490,733],{"class":535},[525,2492,68],{"class":568},[525,2494,2070],{"class":535},[525,2496,880],{"class":568},[525,2498,934],{"class":578},[525,2500,582],{"class":568},[525,2502,667],{"class":535},[525,2504,68],{"class":568},[525,2506,639],{"class":535},[525,2508,589],{"class":568},[525,2510,1147],{"class":535},[525,2512,68],{"class":568},[525,2514,608],{"class":535},[525,2516,2043],{"class":568},[525,2518,2519],{"class":527,"line":1174},[525,2520,1930],{"class":568},[525,2522,2523,2525,2527],{"class":527,"line":1192},[525,2524,808],{"class":531},[525,2526,721],{"class":535},[525,2528,1800],{"class":568},[525,2530,2531],{"class":527,"line":1223},[525,2532,1935],{"class":568},[525,2534,2535],{"class":527,"line":1230},[525,2536,549],{"emptyLinePlaceholder":548},[525,2538,2539,2541,2544,2546,2548,2550,2552,2554,2557,2559,2562,2564,2567,2569],{"class":527,"line":1235},[525,2540,1860],{"class":560},[525,2542,2543],{"class":560}," void",[525,2545,1245],{"class":578},[525,2547,582],{"class":568},[525,2549,1953],{"class":560},[525,2551,1605],{"class":535},[525,2553,589],{"class":568},[525,2555,2556],{"class":560}," List",[525,2558,718],{"class":568},[525,2560,2561],{"class":535},"Integer",[525,2563,767],{"class":568},[525,2565,2566],{"class":535}," uit",[525,2568,703],{"class":568},[525,2570,1868],{"class":568},[525,2572,2573,2575,2577,2580,2582,2584,2586],{"class":527,"line":1240},[525,2574,679],{"class":531},[525,2576,334],{"class":568},[525,2578,2579],{"class":535},"k ",[525,2581,1978],{"class":568},[525,2583,1981],{"class":568},[525,2585,1984],{"class":531},[525,2587,1800],{"class":568},[525,2589,2590,2593,2595,2598,2600,2602,2604,2606],{"class":527,"line":1255},[525,2591,2592],{"class":535},"    uit",[525,2594,68],{"class":568},[525,2596,2597],{"class":578},"add",[525,2599,582],{"class":568},[525,2601,1250],{"class":535},[525,2603,68],{"class":568},[525,2605,608],{"class":535},[525,2607,2043],{"class":568},[525,2609,2610,2613,2615,2617,2619,2621,2623,2625],{"class":527,"line":1315},[525,2611,2612],{"class":578},"    preorder",[525,2614,582],{"class":568},[525,2616,1250],{"class":535},[525,2618,68],{"class":568},[525,2620,624],{"class":535},[525,2622,589],{"class":568},[525,2624,2566],{"class":535},[525,2626,2043],{"class":568},[525,2628,2629,2631,2633,2635,2637,2639,2641,2643],{"class":527,"line":1320},[525,2630,2612],{"class":578},[525,2632,582],{"class":568},[525,2634,1250],{"class":535},[525,2636,68],{"class":568},[525,2638,639],{"class":535},[525,2640,589],{"class":568},[525,2642,2566],{"class":535},[525,2644,2043],{"class":568},[525,2646,2647],{"class":527,"line":1325},[525,2648,1935],{"class":568},[525,2650,2651],{"class":527,"line":1339},[525,2652,549],{"emptyLinePlaceholder":548},[525,2654,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681],{"class":527,"line":1394},[525,2656,1860],{"class":560},[525,2658,2543],{"class":560},[525,2660,1330],{"class":578},[525,2662,582],{"class":568},[525,2664,1953],{"class":560},[525,2666,1605],{"class":535},[525,2668,589],{"class":568},[525,2670,2556],{"class":560},[525,2672,718],{"class":568},[525,2674,2561],{"class":535},[525,2676,767],{"class":568},[525,2678,2566],{"class":535},[525,2680,703],{"class":568},[525,2682,1868],{"class":568},[525,2684,2685,2687,2689,2691,2693,2695,2697],{"class":527,"line":1399},[525,2686,679],{"class":531},[525,2688,334],{"class":568},[525,2690,2579],{"class":535},[525,2692,1978],{"class":568},[525,2694,1981],{"class":568},[525,2696,1984],{"class":531},[525,2698,1800],{"class":568},[525,2700,2701,2704,2706,2708,2710,2712,2714,2716],{"class":527,"line":1404},[525,2702,2703],{"class":578},"    inorder",[525,2705,582],{"class":568},[525,2707,1250],{"class":535},[525,2709,68],{"class":568},[525,2711,624],{"class":535},[525,2713,589],{"class":568},[525,2715,2566],{"class":535},[525,2717,2043],{"class":568},[525,2719,2720,2722,2724,2726,2728,2730,2732,2734],{"class":527,"line":1418},[525,2721,2592],{"class":535},[525,2723,68],{"class":568},[525,2725,2597],{"class":578},[525,2727,582],{"class":568},[525,2729,1250],{"class":535},[525,2731,68],{"class":568},[525,2733,608],{"class":535},[525,2735,2043],{"class":568},[525,2737,2738,2740,2742,2744,2746,2748,2750,2752],{"class":527,"line":1474},[525,2739,2703],{"class":578},[525,2741,582],{"class":568},[525,2743,1250],{"class":535},[525,2745,68],{"class":568},[525,2747,639],{"class":535},[525,2749,589],{"class":568},[525,2751,2566],{"class":535},[525,2753,2043],{"class":568},[525,2755,2756],{"class":527,"line":1479},[525,2757,1935],{"class":568},[525,2759,2760],{"class":527,"line":1484},[525,2761,549],{"emptyLinePlaceholder":548},[525,2763,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790],{"class":527,"line":1498},[525,2765,1860],{"class":560},[525,2767,2543],{"class":560},[525,2769,1409],{"class":578},[525,2771,582],{"class":568},[525,2773,1953],{"class":560},[525,2775,1605],{"class":535},[525,2777,589],{"class":568},[525,2779,2556],{"class":560},[525,2781,718],{"class":568},[525,2783,2561],{"class":535},[525,2785,767],{"class":568},[525,2787,2566],{"class":535},[525,2789,703],{"class":568},[525,2791,1868],{"class":568},[525,2793,2794,2796,2798,2800,2802,2804,2806],{"class":527,"line":1535},[525,2795,679],{"class":531},[525,2797,334],{"class":568},[525,2799,2579],{"class":535},[525,2801,1978],{"class":568},[525,2803,1981],{"class":568},[525,2805,1984],{"class":531},[525,2807,1800],{"class":568},[525,2809,2810,2813,2815,2817,2819,2821,2823,2825],{"class":527,"line":1545},[525,2811,2812],{"class":578},"    postorder",[525,2814,582],{"class":568},[525,2816,1250],{"class":535},[525,2818,68],{"class":568},[525,2820,624],{"class":535},[525,2822,589],{"class":568},[525,2824,2566],{"class":535},[525,2826,2043],{"class":568},[525,2828,2829,2831,2833,2835,2837,2839,2841,2843],{"class":527,"line":1563},[525,2830,2812],{"class":578},[525,2832,582],{"class":568},[525,2834,1250],{"class":535},[525,2836,68],{"class":568},[525,2838,639],{"class":535},[525,2840,589],{"class":568},[525,2842,2566],{"class":535},[525,2844,2043],{"class":568},[525,2846,2847,2849,2851,2853,2855,2857,2859,2861],{"class":527,"line":1584},[525,2848,2592],{"class":535},[525,2850,68],{"class":568},[525,2852,2597],{"class":578},[525,2854,582],{"class":568},[525,2856,1250],{"class":535},[525,2858,68],{"class":568},[525,2860,608],{"class":535},[525,2862,2043],{"class":568},[525,2864,2865],{"class":527,"line":1614},[525,2866,1935],{"class":568},[525,2868,2869],{"class":527,"line":1628},[525,2870,549],{"emptyLinePlaceholder":548},[525,2872,2873,2875,2877,2879,2881,2883,2886,2888,2890,2893,2895],{"class":527,"line":1645},[525,2874,1860],{"class":560},[525,2876,2556],{"class":560},[525,2878,718],{"class":568},[525,2880,2561],{"class":535},[525,2882,767],{"class":568},[525,2884,2885],{"class":578}," levelOrder",[525,2887,582],{"class":568},[525,2889,1953],{"class":560},[525,2891,2892],{"class":535}," wortel",[525,2894,703],{"class":568},[525,2896,1868],{"class":568},[525,2898,2899,2902,2904,2906,2908,2911,2913,2915,2918],{"class":527,"line":1653},[525,2900,2901],{"class":560},"    List",[525,2903,718],{"class":568},[525,2905,2561],{"class":560},[525,2907,767],{"class":568},[525,2909,2910],{"class":535}," resultaat ",[525,2912,880],{"class":568},[525,2914,1987],{"class":531},[525,2916,2917],{"class":560}," ArrayList",[525,2919,2920],{"class":568},"\u003C>();\n",[525,2922,2923,2926,2928,2930,2932,2934,2936,2938,2941],{"class":527,"line":1658},[525,2924,2925],{"class":560},"    Deque",[525,2927,718],{"class":568},[525,2929,1953],{"class":560},[525,2931,767],{"class":568},[525,2933,1506],{"class":535},[525,2935,880],{"class":568},[525,2937,1987],{"class":531},[525,2939,2940],{"class":560}," ArrayDeque",[525,2942,2920],{"class":568},[525,2944,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965],{"class":527,"line":1663},[525,2946,679],{"class":531},[525,2948,334],{"class":568},[525,2950,1666],{"class":535},[525,2952,2139],{"class":568},[525,2954,1981],{"class":568},[525,2956,1540],{"class":535},[525,2958,68],{"class":568},[525,2960,2597],{"class":578},[525,2962,582],{"class":568},[525,2964,122],{"class":535},[525,2966,2043],{"class":568},[525,2968,2969,2971,2974,2977,2979,2982,2985],{"class":527,"line":1673},[525,2970,845],{"class":531},[525,2972,2973],{"class":568}," (!",[525,2975,2976],{"class":535},"wachtrij",[525,2978,68],{"class":568},[525,2980,2981],{"class":578},"isEmpty",[525,2983,2984],{"class":568},"())",[525,2986,1868],{"class":568},[525,2988,2989,2991,2993,2995,2997,2999,3002],{"class":527,"line":1732},[525,2990,2424],{"class":560},[525,2992,1265],{"class":535},[525,2994,880],{"class":568},[525,2996,1540],{"class":535},[525,2998,68],{"class":568},[525,3000,3001],{"class":578},"poll",[525,3003,3004],{"class":568},"();\n",[525,3006,3007,3009,3011,3013,3015,3017,3019,3021],{"class":527,"line":1753},[525,3008,1566],{"class":535},[525,3010,68],{"class":568},[525,3012,2597],{"class":578},[525,3014,582],{"class":568},[525,3016,1250],{"class":535},[525,3018,68],{"class":568},[525,3020,608],{"class":535},[525,3022,2043],{"class":568},[525,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054],{"class":527,"line":3025},74,[525,3027,1064],{"class":531},[525,3029,334],{"class":568},[525,3031,1250],{"class":535},[525,3033,68],{"class":568},[525,3035,2024],{"class":535},[525,3037,2139],{"class":568},[525,3039,1981],{"class":568},[525,3041,1540],{"class":535},[525,3043,68],{"class":568},[525,3045,2597],{"class":578},[525,3047,582],{"class":568},[525,3049,1250],{"class":535},[525,3051,68],{"class":568},[525,3053,624],{"class":535},[525,3055,2043],{"class":568},[525,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087],{"class":527,"line":3058},75,[525,3060,1064],{"class":531},[525,3062,334],{"class":568},[525,3064,1250],{"class":535},[525,3066,68],{"class":568},[525,3068,2070],{"class":535},[525,3070,2139],{"class":568},[525,3072,1981],{"class":568},[525,3074,1540],{"class":535},[525,3076,68],{"class":568},[525,3078,2597],{"class":578},[525,3080,582],{"class":568},[525,3082,1250],{"class":535},[525,3084,68],{"class":568},[525,3086,639],{"class":535},[525,3088,2043],{"class":568},[525,3090,3092],{"class":527,"line":3091},76,[525,3093,1930],{"class":568},[525,3095,3097,3099,3102],{"class":527,"line":3096},77,[525,3098,808],{"class":531},[525,3100,3101],{"class":535}," resultaat",[525,3103,1800],{"class":568},[525,3105,3107],{"class":527,"line":3106},78,[525,3108,1935],{"class":568},[33,3110,3112],{"id":3111},"gebalanceerd-of-scheef","Gebalanceerd of scheef",[10,3114,3115,3116,3119,3120,3122,3123,3126],{},"Alle operaties kosten ",[28,3117,3118],{},"O(h)",", met ",[28,3121,281],{}," de hoogte van de boom. Hoe hoog is een boom met ",[28,3124,3125],{},"n"," knopen?",[46,3128,3129,3146],{},[49,3130,3131,3134,3135,3137,3138,3141,3142,3145],{},[41,3132,3133],{},"Gebalanceerd:"," elk niveau is (bijna) vol. Een boom met hoogte ",[28,3136,281],{}," bevat dan tot ",[28,3139,3140],{},"2^(h+1) - 1","\nknopen, dus ",[28,3143,3144],{},"h ≈ log n",". Met een miljoen sleutels heb je ongeveer twintig stappen nodig.",[49,3147,3148,334,3151,3154,3155,3158,3159,3162,3163,68],{},[41,3149,3150],{},"Scheef",[14,3152,3153],{},"degenerate tree","): voeg je ",[28,3156,3157],{},"1, 2, 3, 4, 5"," in deze volgorde in, dan gaat elke sleutel naar\nrechts. Je krijgt een gelinkte lijst en ",[28,3160,3161],{},"h = n - 1",". Zoeken kost dan ",[28,3164,3165],{},"O(n)",[215,3167,3170],{"className":3168,"code":3169,"language":220},[218],"1\n \\\n  2\n   \\\n    3\n     \\\n      4\n       \\\n        5\n",[28,3171,3169],{"__ignoreMap":223},[10,3173,3174,3175,3178],{},"Gesorteerde invoer is precies het geval dat in de praktijk vaak voorkomt (oplopende id's,\ntijdstempels). Daarom gebruik je in echte software een ",[41,3176,3177],{},"zelfbalancerende"," boom.",[3180,3181,3183],"h3",{"id":3182},"avl-bomen-en-rotaties","AVL-bomen en rotaties",[10,3185,3186,3187,3190],{},"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 ",[41,3188,3189],{},"rotatie",": een kleine herschikking van drie knopen die de BST-eigenschap behoudt.",[46,3192,3193,3199,3205],{},[49,3194,3195,3198],{},[41,3196,3197],{},"Rotatie naar rechts"," bij een te zware linkerkant (links-links-geval).",[49,3200,3201,3204],{},[41,3202,3203],{},"Rotatie naar links"," bij een te zware rechterkant (rechts-rechts-geval).",[49,3206,3207,3210],{},[41,3208,3209],{},"Dubbele rotaties"," (links-rechts en rechts-links) als de zware kant een \"knik\" heeft.",[10,3212,3213,3214,3217,3218,3221,3222,3225,3226,3228,3229,68],{},"Een rotatie kost ",[28,3215,3216],{},"O(1)",", dus een AVL-boom garandeert ",[28,3219,3220],{},"O(log n)"," voor alle operaties. Een rood-zwarte\nboom (",[14,3223,3224],{},"red-black tree",") doet hetzelfde met iets soepelere regels; die zit achter Java's ",[28,3227,30],{}," en\n",[28,3230,3231],{},"TreeSet",[33,3233,3235],{"id":3234},"complexiteit","Complexiteit",[90,3237,3238,3251],{},[93,3239,3240],{},[96,3241,3242,3245,3248],{},[99,3243,3244],{},"Operatie",[99,3246,3247],{},"Gebalanceerd",[99,3249,3250],{},"Scheef (slechtste geval)",[109,3252,3253,3265,3277,3290,3303],{},[96,3254,3255,3257,3261],{},[114,3256,230],{},[114,3258,3259],{},[28,3260,3220],{},[114,3262,3263],{},[28,3264,3165],{},[96,3266,3267,3269,3273],{},[114,3268,75],{},[114,3270,3271],{},[28,3272,3220],{},[114,3274,3275],{},[28,3276,3165],{},[96,3278,3279,3282,3286],{},[114,3280,3281],{},"Verwijderen",[114,3283,3284],{},[28,3285,3220],{},[114,3287,3288],{},[28,3289,3165],{},[96,3291,3292,3295,3299],{},[114,3293,3294],{},"Doorlopen (alle vier)",[114,3296,3297],{},[28,3298,3165],{},[114,3300,3301],{},[28,3302,3165],{},[96,3304,3305,3308,3312],{},[114,3306,3307],{},"Minimum \u002F maximum",[114,3309,3310],{},[28,3311,3220],{},[114,3313,3314],{},[28,3315,3165],{},[10,3317,3318,3319,3323,3324,3326],{},"Voor een AVL- of rood-zwarte boom geldt de middelste kolom altijd. Vergelijk dit met een\n",[19,3320,3322],{"href":3321},"\u002Fpracticely\u002Fdsa\u002Fhashtabellen","hashtabel",": die is gemiddeld sneller (",[28,3325,3216],{},"), maar een zoekboom houdt\nde sleutels gesorteerd, zodat je ook \"geef alle sleutels tussen 20 en 50\" efficiënt kunt beantwoorden.",[33,3328,3330],{"id":3329},"veelgemaakte-fouten-op-het-tentamen","Veelgemaakte fouten op het tentamen",[3332,3333,3334,3346,3364,3370,3384],"ol",{},[49,3335,3336,3339,3340,3342,3343,3345],{},[41,3337,3338],{},"Alleen met het directe kind vergelijken."," De BST-eigenschap geldt voor de hele deelboom. Een\nboom met ",[28,3341,265],{}," als wortel en ",[28,3344,193],{}," ergens in de linker deelboom is geen BST, ook al klopt elk\nouder-kindpaar.",[49,3347,3348,3351,3352,3355,3356,3358,3359,3361,3362,68],{},[41,3349,3350],{},"Met de verkeerde opvolger vervangen."," Bij twee kinderen neem je de ",[41,3353,3354],{},"kleinste in de rechter","\ndeelboom, niet het rechterkind zelf. Bij het verwijderen van ",[28,3357,127],{}," is dat ",[28,3360,182],{},", niet ",[28,3363,160],{},[49,3365,3366,3369],{},[41,3367,3368],{},"Preorder en postorder verwisselen."," Preorder begint met de wortel, postorder eindigt ermee.",[49,3371,3372,3375,3376,3379,3380,3383],{},[41,3373,3374],{},"Level-order als \"eerst alles links\" lezen."," Level-order gaat niveau voor niveau: ",[28,3377,3378],{},"8, 3, 10, …",",\nniet ",[28,3381,3382],{},"8, 3, 1, …"," (dat is preorder).",[49,3385,3386,3389,3390,3393],{},[41,3387,3388],{},"Vergeten dat de invoegvolgorde de vorm bepaalt."," Gesorteerde invoer geeft een scheve boom met\nhoogte ",[28,3391,3392],{},"n - 1",", geen gebalanceerde.",[33,3395,3397],{"id":3396},"samenvatting","Samenvatting",[46,3399,3400,3403,3406,3409,3420],{},[49,3401,3402],{},"In een BST staat alles links van een knoop kleiner en alles rechts groter; inorder geeft de\ngesorteerde volgorde.",[49,3404,3405],{},"Invoegen en zoeken volgen één pad vanaf de wortel; nieuwe sleutels worden altijd een blad.",[49,3407,3408],{},"Verwijderen kent drie gevallen; bij twee kinderen vervang je de sleutel door de opvolger, de\nkleinste in de rechter deelboom.",[49,3410,3115,3411,3413,3414,3416,3417,3419],{},[28,3412,3118],{},": ",[28,3415,3220],{}," als de boom gebalanceerd is, ",[28,3418,3165],{}," als hij scheef is.",[49,3421,3422],{},"AVL- en rood-zwarte bomen houden de boom met rotaties in balans.",[3424,3425,3426],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .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":223,"searchDepth":545,"depth":545,"links":3428},[3429,3430,3431,3432,3433,3434,3435,3438,3439,3440],{"id":35,"depth":545,"text":36},{"id":74,"depth":545,"text":75},{"id":229,"depth":545,"text":230},{"id":285,"depth":545,"text":286},{"id":382,"depth":545,"text":383},{"id":28,"depth":545,"text":510},{"id":3111,"depth":545,"text":3112,"children":3436},[3437],{"id":3182,"depth":552,"text":3183},{"id":3234,"depth":545,"text":3235},{"id":3329,"depth":545,"text":3330},{"id":3396,"depth":545,"text":3397},"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.","md","i-lucide-git-fork",{},"\u002Fpracticely-dsa\u002Fbinaire-zoekbomen",{"title":5,"description":3441},"practicely-dsa\u002Fbinaire-zoekbomen","binaire-zoekbomen","5yuwA2hIh7vFKmCQQsxSvrXzYaI0R4crBkjJJQZuPhU",{"prev":3451,"next":6346},{"id":3452,"title":3453,"body":3454,"description":6338,"extension":3442,"icon":6339,"meta":6340,"navigation":548,"order":599,"path":6341,"seo":6342,"stem":6343,"topic":6344,"__hash__":6345},"practicelyDsa\u002Fpracticely-dsa\u002Fheaps.md","Heaps uitgelegd: binaire heap, sift-up, sift-down en priority queues",{"type":7,"value":3455,"toc":6326},[3456,3470,3477,3481,3484,3502,3509,3512,3563,3570,3576,3589,3593,3596,3612,3618,3755,3767,3771,3774,3799,3805,3890,3896,3910,3912,5438,5442,5461,5472,5534,5544,5548,5564,5568,5571,6119,6153,6155,6224,6226,6277,6279,6323],[10,3457,3458,3459,3462,3463,3466,3467,3469],{},"Een hoop (",[14,3460,3461],{},"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,3464,3465],{},"priority queue","): de taakplanner van een besturingssysteem, het algoritme van Dijkstra\n(zie ",[19,3468,501],{"href":500},") en \"geef me de tien grootste waarden uit een miljoen\".",[10,3471,3472,3473,3476],{},"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 ",[41,3474,3475],{},"min-heap",": het kleinste element staat bovenaan.",[33,3478,3480],{"id":3479},"een-volledige-boom-in-een-array","Een volledige boom in een array",[10,3482,3483],{},"Een binaire heap is een binaire boom met twee eigenschappen:",[3332,3485,3486,3496],{},[49,3487,3488,3491,3492,3495],{},[41,3489,3490],{},"Vorm:"," de boom is volledig (",[14,3493,3494],{},"complete","). Alle niveaus zijn vol, behalve misschien het onderste,\nen dat wordt van links naar rechts gevuld.",[49,3497,3498,3501],{},[41,3499,3500],{},"Heap-eigenschap:"," elke ouder is kleiner dan of gelijk aan zijn kinderen. De wortel is dus\naltijd het minimum.",[10,3503,3504,3505,3508],{},"Let op: tussen broers of tussen verschillende takken geldt ",[41,3506,3507],{},"geen"," volgorde. Een heap is niet\ngesorteerd.",[10,3510,3511],{},"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:",[90,3513,3514,3524],{},[93,3515,3516],{},[96,3517,3518,3521],{},[99,3519,3520],{},"Gezocht",[99,3522,3523],{},"Formule",[109,3525,3526,3539,3551],{},[96,3527,3528,3534],{},[114,3529,3530,3531],{},"ouder van ",[28,3532,3533],{},"i",[114,3535,3536],{},[28,3537,3538],{},"⌊(i - 1) \u002F 2⌋",[96,3540,3541,3546],{},[114,3542,3543,3544],{},"linkerkind van ",[28,3545,3533],{},[114,3547,3548],{},[28,3549,3550],{},"2i + 1",[96,3552,3553,3558],{},[114,3554,3555,3556],{},"rechterkind van ",[28,3557,3533],{},[114,3559,3560],{},[28,3561,3562],{},"2i + 2",[10,3564,3565,3566,3569],{},"Voorbeeld: de array ",[28,3567,3568],{},"[1, 6, 2, 10, 13, 3, 5]"," is deze boom:",[215,3571,3574],{"className":3572,"code":3573,"language":220},[218],"            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",[28,3575,3573],{"__ignoreMap":223},[10,3577,3578,3579,3581,3582,3585,3586,3588],{},"Het kind op index 4 (",[28,3580,204],{},") heeft als ouder ",[28,3583,3584],{},"⌊(4 - 1) \u002F 2⌋ = 1",", en dat is ",[28,3587,160],{},". Klopt.",[33,3590,3592],{"id":3591},"invoegen-met-sift-up","Invoegen met sift-up",[10,3594,3595],{},"Invoegen gaat in twee stappen:",[3332,3597,3598,3605],{},[49,3599,3600,3601,3604],{},"Zet het nieuwe element ",[41,3602,3603],{},"achteraan"," de array (de eerste vrije plek in de boom).",[49,3606,3607,3608,3611],{},"Laat het omhoog zakken (",[14,3609,3610],{},"sift-up","): zolang het kleiner is dan zijn ouder, wissel je ze om.",[10,3613,84,3614,3617],{},[28,3615,3616],{},"3, 6, 2, 10, 13, 1, 5"," in een lege min-heap in:",[90,3619,3620,3633],{},[93,3621,3622],{},[96,3623,3624,3627,3630],{},[99,3625,3626],{},"Stap",[99,3628,3629],{},"Actie",[99,3631,3632],{},"Array",[109,3634,3635,3647,3660,3672,3684,3696,3708,3720,3732,3744],{},[96,3636,3637,3639,3642],{},[114,3638,149],{},[114,3640,3641],{},"voeg 3 toe",[114,3643,3644],{},[28,3645,3646],{},"[3]",[96,3648,3649,3652,3655],{},[114,3650,3651],{},"2",[114,3653,3654],{},"voeg 6 toe, 6 > 3: klaar",[114,3656,3657],{},[28,3658,3659],{},"[3, 6]",[96,3661,3662,3664,3667],{},[114,3663,127],{},[114,3665,3666],{},"voeg 2 toe",[114,3668,3669],{},[28,3670,3671],{},"[3, 6, 2]",[96,3673,3674,3676,3679],{},[114,3675],{},[114,3677,3678],{},"2 \u003C ouder 3: wissel",[114,3680,3681],{},[28,3682,3683],{},"[2, 6, 3]",[96,3685,3686,3688,3691],{},[114,3687,182],{},[114,3689,3690],{},"voeg 10 toe, 10 > 6: klaar",[114,3692,3693],{},[28,3694,3695],{},"[2, 6, 3, 10]",[96,3697,3698,3700,3703],{},[114,3699,265],{},[114,3701,3702],{},"voeg 13 toe, 13 > 6: klaar",[114,3704,3705],{},[28,3706,3707],{},"[2, 6, 3, 10, 13]",[96,3709,3710,3712,3715],{},[114,3711,160],{},[114,3713,3714],{},"voeg 1 toe (index 5)",[114,3716,3717],{},[28,3718,3719],{},"[2, 6, 3, 10, 13, 1]",[96,3721,3722,3724,3727],{},[114,3723],{},[114,3725,3726],{},"1 \u003C ouder 3 (index 2): wissel",[114,3728,3729],{},[28,3730,3731],{},"[2, 6, 1, 10, 13, 3]",[96,3733,3734,3736,3739],{},[114,3735],{},[114,3737,3738],{},"1 \u003C ouder 2 (index 0): wissel",[114,3740,3741],{},[28,3742,3743],{},"[1, 6, 2, 10, 13, 3]",[96,3745,3746,3748,3751],{},[114,3747,193],{},[114,3749,3750],{},"voeg 5 toe (index 6), 5 > ouder 2: klaar",[114,3752,3753],{},[28,3754,3568],{},[10,3756,3757,3758,3760,3761,3764,3765,68],{},"Elke wissel brengt het element één niveau omhoog. Een boom met ",[28,3759,3125],{}," knopen heeft ongeveer ",[28,3762,3763],{},"log n","\nniveaus, dus invoegen kost hoogstens ",[28,3766,3220],{},[33,3768,3770],{"id":3769},"het-minimum-verwijderen-met-sift-down","Het minimum verwijderen met sift-down",[10,3772,3773],{},"Het minimum staat altijd op index 0. Het weghalen gaat zo:",[3332,3775,3776,3779,3786],{},[49,3777,3778],{},"Onthoud de wortel (dat is het antwoord).",[49,3780,3781,3782,3785],{},"Verplaats het ",[41,3783,3784],{},"laatste"," element naar de wortel en maak de array één korter.",[49,3787,3788,3789,3792,3793,3796,3797,68],{},"Laat het omlaag zakken (",[14,3790,3791],{},"sift-down","): wissel met het ",[41,3794,3795],{},"kleinste kind"," zolang dat kind kleiner is.\nZijn beide kinderen gelijk, kies dan het ",[41,3798,54],{},[10,3800,3801,3802,3804],{},"Vanaf ",[28,3803,3568],{}," halen we twee keer het minimum weg:",[90,3806,3807,3817],{},[93,3808,3809],{},[96,3810,3811,3813,3815],{},[99,3812,3626],{},[99,3814,3629],{},[99,3816,3632],{},[109,3818,3819,3831,3843,3855,3867,3879],{},[96,3820,3821,3823,3826],{},[114,3822,149],{},[114,3824,3825],{},"verwijder 1, laatste (5) naar de wortel",[114,3827,3828],{},[28,3829,3830],{},"[5, 6, 2, 10, 13, 3]",[96,3832,3833,3835,3838],{},[114,3834],{},[114,3836,3837],{},"kinderen 6 en 2, kleinste is 2 \u003C 5: wissel",[114,3839,3840],{},[28,3841,3842],{},"[2, 6, 5, 10, 13, 3]",[96,3844,3845,3847,3850],{},[114,3846],{},[114,3848,3849],{},"kind (index 5) is 3 \u003C 5: wissel",[114,3851,3852],{},[28,3853,3854],{},"[2, 6, 3, 10, 13, 5]",[96,3856,3857,3859,3862],{},[114,3858,3651],{},[114,3860,3861],{},"verwijder 2, laatste (5) naar de wortel",[114,3863,3864],{},[28,3865,3866],{},"[5, 6, 3, 10, 13]",[96,3868,3869,3871,3874],{},[114,3870],{},[114,3872,3873],{},"kinderen 6 en 3, kleinste is 3 \u003C 5: wissel",[114,3875,3876],{},[28,3877,3878],{},"[3, 6, 5, 10, 13]",[96,3880,3881,3883,3886],{},[114,3882],{},[114,3884,3885],{},"5 op index 2 heeft geen kinderen: klaar",[114,3887,3888],{},[28,3889,3878],{},[10,3891,3892,3893,3895],{},"Waarom met het ",[41,3894,341],{}," kind wisselen? Wissel je met het grootste, dan wordt dat de ouder van het\nkleinere kind, en is de heap-eigenschap direct kapot.",[10,3897,3898,3899,3902,3903,3906,3907,68],{},"Een gelijkspel ziet er zo uit: uit ",[28,3900,3901],{},"[1, 3, 3, 5]"," het minimum halen geeft eerst ",[28,3904,3905],{},"[5, 3, 3]",". Beide\nkinderen zijn 3, dus wissel je met het linker: ",[28,3908,3909],{},"[3, 5, 3]",[33,3911,510],{"id":28},[512,3913,3914,4687],{},[515,3915,3916],{"v-slot:python":223},[215,3917,3919],{"className":519,"code":3918,"language":521,"meta":223,"style":223},"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",[28,3920,3921,3930,3942,3955,3959,3976,3998,4024,4041,4066,4100,4105,4159,4169,4173,4186,4206,4226,4238,4260,4275,4282,4286,4304,4323,4330,4367,4377,4419,4429,4434,4472,4481,4494,4499,4551,4560,4564,4568,4579,4619,4635,4652,4670],{"__ignoreMap":223},[525,3922,3923,3925,3928],{"class":527,"line":528},[525,3924,561],{"class":560},[525,3926,3927],{"class":564}," MinHeap",[525,3929,569],{"class":568},[525,3931,3932,3934,3936,3938,3940],{"class":527,"line":545},[525,3933,575],{"class":560},[525,3935,579],{"class":578},[525,3937,582],{"class":568},[525,3939,586],{"class":585},[525,3941,596],{"class":568},[525,3943,3944,3946,3948,3950,3952],{"class":527,"line":552},[525,3945,602],{"class":535},[525,3947,68],{"class":568},[525,3949,19],{"class":607},[525,3951,611],{"class":568},[525,3953,3954],{"class":568}," []\n",[525,3956,3957],{"class":527,"line":557},[525,3958,549],{"emptyLinePlaceholder":548},[525,3960,3961,3963,3965,3967,3969,3971,3974],{"class":527,"line":572},[525,3962,575],{"class":560},[525,3964,662],{"class":578},[525,3966,582],{"class":568},[525,3968,586],{"class":585},[525,3970,589],{"class":568},[525,3972,3973],{"class":592}," x",[525,3975,596],{"class":568},[525,3977,3978,3980,3982,3984,3986,3988,3990,3993,3995],{"class":527,"line":599},[525,3979,602],{"class":535},[525,3981,68],{"class":568},[525,3983,19],{"class":607},[525,3985,68],{"class":568},[525,3987,1571],{"class":578},[525,3989,582],{"class":568},[525,3991,3992],{"class":578},"x",[525,3994,703],{"class":568},[525,3996,3997],{"class":706},"  # achteraan\n",[525,3999,4000,4003,4005,4008,4010,4012,4014,4016,4018,4021],{"class":527,"line":617},[525,4001,4002],{"class":535},"        i ",[525,4004,880],{"class":568},[525,4006,4007],{"class":578}," len",[525,4009,582],{"class":568},[525,4011,586],{"class":535},[525,4013,68],{"class":568},[525,4015,19],{"class":607},[525,4017,703],{"class":568},[525,4019,4020],{"class":568}," -",[525,4022,4023],{"class":1686}," 1\n",[525,4025,4026,4028,4031,4033,4036,4038],{"class":527,"line":632},[525,4027,1144],{"class":531},[525,4029,4030],{"class":535}," i ",[525,4032,767],{"class":568},[525,4034,4035],{"class":1686}," 0",[525,4037,2187],{"class":568},[525,4039,4040],{"class":706},"  # sift-up\n",[525,4042,4043,4046,4048,4050,4053,4056,4058,4060,4063],{"class":527,"line":646},[525,4044,4045],{"class":535},"            ouder ",[525,4047,880],{"class":568},[525,4049,334],{"class":568},[525,4051,4052],{"class":535},"i ",[525,4054,4055],{"class":568},"-",[525,4057,1701],{"class":1686},[525,4059,703],{"class":568},[525,4061,4062],{"class":568}," \u002F\u002F",[525,4064,4065],{"class":1686}," 2\n",[525,4067,4068,4070,4073,4075,4077,4080,4082,4084,4087,4089,4091,4093,4095,4098],{"class":527,"line":651},[525,4069,1617],{"class":531},[525,4071,4072],{"class":535}," self",[525,4074,68],{"class":568},[525,4076,19],{"class":607},[525,4078,4079],{"class":568},"[",[525,4081,3533],{"class":607},[525,4083,1283],{"class":568},[525,4085,4086],{"class":568}," >=",[525,4088,4072],{"class":535},[525,4090,68],{"class":568},[525,4092,19],{"class":607},[525,4094,4079],{"class":568},[525,4096,4097],{"class":607},"ouder",[525,4099,1729],{"class":568},[525,4101,4102],{"class":527,"line":656},[525,4103,4104],{"class":531},"                break\n",[525,4106,4107,4110,4112,4114,4116,4118,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157],{"class":527,"line":676},[525,4108,4109],{"class":535},"            self",[525,4111,68],{"class":568},[525,4113,19],{"class":607},[525,4115,4079],{"class":568},[525,4117,3533],{"class":607},[525,4119,4120],{"class":568},"],",[525,4122,4072],{"class":535},[525,4124,68],{"class":568},[525,4126,19],{"class":607},[525,4128,4079],{"class":568},[525,4130,4097],{"class":607},[525,4132,1283],{"class":568},[525,4134,611],{"class":568},[525,4136,4072],{"class":535},[525,4138,68],{"class":568},[525,4140,19],{"class":607},[525,4142,4079],{"class":568},[525,4144,4097],{"class":607},[525,4146,4120],{"class":568},[525,4148,4072],{"class":535},[525,4150,68],{"class":568},[525,4152,19],{"class":607},[525,4154,4079],{"class":568},[525,4156,3533],{"class":607},[525,4158,1471],{"class":568},[525,4160,4161,4164,4166],{"class":527,"line":691},[525,4162,4163],{"class":535},"            i ",[525,4165,880],{"class":568},[525,4167,4168],{"class":535}," ouder\n",[525,4170,4171],{"class":527,"line":710},[525,4172,549],{"emptyLinePlaceholder":548},[525,4174,4175,4177,4180,4182,4184],{"class":527,"line":730},[525,4176,575],{"class":560},[525,4178,4179],{"class":578}," verwijder_min",[525,4181,582],{"class":568},[525,4183,586],{"class":585},[525,4185,596],{"class":568},[525,4187,4188,4191,4193,4195,4197,4199,4201,4204],{"class":527,"line":759},[525,4189,4190],{"class":535},"        minimum ",[525,4192,880],{"class":568},[525,4194,4072],{"class":535},[525,4196,68],{"class":568},[525,4198,19],{"class":607},[525,4200,4079],{"class":568},[525,4202,4203],{"class":1686},"0",[525,4205,1471],{"class":568},[525,4207,4208,4211,4213,4215,4217,4219,4221,4224],{"class":527,"line":778},[525,4209,4210],{"class":535},"        laatste ",[525,4212,880],{"class":568},[525,4214,4072],{"class":535},[525,4216,68],{"class":568},[525,4218,19],{"class":607},[525,4220,68],{"class":568},[525,4222,4223],{"class":578},"pop",[525,4225,1560],{"class":568},[525,4227,4228,4230,4232,4234,4236],{"class":527,"line":805},[525,4229,1064],{"class":531},[525,4231,4072],{"class":535},[525,4233,68],{"class":568},[525,4235,19],{"class":607},[525,4237,569],{"class":568},[525,4239,4240,4242,4244,4246,4248,4250,4252,4254,4257],{"class":527,"line":814},[525,4241,4109],{"class":535},[525,4243,68],{"class":568},[525,4245,19],{"class":607},[525,4247,4079],{"class":568},[525,4249,4203],{"class":1686},[525,4251,1283],{"class":568},[525,4253,611],{"class":568},[525,4255,4256],{"class":535}," laatste  ",[525,4258,4259],{"class":706},"# laatste naar de wortel\n",[525,4261,4262,4264,4266,4269,4271,4273],{"class":527,"line":819},[525,4263,4109],{"class":535},[525,4265,68],{"class":568},[525,4267,4268],{"class":578},"_sift_down",[525,4270,582],{"class":568},[525,4272,4203],{"class":1686},[525,4274,756],{"class":568},[525,4276,4277,4279],{"class":527,"line":824},[525,4278,694],{"class":531},[525,4280,4281],{"class":535}," minimum\n",[525,4283,4284],{"class":527,"line":842},[525,4285,549],{"emptyLinePlaceholder":548},[525,4287,4288,4290,4293,4295,4297,4299,4302],{"class":527,"line":874},[525,4289,575],{"class":560},[525,4291,4292],{"class":578}," _sift_down",[525,4294,582],{"class":568},[525,4296,586],{"class":585},[525,4298,589],{"class":568},[525,4300,4301],{"class":592}," i",[525,4303,596],{"class":568},[525,4305,4306,4309,4311,4313,4315,4317,4319,4321],{"class":527,"line":912},[525,4307,4308],{"class":535},"        n ",[525,4310,880],{"class":568},[525,4312,4007],{"class":578},[525,4314,582],{"class":568},[525,4316,586],{"class":535},[525,4318,68],{"class":568},[525,4320,19],{"class":607},[525,4322,756],{"class":568},[525,4324,4325,4327],{"class":527,"line":919},[525,4326,1144],{"class":531},[525,4328,4329],{"class":568}," True:\n",[525,4331,4332,4335,4337,4340,4342,4345,4348,4350,4353,4355,4357,4359,4361,4363,4365],{"class":527,"line":924},[525,4333,4334],{"class":535},"            links",[525,4336,589],{"class":568},[525,4338,4339],{"class":535}," rechts ",[525,4341,880],{"class":568},[525,4343,4344],{"class":1686}," 2",[525,4346,4347],{"class":568}," *",[525,4349,4030],{"class":535},[525,4351,4352],{"class":568},"+",[525,4354,1701],{"class":1686},[525,4356,589],{"class":568},[525,4358,4344],{"class":1686},[525,4360,4347],{"class":568},[525,4362,4030],{"class":535},[525,4364,4352],{"class":568},[525,4366,4065],{"class":1686},[525,4368,4369,4372,4374],{"class":527,"line":929},[525,4370,4371],{"class":535},"            kleinste ",[525,4373,880],{"class":568},[525,4375,4376],{"class":535}," i\n",[525,4378,4379,4381,4384,4386,4389,4392,4394,4396,4398,4400,4402,4404,4407,4409,4411,4413,4415,4417],{"class":527,"line":947},[525,4380,1617],{"class":531},[525,4382,4383],{"class":535}," links ",[525,4385,718],{"class":568},[525,4387,4388],{"class":535}," n ",[525,4390,4391],{"class":568},"and",[525,4393,4072],{"class":535},[525,4395,68],{"class":568},[525,4397,19],{"class":607},[525,4399,4079],{"class":568},[525,4401,624],{"class":607},[525,4403,1283],{"class":568},[525,4405,4406],{"class":568}," \u003C",[525,4408,4072],{"class":535},[525,4410,68],{"class":568},[525,4412,19],{"class":607},[525,4414,4079],{"class":568},[525,4416,341],{"class":607},[525,4418,1729],{"class":568},[525,4420,4421,4424,4426],{"class":527,"line":958},[525,4422,4423],{"class":535},"                kleinste ",[525,4425,880],{"class":568},[525,4427,4428],{"class":535}," links\n",[525,4430,4431],{"class":527,"line":965},[525,4432,4433],{"class":706},"            # strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n",[525,4435,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470],{"class":527,"line":982},[525,4437,1617],{"class":531},[525,4439,4339],{"class":535},[525,4441,718],{"class":568},[525,4443,4388],{"class":535},[525,4445,4391],{"class":568},[525,4447,4072],{"class":535},[525,4449,68],{"class":568},[525,4451,19],{"class":607},[525,4453,4079],{"class":568},[525,4455,639],{"class":607},[525,4457,1283],{"class":568},[525,4459,4406],{"class":568},[525,4461,4072],{"class":535},[525,4463,68],{"class":568},[525,4465,19],{"class":607},[525,4467,4079],{"class":568},[525,4469,341],{"class":607},[525,4471,1729],{"class":568},[525,4473,4474,4476,4478],{"class":527,"line":1009},[525,4475,4423],{"class":535},[525,4477,880],{"class":568},[525,4479,4480],{"class":535}," rechts\n",[525,4482,4483,4485,4488,4490,4492],{"class":527,"line":1026},[525,4484,1617],{"class":531},[525,4486,4487],{"class":535}," kleinste ",[525,4489,1978],{"class":568},[525,4491,4301],{"class":535},[525,4493,569],{"class":568},[525,4495,4496],{"class":527,"line":1053},[525,4497,4498],{"class":531},"                return\n",[525,4500,4501,4503,4505,4507,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549],{"class":527,"line":1061},[525,4502,4109],{"class":535},[525,4504,68],{"class":568},[525,4506,19],{"class":607},[525,4508,4079],{"class":568},[525,4510,3533],{"class":607},[525,4512,4120],{"class":568},[525,4514,4072],{"class":535},[525,4516,68],{"class":568},[525,4518,19],{"class":607},[525,4520,4079],{"class":568},[525,4522,341],{"class":607},[525,4524,1283],{"class":568},[525,4526,611],{"class":568},[525,4528,4072],{"class":535},[525,4530,68],{"class":568},[525,4532,19],{"class":607},[525,4534,4079],{"class":568},[525,4536,341],{"class":607},[525,4538,4120],{"class":568},[525,4540,4072],{"class":535},[525,4542,68],{"class":568},[525,4544,19],{"class":607},[525,4546,4079],{"class":568},[525,4548,3533],{"class":607},[525,4550,1471],{"class":568},[525,4552,4553,4555,4557],{"class":527,"line":1082},[525,4554,4163],{"class":535},[525,4556,880],{"class":568},[525,4558,4559],{"class":535}," kleinste\n",[525,4561,4562],{"class":527,"line":1094},[525,4563,549],{"emptyLinePlaceholder":548},[525,4565,4566],{"class":527,"line":1112},[525,4567,549],{"emptyLinePlaceholder":548},[525,4569,4570,4573,4575,4577],{"class":527,"line":1124},[525,4571,4572],{"class":535},"h ",[525,4574,880],{"class":568},[525,4576,3927],{"class":578},[525,4578,1560],{"class":568},[525,4580,4581,4583,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4617],{"class":527,"line":1141},[525,4582,1676],{"class":531},[525,4584,4585],{"class":535}," x ",[525,4587,466],{"class":531},[525,4589,1274],{"class":568},[525,4591,127],{"class":1686},[525,4593,589],{"class":568},[525,4595,1706],{"class":1686},[525,4597,589],{"class":568},[525,4599,4344],{"class":1686},[525,4601,589],{"class":568},[525,4603,1696],{"class":1686},[525,4605,589],{"class":568},[525,4607,1726],{"class":1686},[525,4609,589],{"class":568},[525,4611,1701],{"class":1686},[525,4613,589],{"class":568},[525,4615,4616],{"class":1686}," 5",[525,4618,1729],{"class":568},[525,4620,4621,4624,4626,4629,4631,4633],{"class":527,"line":1160},[525,4622,4623],{"class":535},"    h",[525,4625,68],{"class":568},[525,4627,4628],{"class":578},"voeg_toe",[525,4630,582],{"class":568},[525,4632,3992],{"class":578},[525,4634,756],{"class":568},[525,4636,4637,4639,4641,4643,4645,4647,4649],{"class":527,"line":1174},[525,4638,1756],{"class":578},[525,4640,582],{"class":568},[525,4642,281],{"class":578},[525,4644,68],{"class":568},[525,4646,19],{"class":607},[525,4648,703],{"class":568},[525,4650,4651],{"class":706},"                # [1, 6, 2, 10, 13, 3, 5]\n",[525,4653,4654,4656,4658,4660,4662,4665,4667],{"class":527,"line":1192},[525,4655,1756],{"class":578},[525,4657,582],{"class":568},[525,4659,281],{"class":578},[525,4661,68],{"class":568},[525,4663,4664],{"class":578},"verwijder_min",[525,4666,2984],{"class":568},[525,4668,4669],{"class":706},"  # 1\n",[525,4671,4672,4674,4676,4678,4680,4682,4684],{"class":527,"line":1223},[525,4673,1756],{"class":578},[525,4675,582],{"class":568},[525,4677,281],{"class":578},[525,4679,68],{"class":568},[525,4681,19],{"class":607},[525,4683,703],{"class":568},[525,4685,4686],{"class":706},"                # [2, 6, 3, 10, 13, 5]\n",[515,4688,4689],{"v-slot:java":223},[215,4690,4692],{"className":1776,"code":4691,"language":1778,"meta":223,"style":223},"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",[28,4693,4694,4710,4726,4730,4740,4764,4768,4785,4803,4829,4849,4876,4914,4930,4940,4945,4949,4953,4964,4985,5017,5033,5057,5068,5072,5081,5085,5089,5109,5125,5134,5178,5227,5232,5280,5299,5314,5324,5328,5332,5336,5362,5383,5411,5430,5434],{"__ignoreMap":223},[525,4695,4696,4698,4700,4702,4704,4706,4708],{"class":527,"line":528},[525,4697,539],{"class":1686},[525,4699,1787],{"class":560},[525,4701,68],{"class":568},[525,4703,1792],{"class":560},[525,4705,68],{"class":568},[525,4707,1815],{"class":560},[525,4709,1800],{"class":568},[525,4711,4712,4714,4716,4718,4720,4722,4724],{"class":527,"line":545},[525,4713,539],{"class":1686},[525,4715,1787],{"class":560},[525,4717,68],{"class":568},[525,4719,1792],{"class":560},[525,4721,68],{"class":568},[525,4723,1849],{"class":560},[525,4725,1800],{"class":568},[525,4727,4728],{"class":527,"line":552},[525,4729,549],{"emptyLinePlaceholder":548},[525,4731,4732,4734,4736,4738],{"class":527,"line":557},[525,4733,1860],{"class":560},[525,4735,1863],{"class":560},[525,4737,3927],{"class":564},[525,4739,1868],{"class":568},[525,4741,4742,4745,4747,4749,4751,4753,4756,4758,4760,4762],{"class":527,"line":572},[525,4743,4744],{"class":560},"    final",[525,4746,2556],{"class":560},[525,4748,718],{"class":568},[525,4750,2561],{"class":560},[525,4752,767],{"class":568},[525,4754,4755],{"class":535}," a ",[525,4757,880],{"class":568},[525,4759,1987],{"class":531},[525,4761,2917],{"class":560},[525,4763,2920],{"class":568},[525,4765,4766],{"class":527,"line":599},[525,4767,549],{"emptyLinePlaceholder":548},[525,4769,4770,4773,4775,4777,4779,4781,4783],{"class":527,"line":617},[525,4771,4772],{"class":560},"    void",[525,4774,1948],{"class":578},[525,4776,582],{"class":568},[525,4778,1905],{"class":560},[525,4780,3973],{"class":592},[525,4782,703],{"class":568},[525,4784,1868],{"class":568},[525,4786,4787,4790,4792,4794,4796,4798,4800],{"class":527,"line":632},[525,4788,4789],{"class":535},"        a",[525,4791,68],{"class":568},[525,4793,2597],{"class":578},[525,4795,582],{"class":568},[525,4797,3992],{"class":535},[525,4799,1996],{"class":568},[525,4801,4802],{"class":706}," \u002F\u002F achteraan\n",[525,4804,4805,4808,4810,4812,4815,4817,4820,4823,4825,4827],{"class":527,"line":646},[525,4806,4807],{"class":560},"        int",[525,4809,4030],{"class":535},[525,4811,880],{"class":568},[525,4813,4814],{"class":535}," a",[525,4816,68],{"class":568},[525,4818,4819],{"class":578},"size",[525,4821,4822],{"class":568},"()",[525,4824,4020],{"class":568},[525,4826,1701],{"class":1686},[525,4828,1800],{"class":568},[525,4830,4831,4833,4835,4837,4839,4841,4843,4846],{"class":527,"line":651},[525,4832,1144],{"class":531},[525,4834,334],{"class":568},[525,4836,4052],{"class":535},[525,4838,767],{"class":568},[525,4840,4035],{"class":1686},[525,4842,703],{"class":568},[525,4844,4845],{"class":568}," {",[525,4847,4848],{"class":706}," \u002F\u002F sift-up\n",[525,4850,4851,4854,4857,4859,4861,4863,4865,4867,4869,4872,4874],{"class":527,"line":656},[525,4852,4853],{"class":560},"            int",[525,4855,4856],{"class":535}," ouder ",[525,4858,880],{"class":568},[525,4860,334],{"class":568},[525,4862,4052],{"class":535},[525,4864,4055],{"class":568},[525,4866,1701],{"class":1686},[525,4868,703],{"class":568},[525,4870,4871],{"class":568}," \u002F",[525,4873,4344],{"class":1686},[525,4875,1800],{"class":568},[525,4877,4878,4880,4882,4884,4886,4889,4891,4893,4895,4897,4899,4901,4903,4905,4907,4909,4912],{"class":527,"line":676},[525,4879,1617],{"class":531},[525,4881,334],{"class":568},[525,4883,19],{"class":535},[525,4885,68],{"class":568},[525,4887,4888],{"class":578},"get",[525,4890,582],{"class":568},[525,4892,3533],{"class":535},[525,4894,703],{"class":568},[525,4896,4086],{"class":568},[525,4898,4814],{"class":535},[525,4900,68],{"class":568},[525,4902,4888],{"class":578},[525,4904,582],{"class":568},[525,4906,4097],{"class":535},[525,4908,1768],{"class":568},[525,4910,4911],{"class":531}," break",[525,4913,1800],{"class":568},[525,4915,4916,4919,4921,4923,4925,4928],{"class":527,"line":691},[525,4917,4918],{"class":578},"            wissel",[525,4920,582],{"class":568},[525,4922,3533],{"class":535},[525,4924,589],{"class":568},[525,4926,4927],{"class":535}," ouder",[525,4929,2043],{"class":568},[525,4931,4932,4934,4936,4938],{"class":527,"line":710},[525,4933,4163],{"class":535},[525,4935,880],{"class":568},[525,4937,4927],{"class":535},[525,4939,1800],{"class":568},[525,4941,4942],{"class":527,"line":730},[525,4943,4944],{"class":568},"        }\n",[525,4946,4947],{"class":527,"line":759},[525,4948,1930],{"class":568},[525,4950,4951],{"class":527,"line":778},[525,4952,549],{"emptyLinePlaceholder":548},[525,4954,4955,4957,4960,4962],{"class":527,"line":805},[525,4956,1873],{"class":560},[525,4958,4959],{"class":578}," verwijderMin",[525,4961,4822],{"class":568},[525,4963,1868],{"class":568},[525,4965,4966,4968,4971,4973,4975,4977,4979,4981,4983],{"class":527,"line":814},[525,4967,4807],{"class":560},[525,4969,4970],{"class":535}," minimum ",[525,4972,880],{"class":568},[525,4974,4814],{"class":535},[525,4976,68],{"class":568},[525,4978,4888],{"class":578},[525,4980,582],{"class":568},[525,4982,4203],{"class":1686},[525,4984,2043],{"class":568},[525,4986,4987,4989,4992,4994,4996,4998,5001,5003,5005,5007,5009,5011,5013,5015],{"class":527,"line":819},[525,4988,4807],{"class":560},[525,4990,4991],{"class":535}," laatste ",[525,4993,880],{"class":568},[525,4995,4814],{"class":535},[525,4997,68],{"class":568},[525,4999,5000],{"class":578},"remove",[525,5002,582],{"class":568},[525,5004,19],{"class":535},[525,5006,68],{"class":568},[525,5008,4819],{"class":578},[525,5010,4822],{"class":568},[525,5012,4020],{"class":568},[525,5014,1701],{"class":1686},[525,5016,2043],{"class":568},[525,5018,5019,5021,5023,5025,5027,5029,5031],{"class":527,"line":824},[525,5020,1064],{"class":531},[525,5022,2973],{"class":568},[525,5024,19],{"class":535},[525,5026,68],{"class":568},[525,5028,2981],{"class":578},[525,5030,2984],{"class":568},[525,5032,1868],{"class":568},[525,5034,5035,5038,5040,5043,5045,5047,5049,5052,5054],{"class":527,"line":842},[525,5036,5037],{"class":535},"            a",[525,5039,68],{"class":568},[525,5041,5042],{"class":578},"set",[525,5044,582],{"class":568},[525,5046,4203],{"class":1686},[525,5048,589],{"class":568},[525,5050,5051],{"class":535}," laatste",[525,5053,1996],{"class":568},[525,5055,5056],{"class":706}," \u002F\u002F laatste naar de wortel\n",[525,5058,5059,5062,5064,5066],{"class":527,"line":874},[525,5060,5061],{"class":578},"            siftDown",[525,5063,582],{"class":568},[525,5065,4203],{"class":1686},[525,5067,2043],{"class":568},[525,5069,5070],{"class":527,"line":912},[525,5071,4944],{"class":568},[525,5073,5074,5076,5079],{"class":527,"line":919},[525,5075,694],{"class":531},[525,5077,5078],{"class":535}," minimum",[525,5080,1800],{"class":568},[525,5082,5083],{"class":527,"line":924},[525,5084,1930],{"class":568},[525,5086,5087],{"class":527,"line":929},[525,5088,549],{"emptyLinePlaceholder":548},[525,5090,5091,5094,5096,5099,5101,5103,5105,5107],{"class":527,"line":947},[525,5092,5093],{"class":560},"    private",[525,5095,2543],{"class":560},[525,5097,5098],{"class":578}," siftDown",[525,5100,582],{"class":568},[525,5102,1905],{"class":560},[525,5104,4301],{"class":592},[525,5106,703],{"class":568},[525,5108,1868],{"class":568},[525,5110,5111,5113,5115,5117,5119,5121,5123],{"class":527,"line":958},[525,5112,4807],{"class":560},[525,5114,4388],{"class":535},[525,5116,880],{"class":568},[525,5118,4814],{"class":535},[525,5120,68],{"class":568},[525,5122,4819],{"class":578},[525,5124,3004],{"class":568},[525,5126,5127,5129,5132],{"class":527,"line":965},[525,5128,1144],{"class":531},[525,5130,5131],{"class":568}," (true)",[525,5133,1868],{"class":568},[525,5135,5136,5138,5140,5142,5144,5146,5148,5150,5152,5154,5156,5158,5160,5162,5164,5166,5168,5170,5172,5174,5176],{"class":527,"line":982},[525,5137,4853],{"class":560},[525,5139,4383],{"class":535},[525,5141,880],{"class":568},[525,5143,4344],{"class":1686},[525,5145,4347],{"class":568},[525,5147,4030],{"class":535},[525,5149,4352],{"class":568},[525,5151,1701],{"class":1686},[525,5153,589],{"class":568},[525,5155,4339],{"class":535},[525,5157,880],{"class":568},[525,5159,4344],{"class":1686},[525,5161,4347],{"class":568},[525,5163,4030],{"class":535},[525,5165,4352],{"class":568},[525,5167,4344],{"class":1686},[525,5169,589],{"class":568},[525,5171,4487],{"class":535},[525,5173,880],{"class":568},[525,5175,4301],{"class":535},[525,5177,1800],{"class":568},[525,5179,5180,5182,5184,5186,5188,5190,5193,5195,5197,5199,5201,5203,5205,5207,5209,5211,5213,5215,5217,5219,5221,5223,5225],{"class":527,"line":1009},[525,5181,1617],{"class":531},[525,5183,334],{"class":568},[525,5185,2024],{"class":535},[525,5187,718],{"class":568},[525,5189,4388],{"class":535},[525,5191,5192],{"class":568},"&&",[525,5194,4814],{"class":535},[525,5196,68],{"class":568},[525,5198,4888],{"class":578},[525,5200,582],{"class":568},[525,5202,624],{"class":535},[525,5204,703],{"class":568},[525,5206,4406],{"class":568},[525,5208,4814],{"class":535},[525,5210,68],{"class":568},[525,5212,4888],{"class":578},[525,5214,582],{"class":568},[525,5216,341],{"class":535},[525,5218,1768],{"class":568},[525,5220,4487],{"class":535},[525,5222,880],{"class":568},[525,5224,1885],{"class":535},[525,5226,1800],{"class":568},[525,5228,5229],{"class":527,"line":1026},[525,5230,5231],{"class":706},"            \u002F\u002F strikt kleiner: bij gelijke kinderen blijft het linker gekozen\n",[525,5233,5234,5236,5238,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258,5260,5262,5264,5266,5268,5270,5272,5274,5276,5278],{"class":527,"line":1053},[525,5235,1617],{"class":531},[525,5237,334],{"class":568},[525,5239,2070],{"class":535},[525,5241,718],{"class":568},[525,5243,4388],{"class":535},[525,5245,5192],{"class":568},[525,5247,4814],{"class":535},[525,5249,68],{"class":568},[525,5251,4888],{"class":578},[525,5253,582],{"class":568},[525,5255,639],{"class":535},[525,5257,703],{"class":568},[525,5259,4406],{"class":568},[525,5261,4814],{"class":535},[525,5263,68],{"class":568},[525,5265,4888],{"class":578},[525,5267,582],{"class":568},[525,5269,341],{"class":535},[525,5271,1768],{"class":568},[525,5273,4487],{"class":535},[525,5275,880],{"class":568},[525,5277,1890],{"class":535},[525,5279,1800],{"class":568},[525,5281,5282,5284,5286,5289,5291,5293,5295,5297],{"class":527,"line":1061},[525,5283,1617],{"class":531},[525,5285,334],{"class":568},[525,5287,5288],{"class":535},"kleinste ",[525,5290,1978],{"class":568},[525,5292,4301],{"class":535},[525,5294,703],{"class":568},[525,5296,1984],{"class":531},[525,5298,1800],{"class":568},[525,5300,5301,5303,5305,5307,5309,5312],{"class":527,"line":1082},[525,5302,4918],{"class":578},[525,5304,582],{"class":568},[525,5306,3533],{"class":535},[525,5308,589],{"class":568},[525,5310,5311],{"class":535}," kleinste",[525,5313,2043],{"class":568},[525,5315,5316,5318,5320,5322],{"class":527,"line":1094},[525,5317,4163],{"class":535},[525,5319,880],{"class":568},[525,5321,5311],{"class":535},[525,5323,1800],{"class":568},[525,5325,5326],{"class":527,"line":1112},[525,5327,4944],{"class":568},[525,5329,5330],{"class":527,"line":1124},[525,5331,1930],{"class":568},[525,5333,5334],{"class":527,"line":1141},[525,5335,549],{"emptyLinePlaceholder":548},[525,5337,5338,5340,5342,5345,5347,5349,5351,5353,5355,5358,5360],{"class":527,"line":1160},[525,5339,5093],{"class":560},[525,5341,2543],{"class":560},[525,5343,5344],{"class":578}," wissel",[525,5346,582],{"class":568},[525,5348,1905],{"class":560},[525,5350,4301],{"class":592},[525,5352,589],{"class":568},[525,5354,1960],{"class":560},[525,5356,5357],{"class":592}," j",[525,5359,703],{"class":568},[525,5361,1868],{"class":568},[525,5363,5364,5366,5369,5371,5373,5375,5377,5379,5381],{"class":527,"line":1174},[525,5365,4807],{"class":560},[525,5367,5368],{"class":535}," t ",[525,5370,880],{"class":568},[525,5372,4814],{"class":535},[525,5374,68],{"class":568},[525,5376,4888],{"class":578},[525,5378,582],{"class":568},[525,5380,3533],{"class":535},[525,5382,2043],{"class":568},[525,5384,5385,5387,5389,5391,5393,5395,5397,5399,5401,5403,5405,5408],{"class":527,"line":1192},[525,5386,4789],{"class":535},[525,5388,68],{"class":568},[525,5390,5042],{"class":578},[525,5392,582],{"class":568},[525,5394,3533],{"class":535},[525,5396,589],{"class":568},[525,5398,4814],{"class":535},[525,5400,68],{"class":568},[525,5402,4888],{"class":578},[525,5404,582],{"class":568},[525,5406,5407],{"class":535},"j",[525,5409,5410],{"class":568},"));\n",[525,5412,5413,5415,5417,5419,5421,5423,5425,5428],{"class":527,"line":1223},[525,5414,4789],{"class":535},[525,5416,68],{"class":568},[525,5418,5042],{"class":578},[525,5420,582],{"class":568},[525,5422,5407],{"class":535},[525,5424,589],{"class":568},[525,5426,5427],{"class":535}," t",[525,5429,2043],{"class":568},[525,5431,5432],{"class":527,"line":1230},[525,5433,1930],{"class":568},[525,5435,5436],{"class":527,"line":1235},[525,5437,1935],{"class":568},[33,5439,5441],{"id":5440},"heapify-een-hele-array-in-on","Heapify: een hele array in O(n)",[10,5443,5444,5445,5447,5448,5450,5451,5454,5455,5458,5459,68],{},"Heb je al een array, dan kun je de elementen één voor één invoegen: ",[28,5446,3125],{}," keer ",[28,5449,3220],{},". Het kan\nsneller. Bij heapify (",[14,5452,5453],{},"bottom-up heap construction",") roep je sift-down aan op elke knoop die kinderen\nheeft, van achter naar voren: van index ",[28,5456,5457],{},"⌊n\u002F2⌋ - 1"," terug naar ",[28,5460,4203],{},[10,5462,5463,5464,5467,5468,5471],{},"Voor ",[28,5465,5466],{},"[9, 4, 7, 1, 8, 2, 6]"," (dus ",[28,5469,5470],{},"n = 7",", start bij index 2):",[90,5473,5474,5485],{},[93,5475,5476],{},[96,5477,5478,5480,5483],{},[99,5479,3626],{},[99,5481,5482],{},"Sift-down op",[99,5484,3632],{},[109,5486,5487,5498,5510,5522],{},[96,5488,5489,5492,5494],{},[114,5490,5491],{},"start",[114,5493],{},[114,5495,5496],{},[28,5497,5466],{},[96,5499,5500,5502,5505],{},[114,5501,149],{},[114,5503,5504],{},"index 2 (7): wissel met kind 2",[114,5506,5507],{},[28,5508,5509],{},"[9, 4, 2, 1, 8, 7, 6]",[96,5511,5512,5514,5517],{},[114,5513,3651],{},[114,5515,5516],{},"index 1 (4): wissel met kind 1",[114,5518,5519],{},[28,5520,5521],{},"[9, 1, 2, 4, 8, 7, 6]",[96,5523,5524,5526,5529],{},[114,5525,127],{},[114,5527,5528],{},"index 0 (9): wissel met 1, daarna met 4",[114,5530,5531],{},[28,5532,5533],{},"[1, 4, 2, 9, 8, 7, 6]",[10,5535,5536,5537,5539,5540,5543],{},"Dit is ",[28,5538,3165],{}," en niet ",[28,5541,5542],{},"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.",[33,5545,5547],{"id":5546},"heapsort","Heapsort",[10,5549,5550,5551,5553,5554,5556,5557,5559,5560,68],{},"Heapsort gebruikt dezelfde bouwstenen: maak met heapify een heap en haal dan ",[28,5552,3125],{}," 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",[28,5555,5542],{},", ook in het slechtste geval, en gebruikt ",[28,5558,3216],{}," extra geheugen, maar is niet stabiel.\nMeer over sorteeralgoritmen lees je bij ",[19,5561,5563],{"href":5562},"\u002Fpracticely\u002Fdsa\u002Fsorteren","sorteren",[33,5565,5567],{"id":5566},"priority-queues-in-python-en-java","Priority queues in Python en Java",[10,5569,5570],{},"In de praktijk gebruik je de ingebouwde heap.",[512,5572,5573,5831],{},[515,5574,5575],{"v-slot:python":223},[215,5576,5578],{"className":519,"code":5577,"language":521,"meta":223,"style":223},"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",[28,5579,5580,5587,5591,5600,5636,5665,5694,5698,5708,5737,5754,5758,5763,5802,5818],{"__ignoreMap":223},[525,5581,5582,5584],{"class":527,"line":528},[525,5583,539],{"class":531},[525,5585,5586],{"class":535}," heapq\n",[525,5588,5589],{"class":527,"line":545},[525,5590,549],{"emptyLinePlaceholder":548},[525,5592,5593,5596,5598],{"class":527,"line":552},[525,5594,5595],{"class":535},"taken ",[525,5597,880],{"class":568},[525,5599,3954],{"class":568},[525,5601,5602,5605,5607,5610,5612,5615,5617,5619,5621,5623,5626,5630,5633],{"class":527,"line":557},[525,5603,5604],{"class":535},"heapq",[525,5606,68],{"class":568},[525,5608,5609],{"class":578},"heappush",[525,5611,582],{"class":568},[525,5613,5614],{"class":578},"taken",[525,5616,589],{"class":568},[525,5618,334],{"class":568},[525,5620,3651],{"class":1686},[525,5622,589],{"class":568},[525,5624,5625],{"class":568}," \"",[525,5627,5629],{"class":5628},"sfazB","mail beantwoorden",[525,5631,5632],{"class":568},"\"",[525,5634,5635],{"class":568},"))\n",[525,5637,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658,5661,5663],{"class":527,"line":572},[525,5639,5604],{"class":535},[525,5641,68],{"class":568},[525,5643,5609],{"class":578},[525,5645,582],{"class":568},[525,5647,5614],{"class":578},[525,5649,589],{"class":568},[525,5651,334],{"class":568},[525,5653,149],{"class":1686},[525,5655,589],{"class":568},[525,5657,5625],{"class":568},[525,5659,5660],{"class":5628},"server herstarten",[525,5662,5632],{"class":568},[525,5664,5635],{"class":568},[525,5666,5667,5669,5671,5673,5675,5677,5679,5681,5683,5685,5687,5690,5692],{"class":527,"line":599},[525,5668,5604],{"class":535},[525,5670,68],{"class":568},[525,5672,5609],{"class":578},[525,5674,582],{"class":568},[525,5676,5614],{"class":578},[525,5678,589],{"class":568},[525,5680,334],{"class":568},[525,5682,127],{"class":1686},[525,5684,589],{"class":568},[525,5686,5625],{"class":568},[525,5688,5689],{"class":5628},"koffie halen",[525,5691,5632],{"class":568},[525,5693,5635],{"class":568},[525,5695,5696],{"class":527,"line":617},[525,5697,549],{"emptyLinePlaceholder":548},[525,5699,5700,5703,5706],{"class":527,"line":632},[525,5701,5702],{"class":531},"while",[525,5704,5705],{"class":535}," taken",[525,5707,569],{"class":568},[525,5709,5710,5713,5715,5718,5720,5723,5725,5728,5730,5732,5734],{"class":527,"line":646},[525,5711,5712],{"class":535},"    prioriteit",[525,5714,589],{"class":568},[525,5716,5717],{"class":535}," taak ",[525,5719,880],{"class":568},[525,5721,5722],{"class":535}," heapq",[525,5724,68],{"class":568},[525,5726,5727],{"class":578},"heappop",[525,5729,582],{"class":568},[525,5731,5614],{"class":578},[525,5733,703],{"class":568},[525,5735,5736],{"class":706},"  # kleinste prioriteit eerst\n",[525,5738,5739,5742,5744,5747,5749,5752],{"class":527,"line":651},[525,5740,5741],{"class":578},"    print",[525,5743,582],{"class":568},[525,5745,5746],{"class":578},"prioriteit",[525,5748,589],{"class":568},[525,5750,5751],{"class":578}," taak",[525,5753,756],{"class":568},[525,5755,5756],{"class":527,"line":656},[525,5757,549],{"emptyLinePlaceholder":548},[525,5759,5760],{"class":527,"line":676},[525,5761,5762],{"class":706},"# een bestaande lijst in O(n) omzetten\n",[525,5764,5765,5768,5770,5772,5775,5777,5779,5781,5783,5785,5787,5789,5792,5794,5796,5798,5800],{"class":527,"line":691},[525,5766,5767],{"class":535},"getallen ",[525,5769,880],{"class":568},[525,5771,1274],{"class":568},[525,5773,5774],{"class":1686},"9",[525,5776,589],{"class":568},[525,5778,1716],{"class":1686},[525,5780,589],{"class":568},[525,5782,1721],{"class":1686},[525,5784,589],{"class":568},[525,5786,1701],{"class":1686},[525,5788,589],{"class":568},[525,5790,5791],{"class":1686}," 8",[525,5793,589],{"class":568},[525,5795,4344],{"class":1686},[525,5797,589],{"class":568},[525,5799,1706],{"class":1686},[525,5801,1471],{"class":568},[525,5803,5804,5806,5808,5811,5813,5816],{"class":527,"line":710},[525,5805,5604],{"class":535},[525,5807,68],{"class":568},[525,5809,5810],{"class":578},"heapify",[525,5812,582],{"class":568},[525,5814,5815],{"class":578},"getallen",[525,5817,756],{"class":568},[525,5819,5820,5822,5824,5826,5828],{"class":527,"line":730},[525,5821,1756],{"class":578},[525,5823,582],{"class":568},[525,5825,5815],{"class":578},[525,5827,703],{"class":568},[525,5829,5830],{"class":706},"  # [1, 4, 2, 9, 8, 7, 6]\n",[515,5832,5833],{"v-slot:java":223},[215,5834,5836],{"className":1776,"code":5835,"language":1778,"meta":223,"style":223},"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",[28,5837,5838,5855,5859,5872,5877,5941,5972,5999,6026,6030,6046,6068,6111,6115],{"__ignoreMap":223},[525,5839,5840,5842,5844,5846,5848,5850,5853],{"class":527,"line":528},[525,5841,539],{"class":1686},[525,5843,1787],{"class":560},[525,5845,68],{"class":568},[525,5847,1792],{"class":560},[525,5849,68],{"class":568},[525,5851,5852],{"class":560},"PriorityQueue",[525,5854,1800],{"class":568},[525,5856,5857],{"class":527,"line":545},[525,5858,549],{"emptyLinePlaceholder":548},[525,5860,5861,5863,5865,5868,5870],{"class":527,"line":552},[525,5862,1860],{"class":560},[525,5864,2543],{"class":560},[525,5866,5867],{"class":578}," prioriteiten",[525,5869,4822],{"class":568},[525,5871,1868],{"class":568},[525,5873,5874],{"class":527,"line":557},[525,5875,5876],{"class":706},"    \u002F\u002F min-heap op prioriteit; een int[] is {prioriteit, taaknummer}\n",[525,5878,5879,5882,5884,5886,5889,5892,5894,5896,5899,5902,5904,5906,5909,5911,5914,5917,5919,5922,5924,5926,5928,5930,5932,5934,5936,5938],{"class":527,"line":572},[525,5880,5881],{"class":560},"    PriorityQueue",[525,5883,718],{"class":568},[525,5885,1905],{"class":560},[525,5887,5888],{"class":568},"[]>",[525,5890,5891],{"class":535}," taken ",[525,5893,880],{"class":568},[525,5895,1987],{"class":531},[525,5897,5898],{"class":560}," PriorityQueue",[525,5900,5901],{"class":568},"\u003C>((",[525,5903,3992],{"class":535},[525,5905,589],{"class":568},[525,5907,5908],{"class":535}," y",[525,5910,703],{"class":568},[525,5912,5913],{"class":560}," ->",[525,5915,5916],{"class":535}," Integer",[525,5918,68],{"class":568},[525,5920,5921],{"class":578},"compare",[525,5923,582],{"class":568},[525,5925,3992],{"class":535},[525,5927,4079],{"class":568},[525,5929,4203],{"class":1686},[525,5931,4120],{"class":568},[525,5933,5908],{"class":535},[525,5935,4079],{"class":568},[525,5937,4203],{"class":1686},[525,5939,5940],{"class":568},"]));\n",[525,5942,5943,5946,5948,5950,5952,5955,5957,5960,5962,5964,5966,5969],{"class":527,"line":599},[525,5944,5945],{"class":535},"    taken",[525,5947,68],{"class":568},[525,5949,2597],{"class":578},[525,5951,582],{"class":568},[525,5953,5954],{"class":531},"new",[525,5956,1960],{"class":560},[525,5958,5959],{"class":568},"[]",[525,5961,4845],{"class":568},[525,5963,3651],{"class":1686},[525,5965,589],{"class":568},[525,5967,5968],{"class":1686}," 101",[525,5970,5971],{"class":568},"});\n",[525,5973,5974,5976,5978,5980,5982,5984,5986,5988,5990,5992,5994,5997],{"class":527,"line":617},[525,5975,5945],{"class":535},[525,5977,68],{"class":568},[525,5979,2597],{"class":578},[525,5981,582],{"class":568},[525,5983,5954],{"class":531},[525,5985,1960],{"class":560},[525,5987,5959],{"class":568},[525,5989,4845],{"class":568},[525,5991,149],{"class":1686},[525,5993,589],{"class":568},[525,5995,5996],{"class":1686}," 102",[525,5998,5971],{"class":568},[525,6000,6001,6003,6005,6007,6009,6011,6013,6015,6017,6019,6021,6024],{"class":527,"line":632},[525,6002,5945],{"class":535},[525,6004,68],{"class":568},[525,6006,2597],{"class":578},[525,6008,582],{"class":568},[525,6010,5954],{"class":531},[525,6012,1960],{"class":560},[525,6014,5959],{"class":568},[525,6016,4845],{"class":568},[525,6018,127],{"class":1686},[525,6020,589],{"class":568},[525,6022,6023],{"class":1686}," 103",[525,6025,5971],{"class":568},[525,6027,6028],{"class":527,"line":646},[525,6029,549],{"emptyLinePlaceholder":548},[525,6031,6032,6034,6036,6038,6040,6042,6044],{"class":527,"line":651},[525,6033,845],{"class":531},[525,6035,2973],{"class":568},[525,6037,5614],{"class":535},[525,6039,68],{"class":568},[525,6041,2981],{"class":578},[525,6043,2984],{"class":568},[525,6045,1868],{"class":568},[525,6047,6048,6050,6052,6054,6056,6058,6060,6062,6065],{"class":527,"line":656},[525,6049,4807],{"class":560},[525,6051,5959],{"class":568},[525,6053,5368],{"class":535},[525,6055,880],{"class":568},[525,6057,5705],{"class":535},[525,6059,68],{"class":568},[525,6061,3001],{"class":578},[525,6063,6064],{"class":568},"();",[525,6066,6067],{"class":706}," \u002F\u002F kleinste prioriteit eerst\n",[525,6069,6070,6073,6075,6078,6080,6083,6085,6088,6090,6092,6094,6096,6098,6100,6102,6104,6106,6108],{"class":527,"line":676},[525,6071,6072],{"class":535},"        System",[525,6074,68],{"class":568},[525,6076,6077],{"class":535},"out",[525,6079,68],{"class":568},[525,6081,6082],{"class":578},"println",[525,6084,582],{"class":568},[525,6086,6087],{"class":535},"t",[525,6089,4079],{"class":568},[525,6091,4203],{"class":1686},[525,6093,1283],{"class":568},[525,6095,1286],{"class":568},[525,6097,5625],{"class":568},[525,6099,5625],{"class":568},[525,6101,1286],{"class":568},[525,6103,5427],{"class":535},[525,6105,4079],{"class":568},[525,6107,149],{"class":1686},[525,6109,6110],{"class":568},"]);\n",[525,6112,6113],{"class":527,"line":691},[525,6114,1930],{"class":568},[525,6116,6117],{"class":527,"line":710},[525,6118,1935],{"class":568},[10,6120,6121,6123,6124,6127,6128,6130,6131,6134,6135,6138,6139,6141,6142,278,6144,6147,6148,6150,6151,68],{},[28,6122,5604],{}," werkt op een gewone lijst en is altijd een min-heap; voor een max-heap sla je ",[28,6125,6126],{},"-x"," op. Java's\n",[28,6129,5852],{}," is standaard ook een min-heap; met ",[28,6132,6133],{},"Comparator.reverseOrder()"," maak je er een max-heap\nvan. Let op: ",[28,6136,6137],{},"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(",[28,6140,3901],{}," wordt bij ",[28,6143,5604],{},[28,6145,6146],{},"[3, 3, 5]"," in plaats van ",[28,6149,3909],{},"). Traceer op het tentamen dus\nmet de hand, niet met ",[28,6152,5604],{},[33,6154,3235],{"id":3234},[90,6156,6157,6166],{},[93,6158,6159],{},[96,6160,6161,6163],{},[99,6162,3244],{},[99,6164,6165],{},"Tijd",[109,6167,6168,6177,6186,6195,6207,6215],{},[96,6169,6170,6173],{},[114,6171,6172],{},"Minimum bekijken",[114,6174,6175],{},[28,6176,3216],{},[96,6178,6179,6182],{},[114,6180,6181],{},"Invoegen (sift-up)",[114,6183,6184],{},[28,6185,3220],{},[96,6187,6188,6191],{},[114,6189,6190],{},"Minimum verwijderen (sift-down)",[114,6192,6193],{},[28,6194,3220],{},[96,6196,6197,6203],{},[114,6198,6199,6200,6202],{},"Heapify van ",[28,6201,3125],{}," elementen",[114,6204,6205],{},[28,6206,3165],{},[96,6208,6209,6211],{},[114,6210,5547],{},[114,6212,6213],{},[28,6214,5542],{},[96,6216,6217,6220],{},[114,6218,6219],{},"Willekeurig element zoeken",[114,6221,6222],{},[28,6223,3165],{},[33,6225,3330],{"id":3329},[3332,6227,6228,6237,6246,6263,6271],{},[49,6229,6230,6233,6234,6236],{},[41,6231,6232],{},"Met het verkeerde kind wisselen."," Bij sift-down wissel je met het ",[41,6235,341],{}," kind, niet met\nhet linker of met het eerste kind dat kleiner is dan de ouder. Bij gelijke kinderen: het linker.",[49,6238,6239,6242,6243,6245],{},[41,6240,6241],{},"De wortel weghalen en alles opschuiven."," Je verplaatst het ",[41,6244,3784],{}," element naar de wortel;\nde rest van de array blijft staan.",[49,6247,6248,6251,6252,467,6254,6256,6257,467,6260,6262],{},[41,6249,6250],{},"Verkeerde indexformules."," Bij een 0-geïndexeerde array zijn de kinderen ",[28,6253,3550],{},[28,6255,3562],{},".\nDe formules ",[28,6258,6259],{},"2i",[28,6261,3550],{}," horen bij een 1-geïndexeerde heap.",[49,6264,6265,278,6268,6270],{},[41,6266,6267],{},"Denken dat een heap gesorteerd is.",[28,6269,3568],{}," is een geldige heap, maar geen\ngesorteerde array.",[49,6272,6273,6276],{},[41,6274,6275],{},"Te vroeg stoppen met sift-up of sift-down."," Een element kan meerdere niveaus moeten verhuizen;\ncontroleer na elke wissel opnieuw.",[33,6278,3397],{"id":3396},[46,6280,6281,6288,6301,6306,6314],{},[49,6282,6283,6284,6287],{},"Een binaire min-heap is een volledige boom in een array waarin elke ouder ",[28,6285,6286],{},"≤"," zijn kinderen is.",[49,6289,6290,6291,354,6293,6296,6297,467,6299,68],{},"Ouder van ",[28,6292,3533],{},[28,6294,6295],{},"⌊(i - 1)\u002F2⌋",", kinderen zijn ",[28,6298,3550],{},[28,6300,3562],{},[49,6302,6303,6304,68],{},"Invoegen: achteraan toevoegen en sift-up. Minimum verwijderen: laatste naar de wortel en sift-down\nmet het kleinste kind (bij gelijkspel links). Beide ",[28,6305,3220],{},[49,6307,6308,6309,6311,6312,68],{},"Heapify bouwt een heap in ",[28,6310,3165],{},"; heapsort sorteert in ",[28,6313,5542],{},[49,6315,6316,6317,6319,6320,6322],{},"Gebruik in de praktijk ",[28,6318,5604],{}," (Python) of ",[28,6321,5852],{}," (Java) als prioriteitswachtrij.",[3424,6324,6325],{},"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":223,"searchDepth":545,"depth":545,"links":6327},[6328,6329,6330,6331,6332,6333,6334,6335,6336,6337],{"id":3479,"depth":545,"text":3480},{"id":3591,"depth":545,"text":3592},{"id":3769,"depth":545,"text":3770},{"id":28,"depth":545,"text":510},{"id":5440,"depth":545,"text":5441},{"id":5546,"depth":545,"text":5547},{"id":5566,"depth":545,"text":5567},{"id":3234,"depth":545,"text":3235},{"id":3329,"depth":545,"text":3330},{"id":3396,"depth":545,"text":3397},"Wat is een binaire heap? Leer invoegen met sift-up, het minimum verwijderen met sift-down, heapify en heapsort, stap voor stap met code in Python en Java.","i-lucide-triangle",{},"\u002Fpracticely-dsa\u002Fheaps",{"title":3453,"description":6338},"practicely-dsa\u002Fheaps","heaps","tehA8rYAMeP8QOZWDsroQdXlbmGCA7-KZP3piHQR8n0",{"id":6347,"title":6348,"body":6349,"description":11102,"extension":3442,"icon":11103,"meta":11104,"navigation":548,"order":632,"path":11105,"seo":11106,"stem":11107,"topic":501,"__hash__":11108},"practicelyDsa\u002Fpracticely-dsa\u002Fgrafen.md","Grafen uitgelegd: BFS, DFS, Dijkstra en topologisch sorteren",{"type":7,"value":6350,"toc":11091},[6351,6366,6369,6373,6444,6451,6454,6460,6464,6489,6548,6678,6754,6761,6765,6779,6784,6895,6908,6912,6922,6927,6996,7011,7014,8311,8315,8322,8338,8341,8347,8357,8514,8517,8552,8558,8561,9753,9757,9781,9784,9801,9804,9810,9813,9899,9909,10877,10879,10984,11009,11011,11063,11065,11088],[10,6352,6353,6354,6357,6358,6361,6362,6365],{},"Een graaf (",[14,6355,6356],{},"graph",") is een verzameling knopen (",[14,6359,6360],{},"vertices",") die met kanten (",[14,6363,6364],{},"edges",") verbonden zijn.\nDat klinkt abstract, maar bijna alles is een graaf: wegen tussen steden, vrienden op een sociaal\nnetwerk, links tussen webpagina's, vakken met hun voorkennis, of pakketten die van elkaar afhangen.",[10,6367,6368],{},"Wie grafen beheerst, kan een hele klasse problemen oplossen met een handvol algoritmen. Op het\ntentamen traceer je BFS, DFS en Dijkstra met de hand. In sollicitaties vermomt een graafprobleem zich\nvaak als iets anders (\"hoeveel eilanden staan er in dit raster?\"). En in de praktijk draaien\nrouteplanners, build-tools en package managers op precies deze algoritmen.",[33,6370,6372],{"id":6371},"begrippen","Begrippen",[46,6374,6375,6388,6400,6409,6418,6434],{},[49,6376,6377,334,6380,6383,6384,6387],{},[41,6378,6379],{},"Ongericht",[14,6381,6382],{},"undirected","): een kant ",[28,6385,6386],{},"A–B"," kun je in beide richtingen volgen (vriendschap).",[49,6389,6390,334,6393,6383,6396,6399],{},[41,6391,6392],{},"Gericht",[14,6394,6395],{},"directed",[28,6397,6398],{},"A → B"," heeft één richting (volgen op sociale media, \"A is\nvoorkennis voor B\").",[49,6401,6402,334,6405,6408],{},[41,6403,6404],{},"Gewogen",[14,6406,6407],{},"weighted","): elke kant heeft een getal, bijvoorbeeld een afstand of een reistijd.",[49,6410,6411,334,6414,6417],{},[41,6412,6413],{},"Buren",[14,6415,6416],{},"neighbours","): de knopen die met één kant bereikbaar zijn.",[49,6419,6420,334,6423,6426,6427,6430,6431,507],{},[41,6421,6422],{},"Graad",[14,6424,6425],{},"degree","): het aantal kanten aan een knoop. Bij een gerichte graaf onderscheid je\ningangsgraad (",[14,6428,6429],{},"in-degree",") en uitgangsgraad (",[14,6432,6433],{},"out-degree",[49,6435,6436,6439,6440,6443],{},[28,6437,6438],{},"V"," is het aantal knopen, ",[28,6441,6442],{},"E"," het aantal kanten.",[10,6445,6446,6447,6450],{},"Knopen noteren we als hoofdletters. ",[41,6448,6449],{},"Buren bekijk je altijd in alfabetische volgorde","; anders zijn\ner meerdere goede antwoorden op een traceervraag.",[10,6452,6453],{},"We gebruiken deze ongerichte graaf met zes knopen en zeven kanten:",[215,6455,6458],{"className":6456,"code":6457,"language":220},[218],"A --- B --- C\n|     |     |\nD --- E --- F\n",[28,6459,6457],{"__ignoreMap":223},[33,6461,6463],{"id":6462},"representatie-lijst-of-matrix","Representatie: lijst of matrix",[10,6465,6466,6467,334,6470,6473,6474,6477,6478,6481,6482,6485,6486,6488],{},"Een ",[41,6468,6469],{},"adjacency list",[14,6471,6472],{},"buurlijst",") slaat per knoop de lijst van buren op. Een ",[41,6475,6476],{},"adjacency matrix","\n(",[14,6479,6480],{},"buurmatrix",") is een ",[28,6483,6484],{},"V × V","-tabel met een ",[28,6487,149],{}," als er een kant is.",[90,6490,6491,6499],{},[93,6492,6493],{},[96,6494,6495,6497],{},[99,6496,1953],{},[99,6498,6413],{},[109,6500,6501,6509,6517,6525,6533,6540],{},[96,6502,6503,6506],{},[114,6504,6505],{},"A",[114,6507,6508],{},"B, D",[96,6510,6511,6514],{},[114,6512,6513],{},"B",[114,6515,6516],{},"A, C, E",[96,6518,6519,6522],{},[114,6520,6521],{},"C",[114,6523,6524],{},"B, F",[96,6526,6527,6530],{},[114,6528,6529],{},"D",[114,6531,6532],{},"A, E",[96,6534,6535,6537],{},[114,6536,6442],{},[114,6538,6539],{},"B, D, F",[96,6541,6542,6545],{},[114,6543,6544],{},"F",[114,6546,6547],{},"C, E",[90,6549,6550,6568],{},[93,6551,6552],{},[96,6553,6554,6556,6558,6560,6562,6564,6566],{},[99,6555],{},[99,6557,6505],{},[99,6559,6513],{},[99,6561,6521],{},[99,6563,6529],{},[99,6565,6442],{},[99,6567,6544],{},[109,6569,6570,6588,6606,6624,6642,6660],{},[96,6571,6572,6576,6578,6580,6582,6584,6586],{},[114,6573,6574],{},[41,6575,6505],{},[114,6577,4203],{},[114,6579,149],{},[114,6581,4203],{},[114,6583,149],{},[114,6585,4203],{},[114,6587,4203],{},[96,6589,6590,6594,6596,6598,6600,6602,6604],{},[114,6591,6592],{},[41,6593,6513],{},[114,6595,149],{},[114,6597,4203],{},[114,6599,149],{},[114,6601,4203],{},[114,6603,149],{},[114,6605,4203],{},[96,6607,6608,6612,6614,6616,6618,6620,6622],{},[114,6609,6610],{},[41,6611,6521],{},[114,6613,4203],{},[114,6615,149],{},[114,6617,4203],{},[114,6619,4203],{},[114,6621,4203],{},[114,6623,149],{},[96,6625,6626,6630,6632,6634,6636,6638,6640],{},[114,6627,6628],{},[41,6629,6529],{},[114,6631,149],{},[114,6633,4203],{},[114,6635,4203],{},[114,6637,4203],{},[114,6639,149],{},[114,6641,4203],{},[96,6643,6644,6648,6650,6652,6654,6656,6658],{},[114,6645,6646],{},[41,6647,6442],{},[114,6649,4203],{},[114,6651,149],{},[114,6653,4203],{},[114,6655,149],{},[114,6657,4203],{},[114,6659,149],{},[96,6661,6662,6666,6668,6670,6672,6674,6676],{},[114,6663,6664],{},[41,6665,6544],{},[114,6667,4203],{},[114,6669,4203],{},[114,6671,149],{},[114,6673,4203],{},[114,6675,149],{},[114,6677,4203],{},[90,6679,6680,6692],{},[93,6681,6682],{},[96,6683,6684,6686,6689],{},[99,6685],{},[99,6687,6688],{},"Adjacency list",[99,6690,6691],{},"Adjacency matrix",[109,6693,6694,6709,6726,6743],{},[96,6695,6696,6699,6704],{},[114,6697,6698],{},"Geheugen",[114,6700,6701],{},[28,6702,6703],{},"O(V + E)",[114,6705,6706],{},[28,6707,6708],{},"O(V²)",[96,6710,6711,6717,6722],{},[114,6712,6713,6714,2178],{},"Bestaat kant ",[28,6715,6716],{},"u–v",[114,6718,6719],{},[28,6720,6721],{},"O(graad van u)",[114,6723,6724],{},[28,6725,3216],{},[96,6727,6728,6734,6738],{},[114,6729,6730,6731],{},"Alle buren van ",[28,6732,6733],{},"u",[114,6735,6736],{},[28,6737,6721],{},[114,6739,6740],{},[28,6741,6742],{},"O(V)",[96,6744,6745,6748,6751],{},[114,6746,6747],{},"Geschikt voor",[114,6749,6750],{},"ijle grafen (weinig kanten)",[114,6752,6753],{},"dichte grafen",[10,6755,6756,6757,6760],{},"De meeste echte grafen zijn ijl (",[14,6758,6759],{},"sparse","): een wegennet heeft miljoenen kruispunten, maar elk\nkruispunt maar een paar wegen. Daarom is de adjacency list de standaard. Bij een ongerichte graaf\nstaat elke kant twee keer in de lijst (en is de matrix symmetrisch).",[33,6762,6764],{"id":6763},"breedte-eerst-zoeken-bfs","Breedte-eerst zoeken (BFS)",[10,6766,6767,6768,6771,6772,6774,6775,6778],{},"Breedte-eerst zoeken (",[14,6769,6770],{},"breadth-first search",") verkent de graaf in lagen: eerst de startknoop, dan\nalle buren, dan de buren daarvan. Het gebruikt een ",[19,6773,2976],{"href":505},".\nEen knoop telt als ",[41,6776,6777],{},"bezocht zodra hij in de wachtrij komt",", zodat hij er nooit twee keer in staat.",[10,6780,6781,6782,2187],{},"BFS vanaf ",[28,6783,6505],{},[90,6785,6786,6801],{},[93,6787,6788],{},[96,6789,6790,6792,6795,6798],{},[99,6791,3626],{},[99,6793,6794],{},"Haal uit wachtrij",[99,6796,6797],{},"Nieuwe buren erbij",[99,6799,6800],{},"Wachtrij daarna",[109,6802,6803,6816,6829,6843,6857,6870,6883],{},[96,6804,6805,6807,6809,6811],{},[114,6806,5491],{},[114,6808],{},[114,6810,6505],{},[114,6812,6813],{},[28,6814,6815],{},"[A]",[96,6817,6818,6820,6822,6824],{},[114,6819,149],{},[114,6821,6505],{},[114,6823,6508],{},[114,6825,6826],{},[28,6827,6828],{},"[B, D]",[96,6830,6831,6833,6835,6838],{},[114,6832,3651],{},[114,6834,6513],{},[114,6836,6837],{},"C, E (A is al bezocht)",[114,6839,6840],{},[28,6841,6842],{},"[D, C, E]",[96,6844,6845,6847,6849,6852],{},[114,6846,127],{},[114,6848,6529],{},[114,6850,6851],{},"geen (A, E al bezocht)",[114,6853,6854],{},[28,6855,6856],{},"[C, E]",[96,6858,6859,6861,6863,6865],{},[114,6860,182],{},[114,6862,6521],{},[114,6864,6544],{},[114,6866,6867],{},[28,6868,6869],{},"[E, F]",[96,6871,6872,6874,6876,6878],{},[114,6873,265],{},[114,6875,6442],{},[114,6877,3507],{},[114,6879,6880],{},[28,6881,6882],{},"[F]",[96,6884,6885,6887,6889,6891],{},[114,6886,160],{},[114,6888,6544],{},[114,6890,3507],{},[114,6892,6893],{},[28,6894,5959],{},[10,6896,6897,6898,6901,6902,6904,6905,6907],{},"Bezoekvolgorde: ",[41,6899,6900],{},"A, B, D, C, E, F",". In een ongewogen graaf vindt BFS de kortste route (in aantal\nkanten): ",[28,6903,6544],{}," ligt op afstand 3 van ",[28,6906,6505],{},", en BFS bereikt hem pas in de derde laag.",[33,6909,6911],{"id":6910},"diepte-eerst-zoeken-dfs","Diepte-eerst zoeken (DFS)",[10,6913,6914,6915,6918,6919,68],{},"Diepte-eerst zoeken (",[14,6916,6917],{},"depth-first search",") gaat zo diep mogelijk één kant op, en keert pas terug als\ner geen onbezochte buur meer is. Recursief is dat het natuurlijkst; de recursie werkt als een\n",[19,6920,6921],{"href":505},"stapel",[10,6923,6924,6925,2187],{},"DFS vanaf ",[28,6926,6505],{},[90,6928,6929,6941],{},[93,6930,6931],{},[96,6932,6933,6935,6938],{},[99,6934,3626],{},[99,6936,6937],{},"Bezoek",[99,6939,6940],{},"Waarom",[109,6942,6943,6951,6960,6969,6978,6987],{},[96,6944,6945,6947,6949],{},[114,6946,149],{},[114,6948,6505],{},[114,6950,5491],{},[96,6952,6953,6955,6957],{},[114,6954,3651],{},[114,6956,6513],{},[114,6958,6959],{},"eerste onbezochte buur van A",[96,6961,6962,6964,6966],{},[114,6963,127],{},[114,6965,6521],{},[114,6967,6968],{},"eerste onbezochte buur van B (A is al bezocht)",[96,6970,6971,6973,6975],{},[114,6972,182],{},[114,6974,6544],{},[114,6976,6977],{},"eerste onbezochte buur van C",[96,6979,6980,6982,6984],{},[114,6981,265],{},[114,6983,6442],{},[114,6985,6986],{},"eerste onbezochte buur van F (C al bezocht)",[96,6988,6989,6991,6993],{},[114,6990,160],{},[114,6992,6529],{},[114,6994,6995],{},"eerste onbezochte buur van E (B al bezocht)",[10,6997,6998,6999,7001,7002,7004,7005,7007,7008,68],{},"Daarna heeft ",[28,7000,6529],{}," geen onbezochte buren meer; de recursie keert helemaal terug naar ",[28,7003,6505],{},", waar ",[28,7006,6529],{}," nu al\nbezocht is. Bezoekvolgorde: ",[41,7009,7010],{},"A, B, C, F, E, D",[10,7012,7013],{},"Zelfde graaf, zelfde start, toch een andere volgorde dan BFS. DFS gebruik je voor het vinden van\ncycli, samenhangende componenten en doolhoven.",[512,7015,7016,7639],{},[515,7017,7018],{"v-slot:python":223},[215,7019,7021],{"className":519,"code":7020,"language":521,"meta":223,"style":223},"from collections import deque\n\ngraaf = {\n    \"A\": [\"B\", \"D\"], \"B\": [\"A\", \"C\", \"E\"], \"C\": [\"B\", \"F\"],\n    \"D\": [\"A\", \"E\"], \"E\": [\"B\", \"D\", \"F\"], \"F\": [\"C\", \"E\"],\n}\n\n\ndef bfs(graaf, start):\n    bezocht = {start}\n    wachtrij = deque([start])\n    volgorde = []\n    while wachtrij:\n        u = wachtrij.popleft()\n        volgorde.append(u)\n        for v in sorted(graaf[u]):  # buren alfabetisch\n            if v not in bezocht:\n                bezocht.add(v)  # bezocht zodra hij in de wachtrij komt\n                wachtrij.append(v)\n    return volgorde\n\n\ndef dfs(graaf, u, bezocht=None, volgorde=None):\n    if bezocht is None:\n        bezocht, volgorde = set(), []\n    bezocht.add(u)\n    volgorde.append(u)\n    for v in sorted(graaf[u]):  # buren alfabetisch\n        if v not in bezocht:\n            dfs(graaf, v, bezocht, volgorde)\n    return volgorde\n\n\nprint(bfs(graaf, \"A\"))  # ['A', 'B', 'D', 'C', 'E', 'F']\nprint(dfs(graaf, \"A\"))  # ['A', 'B', 'C', 'F', 'E', 'D']\n",[28,7022,7023,7033,7037,7046,7136,7224,7228,7232,7236,7255,7268,7284,7293,7301,7316,7331,7357,7374,7393,7407,7414,7418,7422,7451,7462,7482,7497,7512,7535,7549,7573,7579,7583,7587,7613],{"__ignoreMap":223},[525,7024,7025,7027,7029,7031],{"class":527,"line":528},[525,7026,532],{"class":531},[525,7028,536],{"class":535},[525,7030,539],{"class":531},[525,7032,542],{"class":535},[525,7034,7035],{"class":527,"line":545},[525,7036,549],{"emptyLinePlaceholder":548},[525,7038,7039,7042,7044],{"class":527,"line":552},[525,7040,7041],{"class":535},"graaf ",[525,7043,880],{"class":568},[525,7045,1868],{"class":568},[525,7047,7048,7051,7053,7055,7057,7059,7061,7063,7065,7067,7069,7071,7073,7075,7077,7079,7081,7083,7085,7087,7089,7091,7093,7095,7097,7099,7101,7103,7105,7107,7109,7111,7113,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133],{"class":527,"line":557},[525,7049,7050],{"class":568},"    \"",[525,7052,6505],{"class":5628},[525,7054,5632],{"class":568},[525,7056,2187],{"class":568},[525,7058,1274],{"class":568},[525,7060,5632],{"class":568},[525,7062,6513],{"class":5628},[525,7064,5632],{"class":568},[525,7066,589],{"class":568},[525,7068,5625],{"class":568},[525,7070,6529],{"class":5628},[525,7072,5632],{"class":568},[525,7074,4120],{"class":568},[525,7076,5625],{"class":568},[525,7078,6513],{"class":5628},[525,7080,5632],{"class":568},[525,7082,2187],{"class":568},[525,7084,1274],{"class":568},[525,7086,5632],{"class":568},[525,7088,6505],{"class":5628},[525,7090,5632],{"class":568},[525,7092,589],{"class":568},[525,7094,5625],{"class":568},[525,7096,6521],{"class":5628},[525,7098,5632],{"class":568},[525,7100,589],{"class":568},[525,7102,5625],{"class":568},[525,7104,6442],{"class":5628},[525,7106,5632],{"class":568},[525,7108,4120],{"class":568},[525,7110,5625],{"class":568},[525,7112,6521],{"class":5628},[525,7114,5632],{"class":568},[525,7116,2187],{"class":568},[525,7118,1274],{"class":568},[525,7120,5632],{"class":568},[525,7122,6513],{"class":5628},[525,7124,5632],{"class":568},[525,7126,589],{"class":568},[525,7128,5625],{"class":568},[525,7130,6544],{"class":5628},[525,7132,5632],{"class":568},[525,7134,7135],{"class":568},"],\n",[525,7137,7138,7140,7142,7144,7146,7148,7150,7152,7154,7156,7158,7160,7162,7164,7166,7168,7170,7172,7174,7176,7178,7180,7182,7184,7186,7188,7190,7192,7194,7196,7198,7200,7202,7204,7206,7208,7210,7212,7214,7216,7218,7220,7222],{"class":527,"line":572},[525,7139,7050],{"class":568},[525,7141,6529],{"class":5628},[525,7143,5632],{"class":568},[525,7145,2187],{"class":568},[525,7147,1274],{"class":568},[525,7149,5632],{"class":568},[525,7151,6505],{"class":5628},[525,7153,5632],{"class":568},[525,7155,589],{"class":568},[525,7157,5625],{"class":568},[525,7159,6442],{"class":5628},[525,7161,5632],{"class":568},[525,7163,4120],{"class":568},[525,7165,5625],{"class":568},[525,7167,6442],{"class":5628},[525,7169,5632],{"class":568},[525,7171,2187],{"class":568},[525,7173,1274],{"class":568},[525,7175,5632],{"class":568},[525,7177,6513],{"class":5628},[525,7179,5632],{"class":568},[525,7181,589],{"class":568},[525,7183,5625],{"class":568},[525,7185,6529],{"class":5628},[525,7187,5632],{"class":568},[525,7189,589],{"class":568},[525,7191,5625],{"class":568},[525,7193,6544],{"class":5628},[525,7195,5632],{"class":568},[525,7197,4120],{"class":568},[525,7199,5625],{"class":568},[525,7201,6544],{"class":5628},[525,7203,5632],{"class":568},[525,7205,2187],{"class":568},[525,7207,1274],{"class":568},[525,7209,5632],{"class":568},[525,7211,6521],{"class":5628},[525,7213,5632],{"class":568},[525,7215,589],{"class":568},[525,7217,5625],{"class":568},[525,7219,6442],{"class":5628},[525,7221,5632],{"class":568},[525,7223,7135],{"class":568},[525,7225,7226],{"class":527,"line":599},[525,7227,1935],{"class":568},[525,7229,7230],{"class":527,"line":617},[525,7231,549],{"emptyLinePlaceholder":548},[525,7233,7234],{"class":527,"line":632},[525,7235,549],{"emptyLinePlaceholder":548},[525,7237,7238,7240,7243,7245,7248,7250,7253],{"class":527,"line":646},[525,7239,659],{"class":560},[525,7241,7242],{"class":578}," bfs",[525,7244,582],{"class":568},[525,7246,7247],{"class":592},"graaf",[525,7249,589],{"class":568},[525,7251,7252],{"class":592}," start",[525,7254,596],{"class":568},[525,7256,7257,7260,7262,7264,7266],{"class":527,"line":651},[525,7258,7259],{"class":535},"    bezocht ",[525,7261,880],{"class":568},[525,7263,4845],{"class":568},[525,7265,5491],{"class":535},[525,7267,1935],{"class":568},[525,7269,7270,7273,7275,7277,7279,7281],{"class":527,"line":656},[525,7271,7272],{"class":535},"    wachtrij ",[525,7274,880],{"class":568},[525,7276,1514],{"class":578},[525,7278,1517],{"class":568},[525,7280,5491],{"class":578},[525,7282,7283],{"class":568},"])\n",[525,7285,7286,7289,7291],{"class":527,"line":676},[525,7287,7288],{"class":535},"    volgorde ",[525,7290,880],{"class":568},[525,7292,3954],{"class":568},[525,7294,7295,7297,7299],{"class":527,"line":691},[525,7296,845],{"class":531},[525,7298,1540],{"class":535},[525,7300,569],{"class":568},[525,7302,7303,7306,7308,7310,7312,7314],{"class":527,"line":710},[525,7304,7305],{"class":535},"        u ",[525,7307,880],{"class":568},[525,7309,1540],{"class":535},[525,7311,68],{"class":568},[525,7313,1557],{"class":578},[525,7315,1560],{"class":568},[525,7317,7318,7321,7323,7325,7327,7329],{"class":527,"line":730},[525,7319,7320],{"class":535},"        volgorde",[525,7322,68],{"class":568},[525,7324,1571],{"class":578},[525,7326,582],{"class":568},[525,7328,6733],{"class":578},[525,7330,756],{"class":568},[525,7332,7333,7335,7338,7340,7343,7345,7347,7349,7351,7354],{"class":527,"line":759},[525,7334,1587],{"class":531},[525,7336,7337],{"class":535}," v ",[525,7339,466],{"class":531},[525,7341,7342],{"class":578}," sorted",[525,7344,582],{"class":568},[525,7346,7247],{"class":578},[525,7348,4079],{"class":568},[525,7350,6733],{"class":578},[525,7352,7353],{"class":568},"]):",[525,7355,7356],{"class":706},"  # buren alfabetisch\n",[525,7358,7359,7361,7363,7366,7369,7372],{"class":527,"line":778},[525,7360,1617],{"class":531},[525,7362,7337],{"class":535},[525,7364,7365],{"class":568},"not",[525,7367,7368],{"class":568}," in",[525,7370,7371],{"class":535}," bezocht",[525,7373,569],{"class":568},[525,7375,7376,7379,7381,7383,7385,7388,7390],{"class":527,"line":805},[525,7377,7378],{"class":535},"                bezocht",[525,7380,68],{"class":568},[525,7382,2597],{"class":578},[525,7384,582],{"class":568},[525,7386,7387],{"class":578},"v",[525,7389,703],{"class":568},[525,7391,7392],{"class":706},"  # bezocht zodra hij in de wachtrij komt\n",[525,7394,7395,7397,7399,7401,7403,7405],{"class":527,"line":814},[525,7396,1631],{"class":535},[525,7398,68],{"class":568},[525,7400,1571],{"class":578},[525,7402,582],{"class":568},[525,7404,7387],{"class":578},[525,7406,756],{"class":568},[525,7408,7409,7411],{"class":527,"line":819},[525,7410,808],{"class":531},[525,7412,7413],{"class":535}," volgorde\n",[525,7415,7416],{"class":527,"line":824},[525,7417,549],{"emptyLinePlaceholder":548},[525,7419,7420],{"class":527,"line":842},[525,7421,549],{"emptyLinePlaceholder":548},[525,7423,7424,7426,7429,7431,7433,7435,7438,7440,7442,7445,7448],{"class":527,"line":874},[525,7425,659],{"class":560},[525,7427,7428],{"class":578}," dfs",[525,7430,582],{"class":568},[525,7432,7247],{"class":592},[525,7434,589],{"class":568},[525,7436,7437],{"class":592}," u",[525,7439,589],{"class":568},[525,7441,7371],{"class":592},[525,7443,7444],{"class":568},"=None,",[525,7446,7447],{"class":592}," volgorde",[525,7449,7450],{"class":568},"=None):\n",[525,7452,7453,7455,7458,7460],{"class":527,"line":912},[525,7454,679],{"class":531},[525,7456,7457],{"class":535}," bezocht ",[525,7459,685],{"class":568},[525,7461,688],{"class":568},[525,7463,7464,7467,7469,7472,7474,7477,7480],{"class":527,"line":919},[525,7465,7466],{"class":535},"        bezocht",[525,7468,589],{"class":568},[525,7470,7471],{"class":535}," volgorde ",[525,7473,880],{"class":568},[525,7475,7476],{"class":564}," set",[525,7478,7479],{"class":568},"(),",[525,7481,3954],{"class":568},[525,7483,7484,7487,7489,7491,7493,7495],{"class":527,"line":924},[525,7485,7486],{"class":535},"    bezocht",[525,7488,68],{"class":568},[525,7490,2597],{"class":578},[525,7492,582],{"class":568},[525,7494,6733],{"class":578},[525,7496,756],{"class":568},[525,7498,7499,7502,7504,7506,7508,7510],{"class":527,"line":929},[525,7500,7501],{"class":535},"    volgorde",[525,7503,68],{"class":568},[525,7505,1571],{"class":578},[525,7507,582],{"class":568},[525,7509,6733],{"class":578},[525,7511,756],{"class":568},[525,7513,7514,7517,7519,7521,7523,7525,7527,7529,7531,7533],{"class":527,"line":947},[525,7515,7516],{"class":531},"    for",[525,7518,7337],{"class":535},[525,7520,466],{"class":531},[525,7522,7342],{"class":578},[525,7524,582],{"class":568},[525,7526,7247],{"class":578},[525,7528,4079],{"class":568},[525,7530,6733],{"class":578},[525,7532,7353],{"class":568},[525,7534,7356],{"class":706},[525,7536,7537,7539,7541,7543,7545,7547],{"class":527,"line":958},[525,7538,1064],{"class":531},[525,7540,7337],{"class":535},[525,7542,7365],{"class":568},[525,7544,7368],{"class":568},[525,7546,7371],{"class":535},[525,7548,569],{"class":568},[525,7550,7551,7554,7556,7558,7560,7563,7565,7567,7569,7571],{"class":527,"line":965},[525,7552,7553],{"class":578},"            dfs",[525,7555,582],{"class":568},[525,7557,7247],{"class":578},[525,7559,589],{"class":568},[525,7561,7562],{"class":578}," v",[525,7564,589],{"class":568},[525,7566,7371],{"class":578},[525,7568,589],{"class":568},[525,7570,7447],{"class":578},[525,7572,756],{"class":568},[525,7574,7575,7577],{"class":527,"line":982},[525,7576,808],{"class":531},[525,7578,7413],{"class":535},[525,7580,7581],{"class":527,"line":1009},[525,7582,549],{"emptyLinePlaceholder":548},[525,7584,7585],{"class":527,"line":1026},[525,7586,549],{"emptyLinePlaceholder":548},[525,7588,7589,7591,7593,7596,7598,7600,7602,7604,7606,7608,7610],{"class":527,"line":1053},[525,7590,1756],{"class":578},[525,7592,582],{"class":568},[525,7594,7595],{"class":578},"bfs",[525,7597,582],{"class":568},[525,7599,7247],{"class":578},[525,7601,589],{"class":568},[525,7603,5625],{"class":568},[525,7605,6505],{"class":5628},[525,7607,5632],{"class":568},[525,7609,1768],{"class":568},[525,7611,7612],{"class":706},"  # ['A', 'B', 'D', 'C', 'E', 'F']\n",[525,7614,7615,7617,7619,7622,7624,7626,7628,7630,7632,7634,7636],{"class":527,"line":1061},[525,7616,1756],{"class":578},[525,7618,582],{"class":568},[525,7620,7621],{"class":578},"dfs",[525,7623,582],{"class":568},[525,7625,7247],{"class":578},[525,7627,589],{"class":568},[525,7629,5625],{"class":568},[525,7631,6505],{"class":5628},[525,7633,5632],{"class":568},[525,7635,1768],{"class":568},[525,7637,7638],{"class":706},"  # ['A', 'B', 'C', 'F', 'E', 'D']\n",[515,7640,7641],{"v-slot:java":223},[215,7642,7644],{"className":1776,"code":7643,"language":1778,"meta":223,"style":223},"import java.util.*;\n\nstatic List\u003CString> bfs(Map\u003CString, List\u003CString>> graaf, String start) {\n    Set\u003CString> bezocht = new HashSet\u003C>(List.of(start));\n    Deque\u003CString> wachtrij = new ArrayDeque\u003C>(List.of(start));\n    List\u003CString> volgorde = new ArrayList\u003C>();\n    while (!wachtrij.isEmpty()) {\n        String u = wachtrij.poll();\n        volgorde.add(u);\n        List\u003CString> buren = new ArrayList\u003C>(graaf.get(u));\n        Collections.sort(buren); \u002F\u002F buren alfabetisch\n        for (String v : buren) {\n            if (bezocht.add(v)) { \u002F\u002F bezocht zodra hij in de wachtrij komt\n                wachtrij.add(v);\n            }\n        }\n    }\n    return volgorde;\n}\n\nstatic List\u003CString> dfs(Map\u003CString, List\u003CString>> graaf, String start) {\n    List\u003CString> volgorde = new ArrayList\u003C>();\n    dfsBezoek(graaf, start, new HashSet\u003C>(), volgorde);\n    return volgorde;\n}\n\nprivate static void dfsBezoek(Map\u003CString, List\u003CString>> graaf, String u,\n                              Set\u003CString> bezocht, List\u003CString> volgorde) {\n    bezocht.add(u);\n    volgorde.add(u);\n    List\u003CString> buren = new ArrayList\u003C>(graaf.get(u));\n    Collections.sort(buren); \u002F\u002F buren alfabetisch\n    for (String v : buren) {\n        if (!bezocht.contains(v)) dfsBezoek(graaf, v, bezocht, volgorde);\n    }\n}\n",[28,7645,7646,7663,7667,7716,7752,7784,7804,7820,7838,7852,7886,7906,7925,7949,7963,7968,7972,7976,7984,7988,7992,8036,8056,8082,8090,8094,8098,8140,8169,8183,8197,8229,8246,8264,8303,8307],{"__ignoreMap":223},[525,7647,7648,7650,7652,7654,7656,7658,7661],{"class":527,"line":528},[525,7649,539],{"class":1686},[525,7651,1787],{"class":560},[525,7653,68],{"class":568},[525,7655,1792],{"class":560},[525,7657,68],{"class":568},[525,7659,7660],{"class":535},"*",[525,7662,1800],{"class":568},[525,7664,7665],{"class":527,"line":545},[525,7666,549],{"emptyLinePlaceholder":548},[525,7668,7669,7671,7673,7675,7678,7680,7682,7684,7687,7689,7691,7693,7695,7697,7699,7702,7705,7707,7710,7712,7714],{"class":527,"line":552},[525,7670,1860],{"class":560},[525,7672,2556],{"class":560},[525,7674,718],{"class":568},[525,7676,7677],{"class":535},"String",[525,7679,767],{"class":568},[525,7681,7242],{"class":578},[525,7683,582],{"class":568},[525,7685,7686],{"class":560},"Map",[525,7688,718],{"class":568},[525,7690,7677],{"class":535},[525,7692,589],{"class":568},[525,7694,2556],{"class":560},[525,7696,718],{"class":568},[525,7698,7677],{"class":535},[525,7700,7701],{"class":568},">>",[525,7703,7704],{"class":535}," graaf",[525,7706,589],{"class":568},[525,7708,7709],{"class":560}," String",[525,7711,7252],{"class":535},[525,7713,703],{"class":568},[525,7715,1868],{"class":568},[525,7717,7718,7721,7723,7725,7727,7729,7731,7733,7736,7739,7741,7743,7746,7748,7750],{"class":527,"line":557},[525,7719,7720],{"class":560},"    Set",[525,7722,718],{"class":568},[525,7724,7677],{"class":560},[525,7726,767],{"class":568},[525,7728,7457],{"class":535},[525,7730,880],{"class":568},[525,7732,1987],{"class":531},[525,7734,7735],{"class":560}," HashSet",[525,7737,7738],{"class":568},"\u003C>(",[525,7740,1849],{"class":535},[525,7742,68],{"class":568},[525,7744,7745],{"class":578},"of",[525,7747,582],{"class":568},[525,7749,5491],{"class":535},[525,7751,5410],{"class":568},[525,7753,7754,7756,7758,7760,7762,7764,7766,7768,7770,7772,7774,7776,7778,7780,7782],{"class":527,"line":572},[525,7755,2925],{"class":560},[525,7757,718],{"class":568},[525,7759,7677],{"class":560},[525,7761,767],{"class":568},[525,7763,1506],{"class":535},[525,7765,880],{"class":568},[525,7767,1987],{"class":531},[525,7769,2940],{"class":560},[525,7771,7738],{"class":568},[525,7773,1849],{"class":535},[525,7775,68],{"class":568},[525,7777,7745],{"class":578},[525,7779,582],{"class":568},[525,7781,5491],{"class":535},[525,7783,5410],{"class":568},[525,7785,7786,7788,7790,7792,7794,7796,7798,7800,7802],{"class":527,"line":599},[525,7787,2901],{"class":560},[525,7789,718],{"class":568},[525,7791,7677],{"class":560},[525,7793,767],{"class":568},[525,7795,7471],{"class":535},[525,7797,880],{"class":568},[525,7799,1987],{"class":531},[525,7801,2917],{"class":560},[525,7803,2920],{"class":568},[525,7805,7806,7808,7810,7812,7814,7816,7818],{"class":527,"line":617},[525,7807,845],{"class":531},[525,7809,2973],{"class":568},[525,7811,2976],{"class":535},[525,7813,68],{"class":568},[525,7815,2981],{"class":578},[525,7817,2984],{"class":568},[525,7819,1868],{"class":568},[525,7821,7822,7825,7828,7830,7832,7834,7836],{"class":527,"line":632},[525,7823,7824],{"class":560},"        String",[525,7826,7827],{"class":535}," u ",[525,7829,880],{"class":568},[525,7831,1540],{"class":535},[525,7833,68],{"class":568},[525,7835,3001],{"class":578},[525,7837,3004],{"class":568},[525,7839,7840,7842,7844,7846,7848,7850],{"class":527,"line":646},[525,7841,7320],{"class":535},[525,7843,68],{"class":568},[525,7845,2597],{"class":578},[525,7847,582],{"class":568},[525,7849,6733],{"class":535},[525,7851,2043],{"class":568},[525,7853,7854,7857,7859,7861,7863,7866,7868,7870,7872,7874,7876,7878,7880,7882,7884],{"class":527,"line":651},[525,7855,7856],{"class":560},"        List",[525,7858,718],{"class":568},[525,7860,7677],{"class":560},[525,7862,767],{"class":568},[525,7864,7865],{"class":535}," buren ",[525,7867,880],{"class":568},[525,7869,1987],{"class":531},[525,7871,2917],{"class":560},[525,7873,7738],{"class":568},[525,7875,7247],{"class":535},[525,7877,68],{"class":568},[525,7879,4888],{"class":578},[525,7881,582],{"class":568},[525,7883,6733],{"class":535},[525,7885,5410],{"class":568},[525,7887,7888,7891,7893,7896,7898,7901,7903],{"class":527,"line":656},[525,7889,7890],{"class":535},"        Collections",[525,7892,68],{"class":568},[525,7894,7895],{"class":578},"sort",[525,7897,582],{"class":568},[525,7899,7900],{"class":535},"buren",[525,7902,1996],{"class":568},[525,7904,7905],{"class":706}," \u002F\u002F buren alfabetisch\n",[525,7907,7908,7910,7912,7914,7916,7918,7921,7923],{"class":527,"line":676},[525,7909,1587],{"class":531},[525,7911,334],{"class":568},[525,7913,7677],{"class":560},[525,7915,7337],{"class":535},[525,7917,2187],{"class":531},[525,7919,7920],{"class":535}," buren",[525,7922,703],{"class":568},[525,7924,1868],{"class":568},[525,7926,7927,7929,7931,7934,7936,7938,7940,7942,7944,7946],{"class":527,"line":691},[525,7928,1617],{"class":531},[525,7930,334],{"class":568},[525,7932,7933],{"class":535},"bezocht",[525,7935,68],{"class":568},[525,7937,2597],{"class":578},[525,7939,582],{"class":568},[525,7941,7387],{"class":535},[525,7943,1768],{"class":568},[525,7945,4845],{"class":568},[525,7947,7948],{"class":706}," \u002F\u002F bezocht zodra hij in de wachtrij komt\n",[525,7950,7951,7953,7955,7957,7959,7961],{"class":527,"line":710},[525,7952,1631],{"class":535},[525,7954,68],{"class":568},[525,7956,2597],{"class":578},[525,7958,582],{"class":568},[525,7960,7387],{"class":535},[525,7962,2043],{"class":568},[525,7964,7965],{"class":527,"line":730},[525,7966,7967],{"class":568},"            }\n",[525,7969,7970],{"class":527,"line":759},[525,7971,4944],{"class":568},[525,7973,7974],{"class":527,"line":778},[525,7975,1930],{"class":568},[525,7977,7978,7980,7982],{"class":527,"line":805},[525,7979,808],{"class":531},[525,7981,7447],{"class":535},[525,7983,1800],{"class":568},[525,7985,7986],{"class":527,"line":814},[525,7987,1935],{"class":568},[525,7989,7990],{"class":527,"line":819},[525,7991,549],{"emptyLinePlaceholder":548},[525,7993,7994,7996,7998,8000,8002,8004,8006,8008,8010,8012,8014,8016,8018,8020,8022,8024,8026,8028,8030,8032,8034],{"class":527,"line":824},[525,7995,1860],{"class":560},[525,7997,2556],{"class":560},[525,7999,718],{"class":568},[525,8001,7677],{"class":535},[525,8003,767],{"class":568},[525,8005,7428],{"class":578},[525,8007,582],{"class":568},[525,8009,7686],{"class":560},[525,8011,718],{"class":568},[525,8013,7677],{"class":535},[525,8015,589],{"class":568},[525,8017,2556],{"class":560},[525,8019,718],{"class":568},[525,8021,7677],{"class":535},[525,8023,7701],{"class":568},[525,8025,7704],{"class":535},[525,8027,589],{"class":568},[525,8029,7709],{"class":560},[525,8031,7252],{"class":535},[525,8033,703],{"class":568},[525,8035,1868],{"class":568},[525,8037,8038,8040,8042,8044,8046,8048,8050,8052,8054],{"class":527,"line":842},[525,8039,2901],{"class":560},[525,8041,718],{"class":568},[525,8043,7677],{"class":560},[525,8045,767],{"class":568},[525,8047,7471],{"class":535},[525,8049,880],{"class":568},[525,8051,1987],{"class":531},[525,8053,2917],{"class":560},[525,8055,2920],{"class":568},[525,8057,8058,8061,8063,8065,8067,8069,8071,8073,8075,8078,8080],{"class":527,"line":874},[525,8059,8060],{"class":578},"    dfsBezoek",[525,8062,582],{"class":568},[525,8064,7247],{"class":535},[525,8066,589],{"class":568},[525,8068,7252],{"class":535},[525,8070,589],{"class":568},[525,8072,1987],{"class":531},[525,8074,7735],{"class":560},[525,8076,8077],{"class":568},"\u003C>(),",[525,8079,7447],{"class":535},[525,8081,2043],{"class":568},[525,8083,8084,8086,8088],{"class":527,"line":912},[525,8085,808],{"class":531},[525,8087,7447],{"class":535},[525,8089,1800],{"class":568},[525,8091,8092],{"class":527,"line":919},[525,8093,1935],{"class":568},[525,8095,8096],{"class":527,"line":924},[525,8097,549],{"emptyLinePlaceholder":548},[525,8099,8100,8103,8106,8108,8111,8113,8115,8117,8119,8121,8123,8125,8127,8129,8131,8133,8135,8137],{"class":527,"line":929},[525,8101,8102],{"class":560},"private",[525,8104,8105],{"class":560}," static",[525,8107,2543],{"class":560},[525,8109,8110],{"class":578}," dfsBezoek",[525,8112,582],{"class":568},[525,8114,7686],{"class":560},[525,8116,718],{"class":568},[525,8118,7677],{"class":535},[525,8120,589],{"class":568},[525,8122,2556],{"class":560},[525,8124,718],{"class":568},[525,8126,7677],{"class":535},[525,8128,7701],{"class":568},[525,8130,7704],{"class":535},[525,8132,589],{"class":568},[525,8134,7709],{"class":560},[525,8136,7437],{"class":535},[525,8138,8139],{"class":568},",\n",[525,8141,8142,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8165,8167],{"class":527,"line":947},[525,8143,8144],{"class":560},"                              Set",[525,8146,718],{"class":568},[525,8148,7677],{"class":535},[525,8150,767],{"class":568},[525,8152,7371],{"class":535},[525,8154,589],{"class":568},[525,8156,2556],{"class":560},[525,8158,718],{"class":568},[525,8160,7677],{"class":535},[525,8162,767],{"class":568},[525,8164,7447],{"class":535},[525,8166,703],{"class":568},[525,8168,1868],{"class":568},[525,8170,8171,8173,8175,8177,8179,8181],{"class":527,"line":958},[525,8172,7486],{"class":535},[525,8174,68],{"class":568},[525,8176,2597],{"class":578},[525,8178,582],{"class":568},[525,8180,6733],{"class":535},[525,8182,2043],{"class":568},[525,8184,8185,8187,8189,8191,8193,8195],{"class":527,"line":965},[525,8186,7501],{"class":535},[525,8188,68],{"class":568},[525,8190,2597],{"class":578},[525,8192,582],{"class":568},[525,8194,6733],{"class":535},[525,8196,2043],{"class":568},[525,8198,8199,8201,8203,8205,8207,8209,8211,8213,8215,8217,8219,8221,8223,8225,8227],{"class":527,"line":982},[525,8200,2901],{"class":560},[525,8202,718],{"class":568},[525,8204,7677],{"class":560},[525,8206,767],{"class":568},[525,8208,7865],{"class":535},[525,8210,880],{"class":568},[525,8212,1987],{"class":531},[525,8214,2917],{"class":560},[525,8216,7738],{"class":568},[525,8218,7247],{"class":535},[525,8220,68],{"class":568},[525,8222,4888],{"class":578},[525,8224,582],{"class":568},[525,8226,6733],{"class":535},[525,8228,5410],{"class":568},[525,8230,8231,8234,8236,8238,8240,8242,8244],{"class":527,"line":1009},[525,8232,8233],{"class":535},"    Collections",[525,8235,68],{"class":568},[525,8237,7895],{"class":578},[525,8239,582],{"class":568},[525,8241,7900],{"class":535},[525,8243,1996],{"class":568},[525,8245,7905],{"class":706},[525,8247,8248,8250,8252,8254,8256,8258,8260,8262],{"class":527,"line":1026},[525,8249,7516],{"class":531},[525,8251,334],{"class":568},[525,8253,7677],{"class":560},[525,8255,7337],{"class":535},[525,8257,2187],{"class":531},[525,8259,7920],{"class":535},[525,8261,703],{"class":568},[525,8263,1868],{"class":568},[525,8265,8266,8268,8270,8272,8274,8277,8279,8281,8283,8285,8287,8289,8291,8293,8295,8297,8299,8301],{"class":527,"line":1053},[525,8267,1064],{"class":531},[525,8269,2973],{"class":568},[525,8271,7933],{"class":535},[525,8273,68],{"class":568},[525,8275,8276],{"class":578},"contains",[525,8278,582],{"class":568},[525,8280,7387],{"class":535},[525,8282,1768],{"class":568},[525,8284,8110],{"class":578},[525,8286,582],{"class":568},[525,8288,7247],{"class":535},[525,8290,589],{"class":568},[525,8292,7562],{"class":535},[525,8294,589],{"class":568},[525,8296,7371],{"class":535},[525,8298,589],{"class":568},[525,8300,7447],{"class":535},[525,8302,2043],{"class":568},[525,8304,8305],{"class":527,"line":1061},[525,8306,1930],{"class":568},[525,8308,8309],{"class":527,"line":1082},[525,8310,1935],{"class":568},[33,8312,8314],{"id":8313},"kortste-paden-dijkstra","Kortste paden: Dijkstra",[10,8316,8317,8318,8321],{},"In een gewogen graaf is de route met de minste kanten niet altijd de kortste. Het algoritme van\nDijkstra vindt de kortste afstand van één startknoop naar alle andere knopen, zolang ",[41,8319,8320],{},"alle gewichten\nniet-negatief"," zijn.",[10,8323,8324,8325,8327,8328,8331,8332,8334,8335,507],{},"Het idee: houd voor elke knoop de beste bekende afstand bij (start op ",[28,8326,4203],{},", de rest op ",[28,8329,8330],{},"∞","). Kies\nsteeds de nog niet afgeronde knoop met de ",[41,8333,341],{}," afstand; die afstand is definitief. Bekijk dan\nzijn buren: is de route via deze knoop korter, verlaag dan hun afstand (",[14,8336,8337],{},"relaxatie",[10,8339,8340],{},"Dezelfde graaf, nu met gewichten:",[215,8342,8345],{"className":8343,"code":8344,"language":220},[218],"A --4-- B --3-- C\n|       |       |\n1       1       2\n|       |       |\nD --2-- E --5-- F\n",[28,8346,8344],{"__ignoreMap":223},[10,8348,8349,8350,8352,8353,8356],{},"Dijkstra vanaf ",[28,8351,6505],{}," (de tabel toont de afstanden ",[41,8354,8355],{},"na"," het verwerken van de gekozen knoop):",[90,8358,8359,8380],{},[93,8360,8361],{},[96,8362,8363,8365,8368,8370,8372,8374,8376,8378],{},[99,8364,3626],{},[99,8366,8367],{},"Kies (afstand)",[99,8369,6505],{},[99,8371,6513],{},[99,8373,6521],{},[99,8375,6529],{},[99,8377,6442],{},[99,8379,6544],{},[109,8381,8382,8400,8419,8438,8457,8476,8495],{},[96,8383,8384,8386,8388,8390,8392,8394,8396,8398],{},[114,8385,5491],{},[114,8387],{},[114,8389,4203],{},[114,8391,8330],{},[114,8393,8330],{},[114,8395,8330],{},[114,8397,8330],{},[114,8399,8330],{},[96,8401,8402,8404,8407,8409,8411,8413,8415,8417],{},[114,8403,149],{},[114,8405,8406],{},"A (0)",[114,8408,4203],{},[114,8410,182],{},[114,8412,8330],{},[114,8414,149],{},[114,8416,8330],{},[114,8418,8330],{},[96,8420,8421,8423,8426,8428,8430,8432,8434,8436],{},[114,8422,3651],{},[114,8424,8425],{},"D (1)",[114,8427,4203],{},[114,8429,182],{},[114,8431,8330],{},[114,8433,149],{},[114,8435,127],{},[114,8437,8330],{},[96,8439,8440,8442,8445,8447,8449,8451,8453,8455],{},[114,8441,127],{},[114,8443,8444],{},"E (3)",[114,8446,4203],{},[114,8448,182],{},[114,8450,8330],{},[114,8452,149],{},[114,8454,127],{},[114,8456,116],{},[96,8458,8459,8461,8464,8466,8468,8470,8472,8474],{},[114,8460,182],{},[114,8462,8463],{},"B (4)",[114,8465,4203],{},[114,8467,182],{},[114,8469,193],{},[114,8471,149],{},[114,8473,127],{},[114,8475,116],{},[96,8477,8478,8480,8483,8485,8487,8489,8491,8493],{},[114,8479,265],{},[114,8481,8482],{},"C (7)",[114,8484,4203],{},[114,8486,182],{},[114,8488,193],{},[114,8490,149],{},[114,8492,127],{},[114,8494,116],{},[96,8496,8497,8499,8502,8504,8506,8508,8510,8512],{},[114,8498,160],{},[114,8500,8501],{},"F (8)",[114,8503,4203],{},[114,8505,182],{},[114,8507,193],{},[114,8509,149],{},[114,8511,127],{},[114,8513,116],{},[10,8515,8516],{},"Twee momenten om op te letten:",[46,8518,8519,8536],{},[49,8520,8521,8522,8525,8526,8529,8530,8532,8533,8535],{},"In stap 3 levert de route ",[28,8523,8524],{},"A → D → E → B"," afstand ",[28,8527,8528],{},"3 + 1 = 4"," op. Dat is niet ",[41,8531,58],{}," dan de\nhuidige 4, dus ",[28,8534,6513],{}," verandert niet.",[49,8537,8538,8539,8525,8542,8545,8546,8548,8549,8551],{},"In stap 5 levert ",[28,8540,8541],{},"A → B → C → F",[28,8543,8544],{},"7 + 2 = 9"," op, langer dan de 8 via ",[28,8547,6442],{},". ",[28,8550,6544],{}," blijft 8.",[10,8553,8554,8555,68],{},"Antwoord (alfabetisch): ",[41,8556,8557],{},"A = 0, B = 4, C = 7, D = 1, E = 3, F = 8",[10,8559,8560],{},"Met negatieve gewichten werkt Dijkstra niet, omdat een \"definitieve\" afstand later toch nog korter\nkan worden. Daarvoor gebruik je Bellman-Ford.",[512,8562,8563,9180],{},[515,8564,8565],{"v-slot:python":223},[215,8566,8568],{"className":519,"code":8567,"language":521,"meta":223,"style":223},"import heapq\n\ngewogen = {\n    \"A\": {\"B\": 4, \"D\": 1}, \"B\": {\"A\": 4, \"C\": 3, \"E\": 1},\n    \"C\": {\"B\": 3, \"F\": 2}, \"D\": {\"A\": 1, \"E\": 2},\n    \"E\": {\"B\": 1, \"D\": 2, \"F\": 5}, \"F\": {\"C\": 2, \"E\": 5},\n}\n\n\ndef dijkstra(graaf, start):\n    afstand = {v: float(\"inf\") for v in graaf}\n    afstand[start] = 0\n    klaar = set()\n    heap = [(0, start)]  # (afstand, knoop)\n    while heap:\n        d, u = heapq.heappop(heap)  # knoop met kleinste afstand\n        if u in klaar:\n            continue  # verouderde invoer in de heap\n        klaar.add(u)\n        for v, gewicht in sorted(graaf[u].items()):\n            if d + gewicht \u003C afstand[v]:  # relaxatie\n                afstand[v] = d + gewicht\n                heapq.heappush(heap, (afstand[v], v))\n    return dict(sorted(afstand.items()))\n\n\nprint(dijkstra(gewogen, \"A\"))\n# {'A': 0, 'B': 4, 'C': 7, 'D': 1, 'E': 3, 'F': 8}\n",[28,8569,8570,8576,8580,8589,8673,8743,8825,8829,8833,8837,8854,8892,8908,8919,8941,8950,8976,8989,8997,9012,9044,9070,9090,9120,9143,9147,9151,9175],{"__ignoreMap":223},[525,8571,8572,8574],{"class":527,"line":528},[525,8573,539],{"class":531},[525,8575,5586],{"class":535},[525,8577,8578],{"class":527,"line":545},[525,8579,549],{"emptyLinePlaceholder":548},[525,8581,8582,8585,8587],{"class":527,"line":552},[525,8583,8584],{"class":535},"gewogen ",[525,8586,880],{"class":568},[525,8588,1868],{"class":568},[525,8590,8591,8593,8595,8597,8599,8601,8603,8605,8607,8609,8611,8613,8615,8617,8619,8621,8623,8626,8628,8630,8632,8634,8636,8638,8640,8642,8644,8646,8648,8650,8652,8654,8656,8658,8660,8662,8664,8666,8668,8670],{"class":527,"line":557},[525,8592,7050],{"class":568},[525,8594,6505],{"class":5628},[525,8596,5632],{"class":568},[525,8598,2187],{"class":568},[525,8600,4845],{"class":568},[525,8602,5632],{"class":568},[525,8604,6513],{"class":5628},[525,8606,5632],{"class":568},[525,8608,2187],{"class":568},[525,8610,1716],{"class":1686},[525,8612,589],{"class":568},[525,8614,5625],{"class":568},[525,8616,6529],{"class":5628},[525,8618,5632],{"class":568},[525,8620,2187],{"class":568},[525,8622,1701],{"class":1686},[525,8624,8625],{"class":568},"},",[525,8627,5625],{"class":568},[525,8629,6513],{"class":5628},[525,8631,5632],{"class":568},[525,8633,2187],{"class":568},[525,8635,4845],{"class":568},[525,8637,5632],{"class":568},[525,8639,6505],{"class":5628},[525,8641,5632],{"class":568},[525,8643,2187],{"class":568},[525,8645,1716],{"class":1686},[525,8647,589],{"class":568},[525,8649,5625],{"class":568},[525,8651,6521],{"class":5628},[525,8653,5632],{"class":568},[525,8655,2187],{"class":568},[525,8657,1691],{"class":1686},[525,8659,589],{"class":568},[525,8661,5625],{"class":568},[525,8663,6442],{"class":5628},[525,8665,5632],{"class":568},[525,8667,2187],{"class":568},[525,8669,1701],{"class":1686},[525,8671,8672],{"class":568},"},\n",[525,8674,8675,8677,8679,8681,8683,8685,8687,8689,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721,8723,8725,8727,8729,8731,8733,8735,8737,8739,8741],{"class":527,"line":572},[525,8676,7050],{"class":568},[525,8678,6521],{"class":5628},[525,8680,5632],{"class":568},[525,8682,2187],{"class":568},[525,8684,4845],{"class":568},[525,8686,5632],{"class":568},[525,8688,6513],{"class":5628},[525,8690,5632],{"class":568},[525,8692,2187],{"class":568},[525,8694,1691],{"class":1686},[525,8696,589],{"class":568},[525,8698,5625],{"class":568},[525,8700,6544],{"class":5628},[525,8702,5632],{"class":568},[525,8704,2187],{"class":568},[525,8706,4344],{"class":1686},[525,8708,8625],{"class":568},[525,8710,5625],{"class":568},[525,8712,6529],{"class":5628},[525,8714,5632],{"class":568},[525,8716,2187],{"class":568},[525,8718,4845],{"class":568},[525,8720,5632],{"class":568},[525,8722,6505],{"class":5628},[525,8724,5632],{"class":568},[525,8726,2187],{"class":568},[525,8728,1701],{"class":1686},[525,8730,589],{"class":568},[525,8732,5625],{"class":568},[525,8734,6442],{"class":5628},[525,8736,5632],{"class":568},[525,8738,2187],{"class":568},[525,8740,4344],{"class":1686},[525,8742,8672],{"class":568},[525,8744,8745,8747,8749,8751,8753,8755,8757,8759,8761,8763,8765,8767,8769,8771,8773,8775,8777,8779,8781,8783,8785,8787,8789,8791,8793,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815,8817,8819,8821,8823],{"class":527,"line":599},[525,8746,7050],{"class":568},[525,8748,6442],{"class":5628},[525,8750,5632],{"class":568},[525,8752,2187],{"class":568},[525,8754,4845],{"class":568},[525,8756,5632],{"class":568},[525,8758,6513],{"class":5628},[525,8760,5632],{"class":568},[525,8762,2187],{"class":568},[525,8764,1701],{"class":1686},[525,8766,589],{"class":568},[525,8768,5625],{"class":568},[525,8770,6529],{"class":5628},[525,8772,5632],{"class":568},[525,8774,2187],{"class":568},[525,8776,4344],{"class":1686},[525,8778,589],{"class":568},[525,8780,5625],{"class":568},[525,8782,6544],{"class":5628},[525,8784,5632],{"class":568},[525,8786,2187],{"class":568},[525,8788,4616],{"class":1686},[525,8790,8625],{"class":568},[525,8792,5625],{"class":568},[525,8794,6544],{"class":5628},[525,8796,5632],{"class":568},[525,8798,2187],{"class":568},[525,8800,4845],{"class":568},[525,8802,5632],{"class":568},[525,8804,6521],{"class":5628},[525,8806,5632],{"class":568},[525,8808,2187],{"class":568},[525,8810,4344],{"class":1686},[525,8812,589],{"class":568},[525,8814,5625],{"class":568},[525,8816,6442],{"class":5628},[525,8818,5632],{"class":568},[525,8820,2187],{"class":568},[525,8822,4616],{"class":1686},[525,8824,8672],{"class":568},[525,8826,8827],{"class":527,"line":617},[525,8828,1935],{"class":568},[525,8830,8831],{"class":527,"line":632},[525,8832,549],{"emptyLinePlaceholder":548},[525,8834,8835],{"class":527,"line":646},[525,8836,549],{"emptyLinePlaceholder":548},[525,8838,8839,8841,8844,8846,8848,8850,8852],{"class":527,"line":651},[525,8840,659],{"class":560},[525,8842,8843],{"class":578}," dijkstra",[525,8845,582],{"class":568},[525,8847,7247],{"class":592},[525,8849,589],{"class":568},[525,8851,7252],{"class":592},[525,8853,596],{"class":568},[525,8855,8856,8859,8861,8863,8865,8867,8870,8872,8874,8877,8879,8881,8884,8886,8888,8890],{"class":527,"line":656},[525,8857,8858],{"class":535},"    afstand ",[525,8860,880],{"class":568},[525,8862,4845],{"class":568},[525,8864,7387],{"class":535},[525,8866,2187],{"class":568},[525,8868,8869],{"class":564}," float",[525,8871,582],{"class":568},[525,8873,5632],{"class":568},[525,8875,8876],{"class":5628},"inf",[525,8878,5632],{"class":568},[525,8880,703],{"class":568},[525,8882,8883],{"class":531}," for",[525,8885,7337],{"class":535},[525,8887,466],{"class":531},[525,8889,7704],{"class":535},[525,8891,1935],{"class":568},[525,8893,8894,8897,8899,8901,8903,8905],{"class":527,"line":676},[525,8895,8896],{"class":535},"    afstand",[525,8898,4079],{"class":568},[525,8900,5491],{"class":535},[525,8902,1283],{"class":568},[525,8904,611],{"class":568},[525,8906,8907],{"class":1686}," 0\n",[525,8909,8910,8913,8915,8917],{"class":527,"line":691},[525,8911,8912],{"class":535},"    klaar ",[525,8914,880],{"class":568},[525,8916,7476],{"class":564},[525,8918,1560],{"class":568},[525,8920,8921,8924,8926,8929,8931,8933,8935,8938],{"class":527,"line":710},[525,8922,8923],{"class":535},"    heap ",[525,8925,880],{"class":568},[525,8927,8928],{"class":568}," [(",[525,8930,4203],{"class":1686},[525,8932,589],{"class":568},[525,8934,7252],{"class":535},[525,8936,8937],{"class":568},")]",[525,8939,8940],{"class":706},"  # (afstand, knoop)\n",[525,8942,8943,8945,8948],{"class":527,"line":730},[525,8944,845],{"class":531},[525,8946,8947],{"class":535}," heap",[525,8949,569],{"class":568},[525,8951,8952,8955,8957,8959,8961,8963,8965,8967,8969,8971,8973],{"class":527,"line":759},[525,8953,8954],{"class":535},"        d",[525,8956,589],{"class":568},[525,8958,7827],{"class":535},[525,8960,880],{"class":568},[525,8962,5722],{"class":535},[525,8964,68],{"class":568},[525,8966,5727],{"class":578},[525,8968,582],{"class":568},[525,8970,3461],{"class":578},[525,8972,703],{"class":568},[525,8974,8975],{"class":706},"  # knoop met kleinste afstand\n",[525,8977,8978,8980,8982,8984,8987],{"class":527,"line":778},[525,8979,1064],{"class":531},[525,8981,7827],{"class":535},[525,8983,466],{"class":568},[525,8985,8986],{"class":535}," klaar",[525,8988,569],{"class":568},[525,8990,8991,8994],{"class":527,"line":805},[525,8992,8993],{"class":531},"            continue",[525,8995,8996],{"class":706},"  # verouderde invoer in de heap\n",[525,8998,8999,9002,9004,9006,9008,9010],{"class":527,"line":814},[525,9000,9001],{"class":535},"        klaar",[525,9003,68],{"class":568},[525,9005,2597],{"class":578},[525,9007,582],{"class":568},[525,9009,6733],{"class":578},[525,9011,756],{"class":568},[525,9013,9014,9016,9018,9020,9023,9025,9027,9029,9031,9033,9035,9038,9041],{"class":527,"line":819},[525,9015,1587],{"class":531},[525,9017,7562],{"class":535},[525,9019,589],{"class":568},[525,9021,9022],{"class":535}," gewicht ",[525,9024,466],{"class":531},[525,9026,7342],{"class":578},[525,9028,582],{"class":568},[525,9030,7247],{"class":578},[525,9032,4079],{"class":568},[525,9034,6733],{"class":578},[525,9036,9037],{"class":568},"].",[525,9039,9040],{"class":578},"items",[525,9042,9043],{"class":568},"()):\n",[525,9045,9046,9048,9051,9053,9055,9057,9060,9062,9064,9067],{"class":527,"line":824},[525,9047,1617],{"class":531},[525,9049,9050],{"class":535}," d ",[525,9052,4352],{"class":568},[525,9054,9022],{"class":535},[525,9056,718],{"class":568},[525,9058,9059],{"class":535}," afstand",[525,9061,4079],{"class":568},[525,9063,7387],{"class":535},[525,9065,9066],{"class":568},"]:",[525,9068,9069],{"class":706},"  # relaxatie\n",[525,9071,9072,9075,9077,9079,9081,9083,9085,9087],{"class":527,"line":842},[525,9073,9074],{"class":535},"                afstand",[525,9076,4079],{"class":568},[525,9078,7387],{"class":535},[525,9080,1283],{"class":568},[525,9082,611],{"class":568},[525,9084,9050],{"class":535},[525,9086,4352],{"class":568},[525,9088,9089],{"class":535}," gewicht\n",[525,9091,9092,9095,9097,9099,9101,9103,9105,9107,9110,9112,9114,9116,9118],{"class":527,"line":874},[525,9093,9094],{"class":535},"                heapq",[525,9096,68],{"class":568},[525,9098,5609],{"class":578},[525,9100,582],{"class":568},[525,9102,3461],{"class":578},[525,9104,589],{"class":568},[525,9106,334],{"class":568},[525,9108,9109],{"class":578},"afstand",[525,9111,4079],{"class":568},[525,9113,7387],{"class":578},[525,9115,4120],{"class":568},[525,9117,7562],{"class":578},[525,9119,5635],{"class":568},[525,9121,9122,9124,9127,9129,9132,9134,9136,9138,9140],{"class":527,"line":912},[525,9123,808],{"class":531},[525,9125,9126],{"class":564}," dict",[525,9128,582],{"class":568},[525,9130,9131],{"class":578},"sorted",[525,9133,582],{"class":568},[525,9135,9109],{"class":578},[525,9137,68],{"class":568},[525,9139,9040],{"class":578},[525,9141,9142],{"class":568},"()))\n",[525,9144,9145],{"class":527,"line":919},[525,9146,549],{"emptyLinePlaceholder":548},[525,9148,9149],{"class":527,"line":924},[525,9150,549],{"emptyLinePlaceholder":548},[525,9152,9153,9155,9157,9160,9162,9165,9167,9169,9171,9173],{"class":527,"line":929},[525,9154,1756],{"class":578},[525,9156,582],{"class":568},[525,9158,9159],{"class":578},"dijkstra",[525,9161,582],{"class":568},[525,9163,9164],{"class":578},"gewogen",[525,9166,589],{"class":568},[525,9168,5625],{"class":568},[525,9170,6505],{"class":5628},[525,9172,5632],{"class":568},[525,9174,5635],{"class":568},[525,9176,9177],{"class":527,"line":947},[525,9178,9179],{"class":706},"# {'A': 0, 'B': 4, 'C': 7, 'D': 1, 'E': 3, 'F': 8}\n",[515,9181,9182],{"v-slot:java":223},[215,9183,9185],{"className":1776,"code":9184,"language":1778,"meta":223,"style":223},"import java.util.*;\n\nrecord Item(int afstand, String knoop) {}\n\nstatic Map\u003CString, Integer> dijkstra(Map\u003CString, Map\u003CString, Integer>> graaf, String start) {\n    Map\u003CString, Integer> afstand = new TreeMap\u003C>(); \u002F\u002F TreeMap: alfabetische volgorde\n    for (String v : graaf.keySet()) afstand.put(v, Integer.MAX_VALUE);\n    afstand.put(start, 0);\n    Set\u003CString> klaar = new HashSet\u003C>();\n    PriorityQueue\u003CItem> heap = new PriorityQueue\u003C>(\n            Comparator.comparingInt(Item::afstand).thenComparing(Item::knoop));\n    heap.add(new Item(0, start));\n    while (!heap.isEmpty()) {\n        Item it = heap.poll(); \u002F\u002F knoop met kleinste afstand\n        if (!klaar.add(it.knoop())) continue; \u002F\u002F verouderde invoer in de heap\n        for (Map.Entry\u003CString, Integer> kant : new TreeMap\u003C>(graaf.get(it.knoop())).entrySet()) {\n            int nieuw = it.afstand() + kant.getValue();\n            if (nieuw \u003C afstand.get(kant.getKey())) { \u002F\u002F relaxatie\n                afstand.put(kant.getKey(), nieuw);\n                heap.add(new Item(nieuw, kant.getKey()));\n            }\n        }\n    }\n    return afstand;\n}\n",[28,9186,9187,9203,9207,9232,9236,9289,9319,9362,9380,9401,9424,9458,9483,9499,9520,9553,9611,9641,9675,9698,9729,9733,9737,9741,9749],{"__ignoreMap":223},[525,9188,9189,9191,9193,9195,9197,9199,9201],{"class":527,"line":528},[525,9190,539],{"class":1686},[525,9192,1787],{"class":560},[525,9194,68],{"class":568},[525,9196,1792],{"class":560},[525,9198,68],{"class":568},[525,9200,7660],{"class":535},[525,9202,1800],{"class":568},[525,9204,9205],{"class":527,"line":545},[525,9206,549],{"emptyLinePlaceholder":548},[525,9208,9209,9212,9215,9217,9219,9221,9223,9225,9227,9229],{"class":527,"line":552},[525,9210,9211],{"class":560},"record",[525,9213,9214],{"class":564}," Item",[525,9216,582],{"class":568},[525,9218,1905],{"class":560},[525,9220,9059],{"class":535},[525,9222,589],{"class":568},[525,9224,7709],{"class":560},[525,9226,721],{"class":535},[525,9228,703],{"class":568},[525,9230,9231],{"class":568}," {}\n",[525,9233,9234],{"class":527,"line":557},[525,9235,549],{"emptyLinePlaceholder":548},[525,9237,9238,9240,9243,9245,9247,9249,9251,9253,9255,9257,9259,9261,9263,9265,9267,9269,9271,9273,9275,9277,9279,9281,9283,9285,9287],{"class":527,"line":572},[525,9239,1860],{"class":560},[525,9241,9242],{"class":560}," Map",[525,9244,718],{"class":568},[525,9246,7677],{"class":535},[525,9248,589],{"class":568},[525,9250,5916],{"class":535},[525,9252,767],{"class":568},[525,9254,8843],{"class":578},[525,9256,582],{"class":568},[525,9258,7686],{"class":560},[525,9260,718],{"class":568},[525,9262,7677],{"class":535},[525,9264,589],{"class":568},[525,9266,9242],{"class":560},[525,9268,718],{"class":568},[525,9270,7677],{"class":535},[525,9272,589],{"class":568},[525,9274,5916],{"class":535},[525,9276,7701],{"class":568},[525,9278,7704],{"class":535},[525,9280,589],{"class":568},[525,9282,7709],{"class":560},[525,9284,7252],{"class":535},[525,9286,703],{"class":568},[525,9288,1868],{"class":568},[525,9290,9291,9294,9296,9298,9300,9302,9304,9306,9308,9310,9313,9316],{"class":527,"line":599},[525,9292,9293],{"class":560},"    Map",[525,9295,718],{"class":568},[525,9297,7677],{"class":560},[525,9299,589],{"class":568},[525,9301,5916],{"class":560},[525,9303,767],{"class":568},[525,9305,8525],{"class":535},[525,9307,880],{"class":568},[525,9309,1987],{"class":531},[525,9311,9312],{"class":560}," TreeMap",[525,9314,9315],{"class":568},"\u003C>();",[525,9317,9318],{"class":706}," \u002F\u002F TreeMap: alfabetische volgorde\n",[525,9320,9321,9323,9325,9327,9329,9331,9333,9335,9338,9340,9342,9344,9347,9349,9351,9353,9355,9357,9360],{"class":527,"line":617},[525,9322,7516],{"class":531},[525,9324,334],{"class":568},[525,9326,7677],{"class":560},[525,9328,7337],{"class":535},[525,9330,2187],{"class":531},[525,9332,7704],{"class":535},[525,9334,68],{"class":568},[525,9336,9337],{"class":578},"keySet",[525,9339,2984],{"class":568},[525,9341,9059],{"class":535},[525,9343,68],{"class":568},[525,9345,9346],{"class":578},"put",[525,9348,582],{"class":568},[525,9350,7387],{"class":535},[525,9352,589],{"class":568},[525,9354,5916],{"class":535},[525,9356,68],{"class":568},[525,9358,9359],{"class":535},"MAX_VALUE",[525,9361,2043],{"class":568},[525,9363,9364,9366,9368,9370,9372,9374,9376,9378],{"class":527,"line":632},[525,9365,8896],{"class":535},[525,9367,68],{"class":568},[525,9369,9346],{"class":578},[525,9371,582],{"class":568},[525,9373,5491],{"class":535},[525,9375,589],{"class":568},[525,9377,4035],{"class":1686},[525,9379,2043],{"class":568},[525,9381,9382,9384,9386,9388,9390,9393,9395,9397,9399],{"class":527,"line":646},[525,9383,7720],{"class":560},[525,9385,718],{"class":568},[525,9387,7677],{"class":560},[525,9389,767],{"class":568},[525,9391,9392],{"class":535}," klaar ",[525,9394,880],{"class":568},[525,9396,1987],{"class":531},[525,9398,7735],{"class":560},[525,9400,2920],{"class":568},[525,9402,9403,9405,9407,9410,9412,9415,9417,9419,9421],{"class":527,"line":651},[525,9404,5881],{"class":560},[525,9406,718],{"class":568},[525,9408,9409],{"class":560},"Item",[525,9411,767],{"class":568},[525,9413,9414],{"class":535}," heap ",[525,9416,880],{"class":568},[525,9418,1987],{"class":531},[525,9420,5898],{"class":560},[525,9422,9423],{"class":568},"\u003C>(\n",[525,9425,9426,9429,9431,9434,9436,9438,9441,9443,9445,9448,9450,9452,9454,9456],{"class":527,"line":656},[525,9427,9428],{"class":535},"            Comparator",[525,9430,68],{"class":568},[525,9432,9433],{"class":578},"comparingInt",[525,9435,582],{"class":568},[525,9437,9409],{"class":535},[525,9439,9440],{"class":531},"::",[525,9442,9109],{"class":535},[525,9444,507],{"class":568},[525,9446,9447],{"class":578},"thenComparing",[525,9449,582],{"class":568},[525,9451,9409],{"class":535},[525,9453,9440],{"class":531},[525,9455,667],{"class":535},[525,9457,5410],{"class":568},[525,9459,9460,9463,9465,9467,9469,9471,9473,9475,9477,9479,9481],{"class":527,"line":676},[525,9461,9462],{"class":535},"    heap",[525,9464,68],{"class":568},[525,9466,2597],{"class":578},[525,9468,582],{"class":568},[525,9470,5954],{"class":531},[525,9472,9214],{"class":578},[525,9474,582],{"class":568},[525,9476,4203],{"class":1686},[525,9478,589],{"class":568},[525,9480,7252],{"class":535},[525,9482,5410],{"class":568},[525,9484,9485,9487,9489,9491,9493,9495,9497],{"class":527,"line":691},[525,9486,845],{"class":531},[525,9488,2973],{"class":568},[525,9490,3461],{"class":535},[525,9492,68],{"class":568},[525,9494,2981],{"class":578},[525,9496,2984],{"class":568},[525,9498,1868],{"class":568},[525,9500,9501,9504,9507,9509,9511,9513,9515,9517],{"class":527,"line":710},[525,9502,9503],{"class":560},"        Item",[525,9505,9506],{"class":535}," it ",[525,9508,880],{"class":568},[525,9510,8947],{"class":535},[525,9512,68],{"class":568},[525,9514,3001],{"class":578},[525,9516,6064],{"class":568},[525,9518,9519],{"class":706}," \u002F\u002F knoop met kleinste afstand\n",[525,9521,9522,9524,9526,9529,9531,9533,9535,9538,9540,9542,9545,9548,9550],{"class":527,"line":730},[525,9523,1064],{"class":531},[525,9525,2973],{"class":568},[525,9527,9528],{"class":535},"klaar",[525,9530,68],{"class":568},[525,9532,2597],{"class":578},[525,9534,582],{"class":568},[525,9536,9537],{"class":535},"it",[525,9539,68],{"class":568},[525,9541,667],{"class":578},[525,9543,9544],{"class":568},"()))",[525,9546,9547],{"class":531}," continue",[525,9549,59],{"class":568},[525,9551,9552],{"class":706}," \u002F\u002F verouderde invoer in de heap\n",[525,9554,9555,9557,9559,9561,9563,9566,9568,9570,9572,9574,9576,9579,9581,9583,9585,9587,9589,9591,9593,9595,9597,9599,9601,9604,9607,9609],{"class":527,"line":759},[525,9556,1587],{"class":531},[525,9558,334],{"class":568},[525,9560,7686],{"class":560},[525,9562,68],{"class":568},[525,9564,9565],{"class":560},"Entry",[525,9567,718],{"class":568},[525,9569,7677],{"class":560},[525,9571,589],{"class":568},[525,9573,5916],{"class":560},[525,9575,767],{"class":568},[525,9577,9578],{"class":535}," kant ",[525,9580,2187],{"class":531},[525,9582,1987],{"class":531},[525,9584,9312],{"class":560},[525,9586,7738],{"class":568},[525,9588,7247],{"class":535},[525,9590,68],{"class":568},[525,9592,4888],{"class":578},[525,9594,582],{"class":568},[525,9596,9537],{"class":535},[525,9598,68],{"class":568},[525,9600,667],{"class":578},[525,9602,9603],{"class":568},"())).",[525,9605,9606],{"class":578},"entrySet",[525,9608,2984],{"class":568},[525,9610,1868],{"class":568},[525,9612,9613,9615,9618,9620,9623,9625,9627,9629,9631,9634,9636,9639],{"class":527,"line":778},[525,9614,4853],{"class":560},[525,9616,9617],{"class":535}," nieuw ",[525,9619,880],{"class":568},[525,9621,9622],{"class":535}," it",[525,9624,68],{"class":568},[525,9626,9109],{"class":578},[525,9628,4822],{"class":568},[525,9630,1286],{"class":568},[525,9632,9633],{"class":535}," kant",[525,9635,68],{"class":568},[525,9637,9638],{"class":578},"getValue",[525,9640,3004],{"class":568},[525,9642,9643,9645,9647,9650,9652,9654,9656,9658,9660,9663,9665,9668,9670,9672],{"class":527,"line":805},[525,9644,1617],{"class":531},[525,9646,334],{"class":568},[525,9648,9649],{"class":535},"nieuw ",[525,9651,718],{"class":568},[525,9653,9059],{"class":535},[525,9655,68],{"class":568},[525,9657,4888],{"class":578},[525,9659,582],{"class":568},[525,9661,9662],{"class":535},"kant",[525,9664,68],{"class":568},[525,9666,9667],{"class":578},"getKey",[525,9669,9544],{"class":568},[525,9671,4845],{"class":568},[525,9673,9674],{"class":706}," \u002F\u002F relaxatie\n",[525,9676,9677,9679,9681,9683,9685,9687,9689,9691,9693,9696],{"class":527,"line":814},[525,9678,9074],{"class":535},[525,9680,68],{"class":568},[525,9682,9346],{"class":578},[525,9684,582],{"class":568},[525,9686,9662],{"class":535},[525,9688,68],{"class":568},[525,9690,9667],{"class":578},[525,9692,7479],{"class":568},[525,9694,9695],{"class":535}," nieuw",[525,9697,2043],{"class":568},[525,9699,9700,9703,9705,9707,9709,9711,9713,9715,9718,9720,9722,9724,9726],{"class":527,"line":819},[525,9701,9702],{"class":535},"                heap",[525,9704,68],{"class":568},[525,9706,2597],{"class":578},[525,9708,582],{"class":568},[525,9710,5954],{"class":531},[525,9712,9214],{"class":578},[525,9714,582],{"class":568},[525,9716,9717],{"class":535},"nieuw",[525,9719,589],{"class":568},[525,9721,9633],{"class":535},[525,9723,68],{"class":568},[525,9725,9667],{"class":578},[525,9727,9728],{"class":568},"()));\n",[525,9730,9731],{"class":527,"line":824},[525,9732,7967],{"class":568},[525,9734,9735],{"class":527,"line":842},[525,9736,4944],{"class":568},[525,9738,9739],{"class":527,"line":874},[525,9740,1930],{"class":568},[525,9742,9743,9745,9747],{"class":527,"line":912},[525,9744,808],{"class":531},[525,9746,9059],{"class":535},[525,9748,1800],{"class":568},[525,9750,9751],{"class":527,"line":919},[525,9752,1935],{"class":568},[33,9754,9756],{"id":9755},"topologisch-sorteren-met-kahn","Topologisch sorteren met Kahn",[10,9758,9759,9760,9763,9764,463,9767,9770,9771,9774,9775,9777,9778,9780],{},"Een topologische sortering (",[14,9761,9762],{},"topological sort",") van een gerichte graaf zonder cycli (",[14,9765,9766],{},"DAG",[14,9768,9769],{},"directed\nacyclic graph",") is een volgorde waarin elke kant ",[28,9772,9773],{},"u → v"," van links naar rechts wijst: ",[28,9776,6733],{}," komt vóór\n",[28,9779,7387],{},". Denk aan vakken met voorkennis of build-stappen die van elkaar afhangen.",[10,9782,9783],{},"Het algoritme van Kahn werkt met ingangsgraden:",[3332,9785,9786,9789,9795,9798],{},[49,9787,9788],{},"Tel voor elke knoop de ingangsgraad (aantal inkomende kanten).",[49,9790,9791,9792,68],{},"Kies een knoop met ingangsgraad 0; zijn er meerdere, neem de ",[41,9793,9794],{},"alfabetisch kleinste",[49,9796,9797],{},"Zet hem in het resultaat en verlaag de ingangsgraad van elk van zijn opvolgers met 1.",[49,9799,9800],{},"Herhaal tot er geen knopen met ingangsgraad 0 meer zijn.",[10,9802,9803],{},"Voorbeeld met zes vakken en deze voorkennis-kanten:",[215,9805,9808],{"className":9806,"code":9807,"language":220},[218],"C → A    C → D    B → D    A → E    D → E    E → F\n",[28,9809,9807],{"__ignoreMap":223},[10,9811,9812],{},"Ingangsgraden bij de start: A = 1, B = 0, C = 0, D = 2, E = 2, F = 1.",[90,9814,9815,9830],{},[93,9816,9817],{},[96,9818,9819,9821,9824,9827],{},[99,9820,3626],{},[99,9822,9823],{},"Kandidaten (ingangsgraad 0)",[99,9825,9826],{},"Kies",[99,9828,9829],{},"Gevolg",[109,9831,9832,9844,9855,9867,9878,9889],{},[96,9833,9834,9836,9839,9841],{},[114,9835,149],{},[114,9837,9838],{},"B, C",[114,9840,6513],{},[114,9842,9843],{},"D: 2 → 1",[96,9845,9846,9848,9850,9852],{},[114,9847,3651],{},[114,9849,6521],{},[114,9851,6521],{},[114,9853,9854],{},"A: 1 → 0, D: 1 → 0",[96,9856,9857,9859,9862,9864],{},[114,9858,127],{},[114,9860,9861],{},"A, D",[114,9863,6505],{},[114,9865,9866],{},"E: 2 → 1",[96,9868,9869,9871,9873,9875],{},[114,9870,182],{},[114,9872,6529],{},[114,9874,6529],{},[114,9876,9877],{},"E: 1 → 0",[96,9879,9880,9882,9884,9886],{},[114,9881,265],{},[114,9883,6442],{},[114,9885,6442],{},[114,9887,9888],{},"F: 1 → 0",[96,9890,9891,9893,9895,9897],{},[114,9892,160],{},[114,9894,6544],{},[114,9896,6544],{},[114,9898],{},[10,9900,9901,9902,9905,9906,9908],{},"Topologische volgorde: ",[41,9903,9904],{},"B, C, A, D, E, F",". Bevat de graaf een cyclus, dan komen de knopen in die\ncyclus nooit op ingangsgraad 0 en is het resultaat korter dan ",[28,9907,6438],{},". Zo detecteert Kahn meteen cycli.",[512,9910,9911,10391],{},[515,9912,9913],{"v-slot:python":223},[215,9914,9916],{"className":519,"code":9915,"language":521,"meta":223,"style":223},"import heapq\n\nvoorkennis = {\n    \"A\": [\"E\"], \"B\": [\"D\"], \"C\": [\"A\", \"D\"],\n    \"D\": [\"E\"], \"E\": [\"F\"], \"F\": [],\n}\n\n\ndef kahn(graaf):\n    ingang = {v: 0 for v in graaf}\n    for u in graaf:\n        for v in graaf[u]:\n            ingang[v] += 1\n    klaar = [v for v in graaf if ingang[v] == 0]\n    heapq.heapify(klaar)  # min-heap: alfabetisch kleinste eerst\n    volgorde = []\n    while klaar:\n        u = heapq.heappop(klaar)\n        volgorde.append(u)\n        for v in graaf[u]:\n            ingang[v] -= 1\n            if ingang[v] == 0:\n                heapq.heappush(klaar, v)\n    if len(volgorde) \u003C len(graaf):\n        raise ValueError(\"graaf bevat een cyclus\")\n    return volgorde\n\n\nprint(kahn(voorkennis))  # ['B', 'C', 'A', 'D', 'E', 'F']\n",[28,9917,9918,9924,9928,9937,10001,10050,10054,10058,10062,10075,10100,10112,10128,10144,10183,10201,10209,10217,10235,10249,10265,10280,10298,10316,10339,10358,10364,10368,10372],{"__ignoreMap":223},[525,9919,9920,9922],{"class":527,"line":528},[525,9921,539],{"class":531},[525,9923,5586],{"class":535},[525,9925,9926],{"class":527,"line":545},[525,9927,549],{"emptyLinePlaceholder":548},[525,9929,9930,9933,9935],{"class":527,"line":552},[525,9931,9932],{"class":535},"voorkennis ",[525,9934,880],{"class":568},[525,9936,1868],{"class":568},[525,9938,9939,9941,9943,9945,9947,9949,9951,9953,9955,9957,9959,9961,9963,9965,9967,9969,9971,9973,9975,9977,9979,9981,9983,9985,9987,9989,9991,9993,9995,9997,9999],{"class":527,"line":557},[525,9940,7050],{"class":568},[525,9942,6505],{"class":5628},[525,9944,5632],{"class":568},[525,9946,2187],{"class":568},[525,9948,1274],{"class":568},[525,9950,5632],{"class":568},[525,9952,6442],{"class":5628},[525,9954,5632],{"class":568},[525,9956,4120],{"class":568},[525,9958,5625],{"class":568},[525,9960,6513],{"class":5628},[525,9962,5632],{"class":568},[525,9964,2187],{"class":568},[525,9966,1274],{"class":568},[525,9968,5632],{"class":568},[525,9970,6529],{"class":5628},[525,9972,5632],{"class":568},[525,9974,4120],{"class":568},[525,9976,5625],{"class":568},[525,9978,6521],{"class":5628},[525,9980,5632],{"class":568},[525,9982,2187],{"class":568},[525,9984,1274],{"class":568},[525,9986,5632],{"class":568},[525,9988,6505],{"class":5628},[525,9990,5632],{"class":568},[525,9992,589],{"class":568},[525,9994,5625],{"class":568},[525,9996,6529],{"class":5628},[525,9998,5632],{"class":568},[525,10000,7135],{"class":568},[525,10002,10003,10005,10007,10009,10011,10013,10015,10017,10019,10021,10023,10025,10027,10029,10031,10033,10035,10037,10039,10041,10043,10045,10047],{"class":527,"line":572},[525,10004,7050],{"class":568},[525,10006,6529],{"class":5628},[525,10008,5632],{"class":568},[525,10010,2187],{"class":568},[525,10012,1274],{"class":568},[525,10014,5632],{"class":568},[525,10016,6442],{"class":5628},[525,10018,5632],{"class":568},[525,10020,4120],{"class":568},[525,10022,5625],{"class":568},[525,10024,6442],{"class":5628},[525,10026,5632],{"class":568},[525,10028,2187],{"class":568},[525,10030,1274],{"class":568},[525,10032,5632],{"class":568},[525,10034,6544],{"class":5628},[525,10036,5632],{"class":568},[525,10038,4120],{"class":568},[525,10040,5625],{"class":568},[525,10042,6544],{"class":5628},[525,10044,5632],{"class":568},[525,10046,2187],{"class":568},[525,10048,10049],{"class":568}," [],\n",[525,10051,10052],{"class":527,"line":599},[525,10053,1935],{"class":568},[525,10055,10056],{"class":527,"line":617},[525,10057,549],{"emptyLinePlaceholder":548},[525,10059,10060],{"class":527,"line":632},[525,10061,549],{"emptyLinePlaceholder":548},[525,10063,10064,10066,10069,10071,10073],{"class":527,"line":646},[525,10065,659],{"class":560},[525,10067,10068],{"class":578}," kahn",[525,10070,582],{"class":568},[525,10072,7247],{"class":592},[525,10074,596],{"class":568},[525,10076,10077,10080,10082,10084,10086,10088,10090,10092,10094,10096,10098],{"class":527,"line":651},[525,10078,10079],{"class":535},"    ingang ",[525,10081,880],{"class":568},[525,10083,4845],{"class":568},[525,10085,7387],{"class":535},[525,10087,2187],{"class":568},[525,10089,4035],{"class":1686},[525,10091,8883],{"class":531},[525,10093,7337],{"class":535},[525,10095,466],{"class":531},[525,10097,7704],{"class":535},[525,10099,1935],{"class":568},[525,10101,10102,10104,10106,10108,10110],{"class":527,"line":656},[525,10103,7516],{"class":531},[525,10105,7827],{"class":535},[525,10107,466],{"class":531},[525,10109,7704],{"class":535},[525,10111,569],{"class":568},[525,10113,10114,10116,10118,10120,10122,10124,10126],{"class":527,"line":676},[525,10115,1587],{"class":531},[525,10117,7337],{"class":535},[525,10119,466],{"class":531},[525,10121,7704],{"class":535},[525,10123,4079],{"class":568},[525,10125,6733],{"class":535},[525,10127,1729],{"class":568},[525,10129,10130,10133,10135,10137,10139,10142],{"class":527,"line":691},[525,10131,10132],{"class":535},"            ingang",[525,10134,4079],{"class":568},[525,10136,7387],{"class":535},[525,10138,1283],{"class":568},[525,10140,10141],{"class":568}," +=",[525,10143,4023],{"class":1686},[525,10145,10146,10148,10150,10152,10155,10157,10159,10161,10164,10167,10170,10172,10174,10176,10179,10181],{"class":527,"line":710},[525,10147,8912],{"class":535},[525,10149,880],{"class":568},[525,10151,1274],{"class":568},[525,10153,10154],{"class":535},"v ",[525,10156,1676],{"class":531},[525,10158,7337],{"class":535},[525,10160,466],{"class":531},[525,10162,10163],{"class":535}," graaf ",[525,10165,10166],{"class":531},"if",[525,10168,10169],{"class":535}," ingang",[525,10171,4079],{"class":568},[525,10173,7387],{"class":535},[525,10175,1283],{"class":568},[525,10177,10178],{"class":568}," ==",[525,10180,4035],{"class":1686},[525,10182,1471],{"class":568},[525,10184,10185,10188,10190,10192,10194,10196,10198],{"class":527,"line":730},[525,10186,10187],{"class":535},"    heapq",[525,10189,68],{"class":568},[525,10191,5810],{"class":578},[525,10193,582],{"class":568},[525,10195,9528],{"class":578},[525,10197,703],{"class":568},[525,10199,10200],{"class":706},"  # min-heap: alfabetisch kleinste eerst\n",[525,10202,10203,10205,10207],{"class":527,"line":759},[525,10204,7288],{"class":535},[525,10206,880],{"class":568},[525,10208,3954],{"class":568},[525,10210,10211,10213,10215],{"class":527,"line":778},[525,10212,845],{"class":531},[525,10214,8986],{"class":535},[525,10216,569],{"class":568},[525,10218,10219,10221,10223,10225,10227,10229,10231,10233],{"class":527,"line":805},[525,10220,7305],{"class":535},[525,10222,880],{"class":568},[525,10224,5722],{"class":535},[525,10226,68],{"class":568},[525,10228,5727],{"class":578},[525,10230,582],{"class":568},[525,10232,9528],{"class":578},[525,10234,756],{"class":568},[525,10236,10237,10239,10241,10243,10245,10247],{"class":527,"line":814},[525,10238,7320],{"class":535},[525,10240,68],{"class":568},[525,10242,1571],{"class":578},[525,10244,582],{"class":568},[525,10246,6733],{"class":578},[525,10248,756],{"class":568},[525,10250,10251,10253,10255,10257,10259,10261,10263],{"class":527,"line":819},[525,10252,1587],{"class":531},[525,10254,7337],{"class":535},[525,10256,466],{"class":531},[525,10258,7704],{"class":535},[525,10260,4079],{"class":568},[525,10262,6733],{"class":535},[525,10264,1729],{"class":568},[525,10266,10267,10269,10271,10273,10275,10278],{"class":527,"line":824},[525,10268,10132],{"class":535},[525,10270,4079],{"class":568},[525,10272,7387],{"class":535},[525,10274,1283],{"class":568},[525,10276,10277],{"class":568}," -=",[525,10279,4023],{"class":1686},[525,10281,10282,10284,10286,10288,10290,10292,10294,10296],{"class":527,"line":842},[525,10283,1617],{"class":531},[525,10285,10169],{"class":535},[525,10287,4079],{"class":568},[525,10289,7387],{"class":535},[525,10291,1283],{"class":568},[525,10293,10178],{"class":568},[525,10295,4035],{"class":1686},[525,10297,569],{"class":568},[525,10299,10300,10302,10304,10306,10308,10310,10312,10314],{"class":527,"line":874},[525,10301,9094],{"class":535},[525,10303,68],{"class":568},[525,10305,5609],{"class":578},[525,10307,582],{"class":568},[525,10309,9528],{"class":578},[525,10311,589],{"class":568},[525,10313,7562],{"class":578},[525,10315,756],{"class":568},[525,10317,10318,10320,10322,10324,10327,10329,10331,10333,10335,10337],{"class":527,"line":912},[525,10319,679],{"class":531},[525,10321,4007],{"class":578},[525,10323,582],{"class":568},[525,10325,10326],{"class":578},"volgorde",[525,10328,703],{"class":568},[525,10330,4406],{"class":568},[525,10332,4007],{"class":578},[525,10334,582],{"class":568},[525,10336,7247],{"class":578},[525,10338,596],{"class":568},[525,10340,10341,10344,10347,10349,10351,10354,10356],{"class":527,"line":919},[525,10342,10343],{"class":531},"        raise",[525,10345,10346],{"class":564}," ValueError",[525,10348,582],{"class":568},[525,10350,5632],{"class":568},[525,10352,10353],{"class":5628},"graaf bevat een cyclus",[525,10355,5632],{"class":568},[525,10357,756],{"class":568},[525,10359,10360,10362],{"class":527,"line":924},[525,10361,808],{"class":531},[525,10363,7413],{"class":535},[525,10365,10366],{"class":527,"line":929},[525,10367,549],{"emptyLinePlaceholder":548},[525,10369,10370],{"class":527,"line":947},[525,10371,549],{"emptyLinePlaceholder":548},[525,10373,10374,10376,10378,10381,10383,10386,10388],{"class":527,"line":958},[525,10375,1756],{"class":578},[525,10377,582],{"class":568},[525,10379,10380],{"class":578},"kahn",[525,10382,582],{"class":568},[525,10384,10385],{"class":578},"voorkennis",[525,10387,1768],{"class":568},[525,10389,10390],{"class":706},"  # ['B', 'C', 'A', 'D', 'E', 'F']\n",[515,10392,10393],{"v-slot:java":223},[215,10394,10396],{"className":1776,"code":10395,"language":1778,"meta":223,"style":223},"import java.util.*;\n\nstatic List\u003CString> kahn(Map\u003CString, List\u003CString>> graaf) {\n    Map\u003CString, Integer> ingang = new HashMap\u003C>();\n    for (String v : graaf.keySet()) ingang.put(v, 0);\n    for (List\u003CString> opvolgers : graaf.values()) {\n        for (String v : opvolgers) ingang.merge(v, 1, Integer::sum);\n    }\n    PriorityQueue\u003CString> klaar = new PriorityQueue\u003C>(); \u002F\u002F alfabetisch kleinste eerst\n    for (String v : graaf.keySet()) if (ingang.get(v) == 0) klaar.add(v);\n    List\u003CString> volgorde = new ArrayList\u003C>();\n    while (!klaar.isEmpty()) {\n        String u = klaar.poll();\n        volgorde.add(u);\n        for (String v : graaf.get(u)) {\n            if (ingang.merge(v, -1, Integer::sum) == 0) klaar.add(v);\n        }\n    }\n    if (volgorde.size() \u003C graaf.size()) throw new IllegalStateException(\"graaf bevat een cyclus\");\n    return volgorde;\n}\n",[28,10397,10398,10414,10418,10456,10482,10518,10548,10591,10595,10618,10673,10693,10709,10725,10739,10765,10815,10819,10823,10865,10873],{"__ignoreMap":223},[525,10399,10400,10402,10404,10406,10408,10410,10412],{"class":527,"line":528},[525,10401,539],{"class":1686},[525,10403,1787],{"class":560},[525,10405,68],{"class":568},[525,10407,1792],{"class":560},[525,10409,68],{"class":568},[525,10411,7660],{"class":535},[525,10413,1800],{"class":568},[525,10415,10416],{"class":527,"line":545},[525,10417,549],{"emptyLinePlaceholder":548},[525,10419,10420,10422,10424,10426,10428,10430,10432,10434,10436,10438,10440,10442,10444,10446,10448,10450,10452,10454],{"class":527,"line":552},[525,10421,1860],{"class":560},[525,10423,2556],{"class":560},[525,10425,718],{"class":568},[525,10427,7677],{"class":535},[525,10429,767],{"class":568},[525,10431,10068],{"class":578},[525,10433,582],{"class":568},[525,10435,7686],{"class":560},[525,10437,718],{"class":568},[525,10439,7677],{"class":535},[525,10441,589],{"class":568},[525,10443,2556],{"class":560},[525,10445,718],{"class":568},[525,10447,7677],{"class":535},[525,10449,7701],{"class":568},[525,10451,7704],{"class":535},[525,10453,703],{"class":568},[525,10455,1868],{"class":568},[525,10457,10458,10460,10462,10464,10466,10468,10470,10473,10475,10477,10480],{"class":527,"line":557},[525,10459,9293],{"class":560},[525,10461,718],{"class":568},[525,10463,7677],{"class":560},[525,10465,589],{"class":568},[525,10467,5916],{"class":560},[525,10469,767],{"class":568},[525,10471,10472],{"class":535}," ingang ",[525,10474,880],{"class":568},[525,10476,1987],{"class":531},[525,10478,10479],{"class":560}," HashMap",[525,10481,2920],{"class":568},[525,10483,10484,10486,10488,10490,10492,10494,10496,10498,10500,10502,10504,10506,10508,10510,10512,10514,10516],{"class":527,"line":572},[525,10485,7516],{"class":531},[525,10487,334],{"class":568},[525,10489,7677],{"class":560},[525,10491,7337],{"class":535},[525,10493,2187],{"class":531},[525,10495,7704],{"class":535},[525,10497,68],{"class":568},[525,10499,9337],{"class":578},[525,10501,2984],{"class":568},[525,10503,10169],{"class":535},[525,10505,68],{"class":568},[525,10507,9346],{"class":578},[525,10509,582],{"class":568},[525,10511,7387],{"class":535},[525,10513,589],{"class":568},[525,10515,4035],{"class":1686},[525,10517,2043],{"class":568},[525,10519,10520,10522,10524,10526,10528,10530,10532,10535,10537,10539,10541,10544,10546],{"class":527,"line":599},[525,10521,7516],{"class":531},[525,10523,334],{"class":568},[525,10525,1849],{"class":560},[525,10527,718],{"class":568},[525,10529,7677],{"class":560},[525,10531,767],{"class":568},[525,10533,10534],{"class":535}," opvolgers ",[525,10536,2187],{"class":531},[525,10538,7704],{"class":535},[525,10540,68],{"class":568},[525,10542,10543],{"class":578},"values",[525,10545,2984],{"class":568},[525,10547,1868],{"class":568},[525,10549,10550,10552,10554,10556,10558,10560,10563,10565,10567,10569,10572,10574,10576,10578,10580,10582,10584,10586,10589],{"class":527,"line":617},[525,10551,1587],{"class":531},[525,10553,334],{"class":568},[525,10555,7677],{"class":560},[525,10557,7337],{"class":535},[525,10559,2187],{"class":531},[525,10561,10562],{"class":535}," opvolgers",[525,10564,703],{"class":568},[525,10566,10169],{"class":535},[525,10568,68],{"class":568},[525,10570,10571],{"class":578},"merge",[525,10573,582],{"class":568},[525,10575,7387],{"class":535},[525,10577,589],{"class":568},[525,10579,1701],{"class":1686},[525,10581,589],{"class":568},[525,10583,5916],{"class":535},[525,10585,9440],{"class":531},[525,10587,10588],{"class":535},"sum",[525,10590,2043],{"class":568},[525,10592,10593],{"class":527,"line":632},[525,10594,1930],{"class":568},[525,10596,10597,10599,10601,10603,10605,10607,10609,10611,10613,10615],{"class":527,"line":646},[525,10598,5881],{"class":560},[525,10600,718],{"class":568},[525,10602,7677],{"class":560},[525,10604,767],{"class":568},[525,10606,9392],{"class":535},[525,10608,880],{"class":568},[525,10610,1987],{"class":531},[525,10612,5898],{"class":560},[525,10614,9315],{"class":568},[525,10616,10617],{"class":706}," \u002F\u002F alfabetisch kleinste eerst\n",[525,10619,10620,10622,10624,10626,10628,10630,10632,10634,10636,10638,10640,10642,10645,10647,10649,10651,10653,10655,10657,10659,10661,10663,10665,10667,10669,10671],{"class":527,"line":651},[525,10621,7516],{"class":531},[525,10623,334],{"class":568},[525,10625,7677],{"class":560},[525,10627,7337],{"class":535},[525,10629,2187],{"class":531},[525,10631,7704],{"class":535},[525,10633,68],{"class":568},[525,10635,9337],{"class":578},[525,10637,2984],{"class":568},[525,10639,889],{"class":531},[525,10641,334],{"class":568},[525,10643,10644],{"class":535},"ingang",[525,10646,68],{"class":568},[525,10648,4888],{"class":578},[525,10650,582],{"class":568},[525,10652,7387],{"class":535},[525,10654,703],{"class":568},[525,10656,10178],{"class":568},[525,10658,4035],{"class":1686},[525,10660,703],{"class":568},[525,10662,8986],{"class":535},[525,10664,68],{"class":568},[525,10666,2597],{"class":578},[525,10668,582],{"class":568},[525,10670,7387],{"class":535},[525,10672,2043],{"class":568},[525,10674,10675,10677,10679,10681,10683,10685,10687,10689,10691],{"class":527,"line":656},[525,10676,2901],{"class":560},[525,10678,718],{"class":568},[525,10680,7677],{"class":560},[525,10682,767],{"class":568},[525,10684,7471],{"class":535},[525,10686,880],{"class":568},[525,10688,1987],{"class":531},[525,10690,2917],{"class":560},[525,10692,2920],{"class":568},[525,10694,10695,10697,10699,10701,10703,10705,10707],{"class":527,"line":676},[525,10696,845],{"class":531},[525,10698,2973],{"class":568},[525,10700,9528],{"class":535},[525,10702,68],{"class":568},[525,10704,2981],{"class":578},[525,10706,2984],{"class":568},[525,10708,1868],{"class":568},[525,10710,10711,10713,10715,10717,10719,10721,10723],{"class":527,"line":691},[525,10712,7824],{"class":560},[525,10714,7827],{"class":535},[525,10716,880],{"class":568},[525,10718,8986],{"class":535},[525,10720,68],{"class":568},[525,10722,3001],{"class":578},[525,10724,3004],{"class":568},[525,10726,10727,10729,10731,10733,10735,10737],{"class":527,"line":710},[525,10728,7320],{"class":535},[525,10730,68],{"class":568},[525,10732,2597],{"class":578},[525,10734,582],{"class":568},[525,10736,6733],{"class":535},[525,10738,2043],{"class":568},[525,10740,10741,10743,10745,10747,10749,10751,10753,10755,10757,10759,10761,10763],{"class":527,"line":730},[525,10742,1587],{"class":531},[525,10744,334],{"class":568},[525,10746,7677],{"class":560},[525,10748,7337],{"class":535},[525,10750,2187],{"class":531},[525,10752,7704],{"class":535},[525,10754,68],{"class":568},[525,10756,4888],{"class":578},[525,10758,582],{"class":568},[525,10760,6733],{"class":535},[525,10762,1768],{"class":568},[525,10764,1868],{"class":568},[525,10766,10767,10769,10771,10773,10775,10777,10779,10781,10783,10785,10787,10789,10791,10793,10795,10797,10799,10801,10803,10805,10807,10809,10811,10813],{"class":527,"line":759},[525,10768,1617],{"class":531},[525,10770,334],{"class":568},[525,10772,10644],{"class":535},[525,10774,68],{"class":568},[525,10776,10571],{"class":578},[525,10778,582],{"class":568},[525,10780,7387],{"class":535},[525,10782,589],{"class":568},[525,10784,4020],{"class":568},[525,10786,149],{"class":1686},[525,10788,589],{"class":568},[525,10790,5916],{"class":535},[525,10792,9440],{"class":531},[525,10794,10588],{"class":535},[525,10796,703],{"class":568},[525,10798,10178],{"class":568},[525,10800,4035],{"class":1686},[525,10802,703],{"class":568},[525,10804,8986],{"class":535},[525,10806,68],{"class":568},[525,10808,2597],{"class":578},[525,10810,582],{"class":568},[525,10812,7387],{"class":535},[525,10814,2043],{"class":568},[525,10816,10817],{"class":527,"line":778},[525,10818,4944],{"class":568},[525,10820,10821],{"class":527,"line":805},[525,10822,1930],{"class":568},[525,10824,10825,10827,10829,10831,10833,10835,10837,10839,10841,10843,10845,10847,10850,10852,10855,10857,10859,10861,10863],{"class":527,"line":814},[525,10826,679],{"class":531},[525,10828,334],{"class":568},[525,10830,10326],{"class":535},[525,10832,68],{"class":568},[525,10834,4819],{"class":578},[525,10836,4822],{"class":568},[525,10838,4406],{"class":568},[525,10840,7704],{"class":535},[525,10842,68],{"class":568},[525,10844,4819],{"class":578},[525,10846,2984],{"class":568},[525,10848,10849],{"class":531}," throw",[525,10851,1987],{"class":531},[525,10853,10854],{"class":578}," IllegalStateException",[525,10856,582],{"class":568},[525,10858,5632],{"class":568},[525,10860,10353],{"class":5628},[525,10862,5632],{"class":568},[525,10864,2043],{"class":568},[525,10866,10867,10869,10871],{"class":527,"line":819},[525,10868,808],{"class":531},[525,10870,7447],{"class":535},[525,10872,1800],{"class":568},[525,10874,10875],{"class":527,"line":824},[525,10876,1935],{"class":568},[33,10878,3235],{"id":3234},[90,10880,10881,10897],{},[93,10882,10883],{},[96,10884,10885,10888,10891,10894],{},[99,10886,10887],{},"Algoritme",[99,10889,10890],{},"Tijd (adjacency list)",[99,10892,10893],{},"Tijd (matrix)",[99,10895,10896],{},"Extra geheugen",[109,10898,10899,10916,10933,10950,10967],{},[96,10900,10901,10904,10908,10912],{},[114,10902,10903],{},"BFS",[114,10905,10906],{},[28,10907,6703],{},[114,10909,10910],{},[28,10911,6708],{},[114,10913,10914],{},[28,10915,6742],{},[96,10917,10918,10921,10925,10929],{},[114,10919,10920],{},"DFS",[114,10922,10923],{},[28,10924,6703],{},[114,10926,10927],{},[28,10928,6708],{},[114,10930,10931],{},[28,10932,6742],{},[96,10934,10935,10938,10943,10946],{},[114,10936,10937],{},"Dijkstra met binaire heap",[114,10939,10940],{},[28,10941,10942],{},"O((V + E) log V)",[114,10944,10945],{},"—",[114,10947,10948],{},[28,10949,6703],{},[96,10951,10952,10955,10959,10963],{},[114,10953,10954],{},"Dijkstra met array, zonder heap",[114,10956,10957],{},[28,10958,6708],{},[114,10960,10961],{},[28,10962,6708],{},[114,10964,10965],{},[28,10966,6742],{},[96,10968,10969,10972,10976,10980],{},[114,10970,10971],{},"Kahn",[114,10973,10974],{},[28,10975,6703],{},[114,10977,10978],{},[28,10979,6708],{},[114,10981,10982],{},[28,10983,6742],{},[10,10985,10986,10987,10990,10991,10994,10995,10998,10999,11002,11003,11005,11006,68],{},"BFS en DFS bekijken elke knoop één keer en elke kant (bij een ongerichte graaf) twee keer, vandaar\n",[28,10988,10989],{},"V + E",". Dijkstra doet daarbovenop heap-operaties van ",[28,10992,10993],{},"O(log V)","; zie ",[19,10996,6344],{"href":10997},"\u002Fpracticely\u002Fdsa\u002Fheaps",".\nKahn met de alfabetische keuze via een heap kost ",[28,11000,11001],{},"O(V log V + E)","; zonder die eis volstaat een gewone\nwachtrij en is het ",[28,11004,6703],{},". Meer over deze notatie lees je bij ",[19,11007,3234],{"href":11008},"\u002Fpracticely\u002Fdsa\u002Fcomplexiteit",[33,11010,3330],{"id":3329},[3332,11012,11013,11025,11031,11047,11057],{},[49,11014,11015,11018,11019,11021,11022,11024],{},[41,11016,11017],{},"Buren niet alfabetisch bekijken."," Bij ",[28,11020,6513],{}," zijn de buren ",[28,11023,6516],{},", in die volgorde. Neem je\nze in de volgorde waarin de kanten in de opgave staan, dan krijg je een ander antwoord.",[49,11026,11027,11030],{},[41,11028,11029],{},"BFS: een knoop pas markeren als hij uit de wachtrij komt."," Dan kan hij er twee keer in komen.\nMarkeer hem als bezocht zodra hij erin gaat.",[49,11032,11033,11036,11037,11039,11040,6477,11042,11044,11045,68],{},[41,11034,11035],{},"DFS als BFS uitvoeren."," Bij DFS ga je na ",[28,11038,6513],{}," meteen door naar de eerste onbezochte buur van ",[28,11041,6513],{},[28,11043,6521],{},"), niet eerst terug naar de andere buren van ",[28,11046,6505],{},[49,11048,11049,11052,11053,11056],{},[41,11050,11051],{},"Dijkstra: een afgeronde knoop opnieuw aanpassen of bij gelijke afstand overschrijven."," Een\nafstand verandert alleen als de nieuwe route ",[41,11054,11055],{},"strikt"," korter is.",[49,11058,11059,11062],{},[41,11060,11061],{},"Kahn: de ingangsgraden niet bijwerken."," Verlaag na elke keuze de ingangsgraad van alle\nopvolgers; pas dan zie je welke knopen nieuw beschikbaar zijn.",[33,11064,3397],{"id":3396},[46,11066,11067,11073,11079,11085],{},[49,11068,11069,11070,11072],{},"Een graaf bestaat uit knopen en kanten, gericht of ongericht, gewogen of niet; meestal sla je hem op\nals adjacency list (",[28,11071,6703],{}," geheugen).",[49,11074,11075,11076,11078],{},"BFS gebruikt een wachtrij en verkent laag voor laag; DFS gaat recursief zo diep mogelijk. Beide\n",[28,11077,6703],{},", buren altijd alfabetisch.",[49,11080,11081,11082,11084],{},"Dijkstra kiest steeds de knoop met de kleinste voorlopige afstand en werkt alleen met\nniet-negatieve gewichten: ",[28,11083,10942],{}," met een heap.",[49,11086,11087],{},"Kahn sorteert een DAG topologisch door steeds een knoop met ingangsgraad 0 te kiezen (bij ons de\nalfabetisch kleinste) en detecteert zo ook cycli.",[3424,11089,11090],{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":223,"searchDepth":545,"depth":545,"links":11092},[11093,11094,11095,11096,11097,11098,11099,11100,11101],{"id":6371,"depth":545,"text":6372},{"id":6462,"depth":545,"text":6463},{"id":6763,"depth":545,"text":6764},{"id":6910,"depth":545,"text":6911},{"id":8313,"depth":545,"text":8314},{"id":9755,"depth":545,"text":9756},{"id":3234,"depth":545,"text":3235},{"id":3329,"depth":545,"text":3330},{"id":3396,"depth":545,"text":3397},"Leer grafen representeren met adjacency lists en matrices, en traceer BFS, DFS, Dijkstra en het algoritme van Kahn stap voor stap, met code in Python en Java.","i-lucide-waypoints",{},"\u002Fpracticely-dsa\u002Fgrafen",{"title":6348,"description":11102},"practicely-dsa\u002Fgrafen","J0aQBdQbYkvKjbrR1zl45Lv4_kltmHb8pUgHLstrMbU",1793084908280]