Home > SparkNotes > Computer Science Study Guides > Hash Tables >

sparknotes

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 : How does Rabin-Karp achieve an efficiency of $O(M + N)$?


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.