Week 12 (cont.)#
Lecturer: Pritam Bhattacharya, BITS Pilani, Goa Campus
Date: 5/Nov/2021
Hashing#
Example for the hashing function taken \(h(k) = k\ \%\ 7\)
Finding an array#
find(x) {
    pos = x % 7
    if(T[pos] == x) {
        return True
    }
    else {
        return False
    }
}
Insert to an array#
insert(x) {
    pos = x % 7
    if(T[pos] = EMPTY) {
        T[pos] = x
    }
    else {
        # Handle Collision
    }
}
Open Addressing Hashing#

Finding in open addressing#
find(x) {
    pos = x % 7
    currNode = T[pos]
    while(currNode != NULL) {
        if(currNode -> data == x) {
            return True
        }
        curNode = currNode -> next
    }
    return False
}
Insertion in open addressing#
insert(x) {
    pos = x % 7
    struct Node* newNode
    newNode -> data = x
    newNode -> next = NULL
    if(T[pos] == NULL) {
        T[pos] = newNode
    }
    else {
        currNode = T[pos]
        while(currNode -> next != NULL) {
            currNode = currNode -> next
        }
        currNode -> next = newNode
    }
}
Linear Probing#
When a collision is reached, what we end up doing is if there is a collision, we find the next hash value as so:
\(h(k, 0) = k\ \%\ 7\)
\(h(k, 1) = (h(k) + 1 )\ \%\ 7\)
\(...\)
\(h(k, n) = (h(k) + n )\ \%\ 7\)
Insertion#
insert(k) {
    i = 0
    pos = ((k % 7) + i) % 7
    while(T[pos] != EMPTY) {
        i += 1
        pos = ((k % 7) + i) % 7
        if(pos == k % 7) {
            return "ERROR! HASHTABLE IS FULL"
        }
    }
    T[pos] = k
}
Finding#
insert(k) {
    i = 0
    pos = ((k % 7) + i) % 7
    while(T[pos] != k) {
        i += 1
        pos = ((k % 7) + i) % 7
        if(T[pos] == EMPTY || pos == k % 7) {
            return "NOT FOUND IN HASHTABLE"
        }
    }
    return pos
}