diff --git a/slides/cours_22.md b/slides/cours_22.md index 025837547b71d1b5c390f452203b7029a9a2c6a9..52bc02d9b8752db95302c26d666bae29b4cc39e1 100644 --- a/slides/cours_22.md +++ b/slides/cours_22.md @@ -411,15 +411,17 @@ booléen est_dans_page(page, valeur) // la valeur est dans la page ```C booléen est_feuille(page) - retourne (page.tab[0] == vide) + retourne (page.tab[0].pg == vide) + entier position(page, valeur) i = 0 - tant que i < page.nb && val >= page.tab[i] + tant que i < page.nb && val >= page.tab[i+1].clef i += 1 retourne i + booléen est_dans_page(page, valeur) i = position(page, valeur) - retourne (i > 0 && page.tab[i] == valeur) + retourne (page.nb > 0 && page.tab[i].val == valeur) ``` # Les B-arbres @@ -441,6 +443,7 @@ page nouvelle_page(ordre) page.nb = 0 page.tab = allouer(2*ordre+2) retourner page + rien liberer_memoire(page) si est_feuille(page) liberer(page.tab) @@ -467,7 +470,7 @@ page recherche(page, valeur) // retourner la page contenant page recherche(page, valeur) si est_dans_page(page, valeur) retourne page - sinon si est_feuille(page) && !est_dans_page(page, valeur) + sinon si est_feuille(page) retourne vide sinon recherche(page.tab[position(page, valeur)], valeur) @@ -478,17 +481,19 @@ page recherche(page, valeur) ## Les fonctions ```C -page inserer(page, valeur) // inserer une valeur +page inserer_valeur(page, valeur) // inserer une valeur ``` . . . ```C -page inserer(page, valeur) +page inserer_valeur(page, valeur) element = nouvel_element(valeur) - inserer_element(page, element) // on change elmement pour savoir s'il faut le remonter - si element.page != vide - page = ajouter_niveau(page, element) // si on atteint le sommet! + // on change element pour savoir s'il faut le remonter + inserer_element(page, element) + si element.page != vide && page.nb > 2*page.ordre + // si on atteint le sommet! + page = ajouter_niveau(page, element) retourne page ``` @@ -509,6 +514,7 @@ rien inserer_element(page, element) sinon sous_page = page.tab[position(page, element)].page inserer_element(sous_page, element) + // un element a été promu si element.page != vide placer(page, element) ``` @@ -525,10 +531,10 @@ rien placer(page, element) // inserer un élément ```C rien placer(page, element) - i = position(page, element.clé) - pour i de 2*page.ordre à i+1 + pos = position(page, element.clé) + pour i de 2*page.ordre à pos+1 page.tab[i+1] = page.tab[i] - page.tab[i+1] = element + page.tab[pos+1] = element page.nb += 1 si page.nb > 2*page.ordre scinder(page, element)