IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Hachage sans collision sur un ensemble limité et constant de chaîne de caractères.


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Par défaut Hachage sans collision sur un ensemble limité et constant de chaîne de caractères.
    Bonjour,


    Je cherche à résoudre le problème suivant, il peut paraître surprenant mais je ne peux le contourner d'aucune manière.

    Je dispose de n fichiers, n<2048 dont le nom est limité à 12 caractères quelconques.

    Je cherche à générer pour chacun de ces fichiers un identifiant unique, entier numérique, contenu sur 16 bits.

    En fait le problème revient à déterminer pour l'ensemble des n nom de fichier, une fonction de hachage me donnant un identifiant unique et différent pour chaque nom de fichier.

    f(fichier_1) = n1, f(fichier_2) = n2 ..., f(fichier_nb_fichiers) = n_nb_fichiers...

    avec pour tout i, j, i différent de j, f(fichier_i) != f(fichier_j)

    Intuitivement je dirais que c'est possible. Avez-vous une approche à me suggérer car je seche sur ce problème et mes recherches n'ont pas aboutie.

    Je pourais y aller en force brute et tester des hachages paramétrés jusqu'à ne plus avoir de collision mais ça n'est guère esthétique...

    Cordialement,

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    On appelle cela une fonction de hash parfaite (http://en.wikipedia.org/wiki/Perfect_hashing), c'est à dire sans collisions.

    Sur la page de wikipedia, tu as une liste de logiciels qui génèrent des fonctions de hash parfaites pour un ensemble donné.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Un bête et méchant CRC16 du nom ne pourrait-il pas résoudre ton problème ?

    Après, tu auras forcément des collisions : même en se limitant à 26 lettres (et donc sans les chiffres), ton espace de noms est de cardinalité 26^12, soit 95.428.956.661.682.176 noms possibles... Tu as donc forcément une surjection stricte entre tes noms et ton identifiant 16 bits !!!

    Certes, on peut associer sans problèmes chaque nom de fichier à un identifiant unique, de par l'hypothèse n<2048 que tu poses. D'un point de vue strict, j'aurais tendance à lister les fichiers et à leur coller un numéro incrémental à chacun, chaque numéro correspondant à l'entrée d'un vecteur de noms, ce qui permet d'avoir une LUT immédiate entre ce numéro "haché" et le nom du fichier. Dans l'autre sens, c'est plus complexe, mais un bon petit vecteur trié et une recherche dichotomique devrait te permettre de limiter la casse.

    Bien sûr, si ta liste de fichiers est figée, c'est plutôt facile de trouver une fonction de hachage qui corresponde. Si la liste évolue dans le temps, c'est mal barré.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/11/2014, 14h23
  2. Find & replace sur un ensemble de fichiers
    Par totofweb dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 23/12/2005, 15h29
  3. forcer date sans texte sur excel
    Par scully2501 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/09/2005, 14h45
  4. Réponses: 7
    Dernier message: 23/07/2005, 13h50
  5. [VB6] Déplacer la form sans cliquer sur la barre de titre
    Par Ingham dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/11/2002, 03h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo