Problem : Augmenting our current implementation of the hash table, write a delete function to remove a string from the hash table.
Problem : To augment our current implementation, write a function that counts the number of strings stored in the hash table.
Problem : How would we augment our hash table such that it stores information on students? We'd still like to look up a student's name to find them, but we'd then immediately have access to information about them, such as a letter grade, their graduation year, etc.All we'd have to do is modify the linked list structure to include all that information:
Problem : If something happened to your code and you accidentally lost your hash function after having stored a lot of data in the hash table, how could you still search for a specific string? What would the search efficiency now be?Just like in the count function above, you could do a linear search of the hash table until you found what you were looking for. But this is incredibly inefficient when compared to the normal hash lookup efficiency of O(1). Since we're essentially doing a linear search through n strings, the efficiency of this strategy is O(n).
Problem : Linear probing is another method for collision avoidance. With linear probing, if a collision occurs, you sequentially look from the current place in the hashtable for the next open spot, and store the string there. What disadvantage does this method have for an insertion in terms of efficiency?Linear probing insertion could be O(n), while separate chaining is O(1) as you always insert at the beginning of the list.