From 0c602ce0571cba4a01b9dbbf288d427e03c9bb12 Mon Sep 17 00:00:00 2001 From: "pierre.kunzli" <pierre.kunzli@hesge.ch> Date: Wed, 4 May 2022 00:35:26 +0200 Subject: [PATCH] Pk --- slides/cours_23.md | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/slides/cours_23.md b/slides/cours_23.md index e2fac89..9665440 100644 --- a/slides/cours_23.md +++ b/slides/cours_23.md @@ -127,15 +127,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].clef == valeur) ``` # Les B-arbres @@ -157,6 +159,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) @@ -183,7 +186,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) @@ -202,9 +205,11 @@ page inserer(page, valeur) // inserer une valeur ```C page inserer(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 != vide && element.page != vide + // si on atteint le sommet + page = ajouter_niveau(page, element) retourne page ``` @@ -213,7 +218,8 @@ page inserer(page, valeur) ## Les fonctions ```C -rien inserer_element(page, element) // inserer un element et voir s'il remonte +// inserer un element et voir s'il remonte +rien inserer_element(page, element) ``` . . . @@ -225,7 +231,7 @@ rien inserer_element(page, element) sinon sous_page = page.tab[position(page, element)].page inserer_element(sous_page, element) - si element.page != vide + si element != vide && element.page != vide placer(page, element) ``` @@ -241,13 +247,15 @@ rien placer(page, element) // inserer un élément ```C rien placer(page, element) - i = position(page, element.clé) + i = position(page, element.clef) pour i de 2*page.ordre à i+1 page.tab[i+1] = page.tab[i] page.tab[i+1] = element page.nb += 1 si page.nb > 2*page.ordre scinder(page, element) + sinon + element = vide ``` # Les B-arbres @@ -266,7 +274,7 @@ rien scinder(page, element) new_page.nb = page.ordre pour i de 0 à ordre inclu new_page.tab[i] = page.tab[i+ordre+1] - element.clé = page.tab[ordre+1].clé + element.clef = page.tab[ordre+1].clé element.page = new_page ``` @@ -285,7 +293,7 @@ page ajouter_niveau(page, element) // si on remonte à la racine... page ajouter_niveau(page, element) tmp = nouvelle_page(page.ordre) tmp.tab[0].page = page - tmp.tab[1].clé = element.clé + tmp.tab[1].clef = element.clef tmp.tab[1].page = element.page retourne tmp ``` -- GitLab