FICHIER DUPLIQUÉ AVEC UNE TABLE DE HACHAGE

Signaler
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
-
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52968-fichier-duplique-avec-une-table-de-hachage

Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Salut,
deux remarques additionnelles:
- pense à nommer tes compos pour que ça soit plus explicite
- il faudra songer à utiliser une fonction de hachage plus efficace dans la procédure clef. En effet, même sans faire exprès, deux fichiers quelconques ont une assez bonne probabilité d'obtenir la même clef. En fait, mathématiquement, et en supposant une fonction idéale, si tu calcules la clef de 65536 fichiers distincts, la probabilité qu'une clef survienne deux fois est de 50% (1/2 - paradoxe des anniversaires). Et ta fonction n'est pas idéale (il n'en existe aucune dans le cas général en fait), ce qui augmente encore plus la probabilité d'un doublon. Tu peux t'inspirer de quelques fonctions simples et rapides qu'on peut trouver sur internet (du type hachage universel, etc..), et une bonne idée serait d'utiliser un Int64 à la place d'un Cardinal. Ca devrait être bon à ce point. Evite bien sûr les fonctions de hachage cryptographiques car elles sont trop lentes (et pas besoin de sécurité ici mais plutôt de vitesse).

Sinon c'est pas mal.

Cordialement, Bacterius !
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonsoir

Une petite remarque en passant :
Dans UTable tu déclares un type "table = array[0..N] of Liste" hors ta fonction "hachage" renvoie forcément un nombre supérieur à 0 du fait du +1 "result := clef(c) mod N + 1"; donc tu n'utiliseras jamais la cellule indexée par 0.

N.B. Il n'est pas nécessaire de laisser dans ton zip les fichiers inutiles (comme les .dcu).

Cordialement.