Page d'accueil Description du projet

Tableaux de taille variable

Accès rapide

Commentaires

  1. Objectifs
  2. Pendant longtemps, lorsque j'ai eu à manipuler des structures de données linéaires sans connaître leur taille, j'ai utilisé des listes. Et puis j'ai découvert la notion de "Expanding Table".

  3. Principe
  4. Une "Expanding Table" est un tableau dont la taille augmente en fonction des besoins. Cependant, si à chaque fois qu'on ajoute un élément, on réalloue la mémoire nécessaire au tableau, alors il faut recopier tous les éléments à chaque fois et la structure devient inefficace au possible.

    Pour éviter cela, on utilise une règle simple : dès qu'on ajoute un élément au-delà de la taille courante du tableau, on commence par doubler la taille de ce dernier. Pour que les suppressions soient aussi efficaces, on attend que seulement un quart du tableau soit occupé pour diviser le nombre d'emplacements disponibles par 2.

    De cette façon, on peut montrer que le coût amorti d'une insertion ou d'une suppression est en O(1)

  5. Remarque sur l'implémentation

Démonstration

Voici le résultat de la commande "make test" sur ma machine :

Insertion de 24 nbs aléatoires
[|0 ; 118 ; 895 ; 186 ; 366 ; 996 ; 689 ; 21 ; 612 ; 346 ; 873 ; 521 ; 121 ; 729 ; 485 ; 704 ; 822 ; 231 ; 462 ; 553 ; 588 ; 674 ; 324 ; 969 ;|]
Après Tri :
[|0 ; 21 ; 118 ; 121 ; 186 ; 231 ; 324 ; 346 ; 366 ; 462 ; 485 ; 521 ; 553 ; 588 ; 612 ; 674 ; 689 ; 704 ; 729 ; 822 ; 873 ; 895 ; 969 ; 996 ;|]
Suppression d'un élément sur 2.
        La suppression ne conserve pas l'ordre
        Les objects ne sont pas détruits lors de la suppression, 
        seulement supprimés du tableau
[|0 ; 553 ; 118 ; 729 ; 186 ; 612 ; 324 ; 969 ; 366 ; 689 ; 485 ; 873 ;|]
Destruction de tous les éléments
[|]
Terminé

Sources

  1. TAR.GZ archive
  2. Comme toutes les sources sur mes pages web, l'archive fournie ici est sensée fonctionner en l'état.
    > tar zxf Vector.tgz
    > cd Vector
    > make
    > make test
    

  3. Fichiers