Qu'est-ce que la technique de pliage dans le hachage et comment l'implémenter?

Yogesh Umesh Vaity

J'ai entendu lors d'un séminaire sur les structures de données que nous pouvons diviser une clé en groupes de chiffres, puis ajouter des groupes. Cela garantit que tous les chiffres contribuent au code de hachage. Le nombre de chiffres dans un groupe correspond à la taille du tableau.

Par exemple, j'ai un numéro de machine disant 424-124-9675, comment créer la fonction de hachage en utilisant la technique de pliage?

Yogesh Umesh Vaity

Suite aux réponses de Tony et Sumeet, j'ai fait quelques recherches supplémentaires sur le pliage des chiffres et j'ai décidé de mettre en œuvre la technique expliquée par Robert Lafore dans son livre Data Structures.

Par exemple, supposons que vous souhaitiez hacher des numéros de machine à 10 chiffres. Si la taille du tableau est 1,000, vous diviserez le nombre à 10 chiffres en trois groupes de trois chiffres et un groupe d'un chiffre. Dans notre exemple en question, le numéro de machine est 424-124-9675, donc vous calculeriez une valeur clé de 424 + 124 + 967 + 5 = 1520. Vous pouvez utiliser l' %opérateur pour couper ces sommes afin que l'indice le plus élevé soit 999. Dans ce cas 1520 % 1000 = 520,.

Si la taille du tableau est 100, vous devrez diviser la clé à 10 chiffres en cinq nombres à deux chiffres:, 42 + 41 + 24 + 96 + 75 = 278et 278 % 100 = 78.

Il est plus facile d'imaginer comment cela fonctionne lorsque la taille du tableau est un multiple de 10. Cependant, pour de meilleurs résultats, il doit être un nombre premier.

Voici le code Java de la technique de pliage des chiffres que j'ai implémentée:

public class DigitFolder {
    public static void main(String[] args) {
        int hashVal = hashFunc(424124967);
        System.out.println(hashVal);
    }
    public static int hashFunc(int key) {
        int arraySize = 1021;
        int keyDigitCount = getDigitCount(key);
        int groupSize = getDigitCount(arraySize);
        int groupSum = 0;
        String keyString = Integer.toString(key);
        int i;
        for (i = 0; i < keyString.length(); i += groupSize) {
            if (i + groupSize <= keyString.length()) {
                String group = keyString.substring(i, i + groupSize);
                groupSum += Integer.parseInt(group);
            }
        }
        // There is no remaining part if count is divisible by groupsize.
        if (keyDigitCount % groupSize != 0) {
            String remainingPart = 
                   keyString.substring(i - groupSize, keyString.length());
            groupSum += Integer.parseInt(remainingPart);
        }
        return groupSum % arraySize;
    }
    public static int getDigitCount(int n) {
        int numDigits = 1;
        while (n > 9) {
            n /= 10;
            numDigits++;
        }
        return numDigits;
    }
}

J'ai trouvé la méthode de création de groupe ici . Mais cela fait des groupes de droite à gauche. Donc, j'ai utilisé une String#subString()méthode pour créer des groupes de gauche à droite.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Qu'est-ce que la classe dans feathersjs et comment l'implémenter

Qu'est-ce que @override en Java, comment l'implémenter dans le programme

Qu'est-ce que le mode kiosque et comment l'implémenter pour l'application Xamarim.Forms?

Qu'est-ce que l'URL de rappel dans l'API Instagram et comment puis-je l'implémenter

Qu'est-ce qu'un «objet de style rect» et comment l'implémenter dans mon code?

Qu'est-ce que le dépliage dans Rust et à quoi sert-il?

Comment implémenter le pliage de code basé sur l'indentation dans QScintilla?

Qu'est-ce que le clustering principal et secondaire dans le hachage?

Qu'est-ce que l'entropie du domaine fréquentiel dans le résultat FFT et comment la calculer?

Qu'est-ce que le sous-échantillonnage et le suréchantillonnage dans la résolution de l'iPhone?

Qu'est-ce qu'une table de hachage et comment la créer en C?

qu'est-ce que le Quaternion et comment utiliser un lerp Quaternion dans l'unité ?

Qu'est-ce que la fonctionnalité «Ressources de développement» introduite dans Xcode 11 et comment l'utiliser?

Qu'est-ce que le code de hachage doit faire dans cet exemple Flutter Redux

Comment implémenter le hachage (dans :) de hashValue dans Swift?

Qu'est-ce que le partitionnement et les dimensions de l'espace dans TimesclaleDB

Qu'est-ce que la «fonction de hachage interne» pour les UUID dans DynamoDB?

Qu'est-ce que la directive de préprocesseur netfx et comment l'activer?

Qu'est-ce que l'Erreur de cession illégale et comment la corriger ?

Qu'est-ce que 'azureRmConnection.Id' dans ce modèle yaml de génération Azure Pipelines et comment l'utiliser?

Qu'est-ce que l'équivalent de group by et collect as list dans la recherche élastique?

Comment ce composant est appelé et comment l'implémenter

Qu'est-ce que la référence de transfert dans réagir et comment nous l'utilisons et pourquoi nous l'utilisons.?

Qu'est-ce que le fichier .xproj et comment ouvrir ce type de projet dans Visual Studio 2012?

Qu'est-ce que le "m" dans l'horodatage et comment obtenir l'horodatage sans "m"?

Qu'est-ce que ./nqt dans la programmation C et comment changer de fichier sans les changer dans le code

Qu'est-ce que le type et qu'est-ce que le constructeur de type dans scala

Qu'est-ce que l'anti-modèle de construction de promesse explicite et comment l'éviter?

Qu'est-ce que l'injection de dépendance et l'inversion de contrôle dans Spring Framework?

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    comment obtenir un objet de requête dans les tests unitaires de django?

  3. 3

    mongo kafka connect source

  4. 4

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  5. 5

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  6. 6

    Comment ajouter un texte dans un texte Python/Tkinter

  7. 7

    Aide de variable de débogage pprint jinja2

  8. 8

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  9. 9

    Impression de la longueur du chemin le plus court dans le labyrinthe

  10. 10

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  11. 11

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  12. 12

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  13. 13

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  14. 14

    définir une propriété pour chaque nœud dans neo4j

  15. 15

    Pourquoi cette requête Java échoue-t-elle? renvoyer 0 quand il y a des résultats

  16. 16

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  17. 17

    Laravel 8: Attempt to read property "id" on null

  18. 18

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  19. 19

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  20. 20

    Microsoft.WebApplication.targets

  21. 21

    obtenir le nombre de marqueur affiché sur la carte

chaudétiquette

Archive