Wat is het ideale maximum aantal kinderen (m) van de knopen in de zoekboom?
Het beste resultaat wordt bekomen als:
m de grootst mogelijk oneven integer is zodat m kinderpointers en m-1 indexrecords <sleutel, datapointer> in één enkel blok van het indexbestand passen.
Wel, de operatie met de meeste kost bij externe tabels is net I/O operaties. Het inlezen en wegschrijven van blokken vereist veel meer tijd dan het verwerken van de gegevens uit de blokken in het interne geheugen. Dus deze operaties moet je zo veel mogelijk beperken als je efficiënt wil werken.
Elk blok van het indexbestand is een node in de B-boom en bevat 3 pointers naar kinderen (-1 is de null pointer). De pointers zijn dus gehele getallen die naar blokken verwijzen, geen geheugenadressen zoals we gewoon zijn dus.
Aangezien je I/O operaties wil beperken, moet je proberen zoveel mogelijk indexrecords <sleutel, datapointer> in 1 blok van het indexbestand stoppen. Zo kan er in het interne geheugen met de gegevens gerommeld worden en zodat er zo weinig mogelijk andere blokken opgevraagd moeten worden. Stel dat één blok maximaal m-1 indexrecords kan bevatten, dan zijn er m kinderen aan die node. (zie figuur 14.11 op pagina 790 in het handboek) Als je dit vergelijkt met een 2-3-Tree: je hebt bijv. 2 indexrecords in een node steken, dan moet die node 3 children hebben... anders is het geen 2-3-tree meer.
Als m oneven is, zijn de algoritmen eenvoudiger.
nja, ik vermoed dat te maken heeft met de splitfunctie. Bij een 2-3 tree (m is 3) moet een node gesplitst worden als er een node 3 items bevat. Dan moet het 'middelste item' naar de parent gebracht worden en die 2 andere items worden in een aparte node gestopt. Tis dus handig dat m = 3, want dan kan je altijd het middelste item van een overvolle node bepalen. In een overvolle node zitten er 3 items, dus er moet wel een 'middelste' zijn. Wat zou het zijn als een overvolle node 4 items heeft, m = 4? welk item in die node is dan het middelste?
Als m oneven is, dan zijn de algoritmes dus eenvoudiger...[/quote]