CHAPITRE 4 : LA HAUTEUR, ET POURQUOI ELLE RESTE MINUSCULE

Tout l'intérêt du B-arbre tient dans un seul résultat : sa hauteur est bornée par un logarithme en base t. Comme t vaut couramment une centaine, cette hauteur est ridiculement petite. Démontrons-le.

L'énoncé

Théorème. Soit T un B-arbre de degré minimal t ≥ 2 contenant n ≥ 1 clés. Alors sa hauteur h vérifie :

h ≤ logt ( (n + 1) / 2 )

Avant de le démontrer, mesurons ce qu'il dit. Pour n = 1 000 000 de clés :

Degré tBorne sur hAccès disque
218,9 → 1818
105,7 → 55
1002,8 → 22
1282,7 → 22

Deux niveaux pour un million de clés. C'est cela, le gain.

L'idée de la démonstration

Pour majorer la hauteur, on cherche à minorer le nombre de clés : on se demande quel est le plus petit nombre de clés que peut contenir un B-arbre de hauteur h. Si même le plus dégarni des arbres de hauteur h contient beaucoup de clés, alors un arbre contenant peu de clés ne peut pas être haut.

On majore la hauteur en minorant le remplissage. C'est le raisonnement type pour toutes les structures équilibrées.

Compter les nœuds, niveau par niveau

Plaçons-nous dans le cas le plus défavorable : chaque nœud contient le minimum de clés autorisé.

  • La racine a au moins 1 clé, donc au moins 2 fils.
  • Tout autre nœud a au moins t − 1 clés, donc au moins t fils.

Comptons alors les nœuds à chaque profondeur :

ProfondeurNombre de nœuds, au minimum
0 (racine)1
12
22t
32t²
……
i (pour i ≥ 1)2 ti−1

La racine donne 2 fils ; ensuite chaque nœud en donne t, d'où la puissance qui démarre à i = 1.

Du nombre de nœuds au nombre de clés

Chaque nœud de profondeur ≥ 1 porte au moins t − 1 clés, et la racine en porte au moins 1. Donc :

n ≥ 1 + (t − 1) · Σi=1h 2 ti−1

Développons la somme géométrique :

somme_{i=1}^{h} 2 t^(i-1)  =  2 (1 + t + t^2 + ... + t^(h-1))

                           =  2 (t^h - 1) / (t - 1)

En reportant :

n  >=  1 + (t - 1) x 2 (t^h - 1) / (t - 1)

   >=  1 + 2 (t^h - 1)

   >=  2 t^h - 1

Le moment clé : le facteur (t − 1) de la borne inférieure sur les clés s'annule exactement avec le dénominateur (t − 1) de la somme géométrique. C'est ce qui rend le résultat aussi propre, et ce n'est pas un hasard : les deux viennent de la même contrainte de remplissage.

Conclure

De n ≥ 2th − 1, on isole th :

th ≤ (n + 1) / 2

Puis on passe au logarithme de base t, qui est croissant :

h ≤ logt ( (n + 1) / 2 )    ∎

Pourquoi la base du logarithme compte

Au chapitre sur la complexité, on apprend qu'on néglige la base d'un logarithme, puisque changer de base revient à multiplier par une constante. C'est vrai, et ici, c'est précisément cette constante qui nous intéresse.

log_t(n) = log_2(n) / log_2(t)

t = 2   : on divise par 1       -> aucun gain
t = 128 : on divise par 7       -> 7 fois moins de niveaux
t = 1024: on divise par 10      -> 10 fois moins de niveaux

Un facteur 7 serait anecdotique sur des opérations à 10 nanosecondes. Sur des accès à 10 millisecondes, il fait passer une requête de 0,2 seconde à 0,03 seconde.

La théorie dit « c'est la même complexité ». L'ingénierie dit « c'est sept fois moins de disque ». Les deux ont raison, et c'est la seconde qu'on paie.

La borne est pessimiste

Le théorème suppose tous les nœuds au minimum de remplissage. En pratique, après des insertions quelconques, les nœuds sont remplis à environ 70 % en moyenne, et la hauteur réelle est souvent inférieure d'un niveau à la borne.

