Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε την αρχή της μεθόδου διπλού κατακερματισμού για την επίλυση συγκρούσεων στους πίνακες κατακερματισμού;

sobes.tech AI

Απάντηση από AI

Η μέθοδος διπλού κατακερματισμού είναι ένας τρόπος επίλυσης συγκρούσεων στους πίνακες κατακερματισμού, όπου όταν συμβαίνει μια σύγκρουση, υπολογίζεται ένα δεύτερο hash και ο επόμενος δείκτης για την αναζήτηση του στοιχείου καθορίζεται με αυτό το δεύτερο hash.

Ιδέα:

  • Υπάρχουν δύο συναρτήσεις hash: h1(key) και h2(key).

  • Κατά την εισαγωγή ή την αναζήτηση ενός στοιχείου, υπολογίζουμε πρώτα το h1(key) — τον αρχικό δείκτη.

  • Αν η θέση είναι κατειλημμένη (σύγκρουση), ο επόμενος δείκτης υπολογίζεται με τον τύπο:

    δείκτης = (h1(key) + i * h2(key)) mod μέγεθος_πίνακα, όπου i είναι ο αριθμός των προσπαθειών (0,1,2,...)

Αυτό επιτρέπει την αποφυγή συγκρούσεων, μετακινούμενοι στον πίνακα με ένα βήμα που εξαρτάται από το κλειδί, μειώνοντας τη συσσώρευση σε σύγκριση με την γραμμική αναζήτηση.

Παράδειγμα σε Go:

func doubleHashing(key int, i int, tableSize int) int {
    h1 := key % tableSize
    h2 := 1 + (key % (tableSize - 1))
    return (h1 + i*h2) % tableSize
}

Εδώ, το h2 δεν είναι ποτέ μηδέν και διασφαλίζει ότι θα διασχίσουμε ολόκληρο τον πίνακα αν χρειαστεί.