- perform experiments on our chainhashmap and probehashmap classes to measure its efficiency using random key sets and varying limits on the load factor (see exercise - - our implementation of separate chaining in chainhashmap conserves memory by representing empty buckets in the table as nonerather than as empty instances of secondary structure because many of these buckets will hold single itema better optimization is to have those slots of the table directly reference the item instanceand to reserve use of secondary containers for buckets that have two or more items modify our implementation to provide this additional optimization - computing hash code can be expensiveespecially for lengthy keys in our hash table implementationswe compute the hash code when first inserting an itemand recompute each item' hash code each time we resize our table python' dict class makes an interesting trade-off the hash code is computed oncewhen an item is insertedand the hash code is stored as an extra field of the item compositeso that it need not be recomputed reimplement our hashtablebase class to use such an approach - describe how to perform removal from hash table that uses linear probing to resolve collisions where we do not use special marker to represent deleted elements that iswe must rearrange the contents so that it appears that the removed entry was never inserted in the first place - the quadratic probing strategy has clustering problem related to the way it looks for open slots namelywhen collision occurs at bucket ( )it checks buckets [( (ki mod ]for show that mod will assume at most ( )/ distinct valuesfor primeas ranges from to as part of this justificationnote that mod ( ) mod for all better strategy is to choose prime such that mod and then to check the buckets [( ( + mod nas ranges from to ( )/ alternating between plus and minus show that this alternate version is guaranteed to check every bucket in - refactor our probehashmap design so that the sequence of secondary probes for collision resolution can be more easily customized demonstrate your new framework by providing separate concrete subclasses for linear probing and quadratic probing - design variation of binary search for performing the multimap operation find all(kimplemented with sorted search table that includes duplicatesand show that it runs in time ( log )where is the number of elements in the dictionary and is the number of items with given key