On peut d'ailleurs encadrer la hauteur des deux côtés. Dans le meilleur cas, tous les nœuds sont pleins avec 2t − 1 clés, et :

log2t(n + 1) ≤ h ≤ logt((n + 1)/2)

À retenir

  • h ≤ logt((n + 1)/2) : la hauteur est logarithmique en base t.
  • La démonstration majore la hauteur en minorant le remplissage, dans le pire cas où chaque nœud est au minimum.
  • Le facteur (t − 1) de la borne s'annule avec celui de la somme géométrique : c'est le pivot du calcul.
  • La base du logarithme est ici la grandeur utile, pas un détail qu'on néglige.

Exercices d'application

Exercice 1
Démontrez que le nombre de nœuds à la profondeur i vaut au moins 2t^(i−1) pour i ≥ 1, par récurrence.
Voir le corrigeMasquer le corrige

Initialisation (i = 1). La racine a au moins 1 clé, donc au moins 2 fils. Il y a donc au moins 2 nœuds à la profondeur 1. Or 2t0 = 2 × 1 = 2. ✔

Hérédité. Supposons qu'il y ait au moins 2ti−1 nœuds à la profondeur i, pour un i ≥ 1 donné.

Chacun de ces nœuds n'est pas la racine (puisque i ≥ 1). Il porte donc au moins t − 1 clés, et possède par conséquent au moins (t − 1) + 1 = t fils.

Le nombre de nœuds à la profondeur i + 1 est donc au moins :

2 t^(i-1) x t = 2 t^i = 2 t^((i+1)-1)

ce qui est bien la propriété au rang i + 1. ✔

La propriété est donc vraie pour tout i ≥ 1. Noter que l'hérédité utilise le fait que les nœuds considérés ne sont pas la racine : c'est là que l'exception sur la racine est soigneusement contournée.

Exercice 2
Un B-arbre de degré minimal t = 50 a une hauteur de 3. Entre quelles valeurs est compris son nombre de clés ?
Voir le corrigeMasquer le corrige

Minimum. Tous les nœuds au minimum donne, d'après la démonstration, n ≥ 2th − 1 :

n >= 2 x 50^3 - 1 = 2 x 125 000 - 1 = 249 999

Maximum. Tous les nœuds pleins : chaque nœud porte 2t − 1 = 99 clés et a 2t = 100 fils. L'arbre complet de hauteur 3 compte 1 + 100 + 100² + 100³ nœuds :

nb_noeuds = 1 + 100 + 10 000 + 1 000 000 = 1 010 101
n_max     = 99 x 1 010 101 = 99 999 999

soit exactement 1004 − 1.

249 999 ≤ n ≤ 99 999 999

L'écart est d'un facteur 400 : à hauteur égale, un B-arbre peut contenir des quantités de clés très différentes selon son remplissage. C'est pour cela que la borne du théorème est si prudente.

Exercice 3
À partir de quel nombre de clés un B-arbre de degré t = 128 a-t-il besoin d'un quatrième niveau ?
Voir le corrigeMasquer le corrige

Un arbre de hauteur 3 contient au maximum, tous nœuds pleins :

degre maximal = 2t = 256 fils
nb_noeuds = 1 + 256 + 256^2 + 256^3 = 16 843 009
n_max     = 255 x 16 843 009 = 4 294 967 295

soit 2564 − 1, c'est-à-dire 2³² − 1, environ 4,3 milliards de clés.

Il faut donc dépasser 4,3 milliards de clés pour qu'un quatrième niveau devienne inévitable, et encore, seulement si l'arbre est parfaitement rempli. Avec un remplissage réaliste de 70 %, le quatrième niveau apparaît plutôt vers le milliard.

Dans les deux cas, la conclusion pratique est la même : trois à quatre accès disque suffisent à indexer la quasi-totalité des bases de données existantes.

Cherchez avant d'ouvrir le corrige : c'est en butant sur les difficultes que l'on progresse.

Questions / Réponses

Aucune question. Soyez le premier à poser une question.
★ ★ ★ ★ ★
2 votes. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam