Skip to content

Hash Map

Alexandros edited this page Jun 21, 2021 · 6 revisions

Εισαγωγή

Για την αποθήκευση των λέξεων στο hashTable, χρησιμοποιείται struct “HashNode”, το οποίο έχει τα εξής πεδία:

  • string word: η λέξη που εισάγεται στο hashTable από το αρχείο
  • int address: η διεύθυνση στο hashTable για τη δοσμένη λέξη
  • int appearances: αριθμός που δείχνει πόσες φορές εμφανίζεται η λέξη στο αρχείο

Για τη δημιουργία του hashTable χρησιμοποιείται η root τύπου hashNode που αναπαριστά το αρχικό στοιχείο του table. Επίσης, υπάρχει καθολική μεταβλητή Nπου αναπαριστά το μέγεθος του table, που είναι το πολύ 100000. Ο κατασκευαστής δημιουργεί τον καινούριο πίνακα δεικτών N θέσεων και θέτει σε κάθε έναν από αυτούς nullptr. Ο καταστροφέας διαγράφει έναν έναν όλους τους δείκτες του πίνακα.


Λειτουργίες

Eισαγωγή (insert)

Η insert αρχικά καλεί τη findAddress και καταχωρεί τον αριθμό που επιστρέφει στη μεταβλητή step (int). Η step καθορίζει τη θέση του πίνακα, από την οποία θα αρχίσουμε να ψάχνουμε το πού θα τοποθετηθεί η λέξη. Η while επαναλαμβάνεται μέχρι να βρεθεί μια κενή θέση στον πίνακα για τη λέξη ή η λέξη που δίνεται από το αρχείο στον πίνακα. Αν συμβεί το δεύτερο τότε αυξάνουμε το step κατά μια μονάδα (μετακινούμαστε κατά μία θέση δεξιά του πίνακα). Μετά την επανάληψη, εξετάζουμε τις δύο εξής περιπτώσεις:

  1. Αν έχει βρεθεί κενή θέση στον πίνακα για τη λέξη, την τοποθετούμε.
  2. Αν η λέξη υπήρχε από πριν στον πίνακα τότε αυξάνουμε το appearances κατά ένα.

Aναζήτηση (search)

Η main καλεί τη search, η οποία έχει μια μεταβλητή τύπου hashNode, την *pos. Η pos αρχικοποιείται καλώντας τη privSearch. Αν η privSearch επιστρέψει nullptr, επιστρέφει η συνάρτηση 0, αλλιώς επιστρέφει τον αριθμό των εμφανίσεων της λέξης για την οποία γίνεται αναζήτηση. Η privSearch εκτελεί μια παρόμοια διαδικασία με την insert. Βρίσκει τη διεύθυνση της λέξης και την καταχωρεί στη μεταβλητή step και ψάχνει τη λέξη αυτή στον πίνακα. Αν τη βρει επιστρέφει ολόκληρο το hashNode της λέξης, αλλιώς επιστρέφει nullptr.