Edit :
version 1.0 BETA 2
Voici une teste avec + de 450.000 records
Temps de chargement chez moi (fichier csv) +- 25 secondes avec le déboguer activé et 1.21 secondes sans le déboguer.
Donc pour de meilleurs performances désactiver le déboguer.
Temps de recherche chez moi sous la ms
Lien github
J'ai ajouté un fichier pour comparer avec une list LK_compare.pb
Résultat
au chargement 0.86 s
recherche au pire 66 ms
Voici un petit module (version Beta) pour la gestion d'un arbre AVL (ordonné).
L'avantage d'un arbre par rapport à une liste chaînée réside dans la puissante de la recherche.
Un exemple :
pour 6.000.000.000 d'enregistrements avec une liste et donc un parcours séquentielle dans le pire des cas vous devrez faire 6.000.000.000 d'itérations (comparaisons).
avec un arbre équilibré et donc un parcours dichotomique dans le pire des cas vous devrez faire 33 itérations (comparaisons) 2^33 = +- 8x10^9.
évidement il y a un coût, l'ajout sera plus long que pour une liste.
Remarque : actuellement ne fonctionne qu'avec des clés uniques
Ce module est de type générique :
Vous devez créer une structure et l'allouer dynamiquement (équivalent d'un malloc en c)
Code : Tout sélectionner
Structure people
id.l
name.s
EndStructure
Define *p.people
*p = AllocateStructure(people)
Code : Tout sélectionner
Procedure compare(*a.people,*b.people)
If *a\id > *b\id :ProcedureReturn 1 :EndIf
If *a\id < *b\id :ProcedureReturn -1 :EndIf
ProcedureReturn 0
EndProcedure
Global myTree.AVL_TREE::tree = AVL_TREE::new_tree(@compare())
Code du main (exemple)
Code du Prototype du module
Code du module