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.


Take a Study Break

Green YOUR SCHOOL!

Click here to get involved with dosomething.org!

John Krasinski's BIG MIRACLE

Click to watch the trailer and read exclusive star interviews!

Do you like Anna?

Read Dear Albert... from ANNA's perspective!

BATTLESHIP, the movie

Here's why we're super jazzed about it.

Do energy juices actually work?

Our blogger puts 'em to the test!


The Book

Cover image

Read What You Love, Anywhere You Like

Get Our FREE NOOK Reading Apps