本次作业重点是hascode和compress function,评价一个compress function好坏的标准是能否实现keys在buckets中的随机分布
作业要求Load Factor(=keys/buckets)在0.5-1之间,我记得书上说0.75比较好,然后就直接让buckets的length用size除以0.75:
length=(int)(getPrime(sizeEstimate)/0.75);
几个注意的点:
- 第二个HashTableChained的constructor可以直接利用this关键字生成
- SList and SListNode 可以直接从homework5中import
- Compression Function我用的是h(i) = ((ai + b) mod p) mod N),但是换了几个尝试之后发现每次collisions的相差都不大。
- Insert(), remove(), find()等方法中调用front()头节点是返回的是ListNode,要强制类型转化成SListNode, item要强制转化成Entry才能调用key进行比较
以下为Homework6Test.java
package com.homework6;/* Homework6Test.java */
import com.dict.*;
/**
* Initializes a hash table, then stocks it with random SimpleBoards.
**/
public class Homework6Test {
/**
* Generates a random 8 x 8 SimpleBoard.
**/
private static SimpleBoard randomBoard() {
SimpleBoard bo