c chaîne de comparer vs hachage comparer
J'ai besoin de comparer une chaîne de plusieurs autres chaînes constantes en c. Je suis curieux de savoir qui est plus rapide, pour hacher la chaîne, je vais les comparer et de les comparer à tous les autres de la constante de chaîne de hachages ou il suffit de comparer les chaînes de caractères comme des chaînes de caractères. je vous remercie à l'avance
merci pour les réponses je vais faire de nombreuses comparaisons. quelqu'un peut-il me donner un bon, rapide, de faible à forte intensité de ressources de l'algorithme à utiliser? La seule hachage je sais de est MD5 et j'ai un sentiment qui est plus de tuer.
Je tiens aussi à ajouter que les chaînes sont peut-être 20 ou 30 caractères au max avec la plupart étant d'environ 7.
OriginalL'auteur romejoe | 2010-08-08
Vous devez vous connecter pour publier un commentaire.
Est la comparaison va être fait une fois ou plusieurs fois? Si la comparaison va être fait en une seule fois, alors vous êtes probablement mieux de faire une comparaison directe. Si vous allez avoir besoin de comparer les très nombreuses chaînes à cet ensemble de chaînes constantes, alors vous pouvez probablement économiser du temps dans le long terme, en le faisant avec les tables de hachage.
C'est un simple problème assez que vous pouvez facilement écrire des deux manières et voir ce qui fonctionne le mieux pour un ensemble représentatif de l'entrée.
OriginalL'auteur Tyler McHenry
Si vous essayez de faire correspondre un objet chaîne de caractères en fonction d'un ensemble de cordes, vous pourriez envisager d'utiliser la Aho-Corasick Chaîne De Caractères Correspondant À L'Algorithme. Il utilise un trie pour correspondre à l'objet à l'encontre de toutes les chaînes en une seule passe (c'est aussi très simple à mettre en œuvre).
OriginalL'auteur James McNellis
Il est difficile de prendre de l'avance, la chaîne de fonctions de hachage sont des O(n). Comparaison de chaînes de caractères est O(n) ainsi, avec une petite Oh. Vous ne serait d'avance si vous pouvez stocker les valeurs de hachage permet de calculer et de les utiliser à plusieurs reprises. Pour tous les deux.
Simple échantillon C fonctions de hachage sont ici.
OriginalL'auteur Hans Passant
L'égalité d'une valeur de hachage ne garantit pas l'égalité - un décalage sera de garantir l'inégalité. Si vous avez besoin de comparer un grand nombre de chaînes à l'encontre de votre collection de l'un de hachage serait formidable si c'est un one-off de la comparaison (peu probable je pense) puis strcmp fera très bien l'affaire.
OriginalL'auteur Will A
Je pense que si vous avez une liste statique de chaînes, je voudrais stocker dans un tableau trié, puis utiliser
bsearch
pour déterminer si une chaîne est dans la liste. Cette méthode retourne NULL si il n'existe pas, ou un pointeur vers la valeur doit exister, et est probablement plus rapide qu'un linéaire de recherche ou de hachage.OriginalL'auteur Brandon Horsley
Il dépend. Quel est l'algorithme de hachage? Combien de temps sont les chaînes de caractères? Quelle est la plate-forme?
Noter aussi que l'appariement de hachage n'est pas une garantie de correspondance de chaînes.
OriginalL'auteur Oliver Charlesworth
Si vos chaînes constantes sont connus au moment de la compilation, prendre un coup d'oeil à l'idée d'un "idéal de hachage".
Wikipedia: Une fonction de hachage parfait pour un ensemble S est une fonction de hachage qui mappe des éléments distincts dans S distincts entiers, sans collision.
Que "sans collision" chose vous permet d'économiser du travail. Des possibilités de lecture et les mises en œuvre sont:
OriginalL'auteur Darron
Cela dépend fortement de la longueur des chaînes et de la complexité de votre fonction de hachage. Mettre en œuvre et mesurer vous-même serait la meilleure réponse...
OriginalL'auteur Wim
Une autre approche qui permettrait de travail, est à votre chaîne constante triés et faire une recherche dichotomique de votre chaîne, de cette façon, vous n'avez à la plupart des
log2(n)
comparaisons (par exemple, seulement 10 des comparaisons pour du 1024 chaînes ou même seulement 20 pour 1000000 de chaînes de caractères).Je ne sais pas si c'est applicable à votre problème, mais j'ai eu de très bons résultats avec cette approche. Le hachage est vraiment difficile d'obtenir le droit, le coin des cas, peuvent devenir vraiment vicieux et le calcul de la clé peut souvent être très coûteux.
OriginalL'auteur Patrick Schlüter
Murmure de hachage est simple, rapide et se comporte bien sur les tests statistiques.
OriginalL'auteur Andras Vass