|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Problems
Problem 4.1:
Give the best, average, and worst case efficiencies of both the brute-force
string search and Rabin-Karp string search.
[Solution]
Problem 4.2:
How does Rabin-Karp achieve an efficiency of O(M + N)?
[Solution]
Problem 4.3:
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).
[Solution]
Problem 4.4:
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 */[Solution] Problem 4.5:
Give a hash function and a hash update function that will always reduce
Rabin-Karp to O(MN) efficiency.
[Solution]
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Contact Us | Privacy Policy | Terms and Conditions | About
©2006 SparkNotes LLC, All Rights Reserved.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||