Hash Tables
Problems
Problem : Give the best, average, and worst case efficiencies of both the brute-force string search and Rabin-Karp string search.
Problem : Using the hash() and hash_update() functions given in this section, give an example of a pattern string and text string that will reduce Rabin-Karp back to brute-force search, decreasing its efficiency back to O(MN) .
Problem : Challenge problem: Create a hash_update() function to go along with this hash() function:
long hash_str(hash_table_t *hashtable, int hash_len, char *start)
{
long hval;
int i;
/* If the string passed in is NULL, return 0 */
if (start == NULL) return 0;
/* Multiply the old hash value by 257 and add the current character
* for as long as the string
*/
hval = 0L;
for(i=0; i < hash_len; i++) {
hval = ((257 * hval) + start[i]) % hashtable->size;
}
/* Return the hash value */
return hval;
}
Use the function prototype:
long hash_update( long hval, /* old hash value */ char start, /* character to be removed */ char end, /* character to be added */ int hash_len, /* length of the string */ hash_table_t *hashtable ); /* the hash table */
Problem : Give a hash function and a hash update function that will always reduce Rabin-Karp to O(MN) efficiency.





