早上好, 我需要在哈希表中为Java编程项目编写使用二次残差的代码。但是,我无法在线找到任何有关使用二次残差搜索/插入哈希表的信息。在课堂上,我们被告知它是H(k),其中H(k)是哈希函数,然后是H(k)-i ^ 2然后是H(k)+ i ^ 2,1 <= i <=( m-1)/ 2,其中m是4x + 3形式的质数。我尝试使用给出的示例编写程序,使用提供的示例输出文件跟踪表中的冲突。提供的文件只有72,761个冲突,而我的输出文件有226,671个,所以我知道我做错了什么。我们需要编写三种方法,插入,搜索和删除。我们正在存储具有ISBN,标题,作者,出版年份和出版商字段的图书。这是QRS文件中给出的代码:
enum Status {EMPTY, OCCUPIED, DELETED};
public class QuadraticResidueSearch<E> {
private E[] dataTable;
private Status[] statusTable;
final private int TABLESIZE = 300151;
@SuppressWarnings("unchecked")
public QuadraticResidueSearch() {
dataTable = (E[]) new Object[TABLESIZE];
statusTable = new Status[TABLESIZE];
for (int i = 0; i < TABLESIZE; i++)
statusTable[i] = Status.EMPTY;
}
private int myMod(int index) {
while (index < 0)
index += TABLESIZE;
return index % TABLESIZE;
}
public int insert(E item) {
}
public E search(E item, IntObject count){
}
public E delete(E item, IntObject count){
}
如果有人能向我解释我如何能够对这个项目使用二次残差搜索,我将不胜感激。因为这里提供的哈希函数可能很有用:
public int hashCode() {
int size = 300151;
int[] primes = {5003, 5009, 5011, 5021, 5023, 104499, 100103, 100333, 100189, 100343};
// int[] primes = {104933, 100613, 102019, 103813, 103967, 104499, 100103, 100333, 100189, 100343};
int result = 0;;
for (int i = 0; i < isbn.length(); i++){
result += primes[i] * isbn.charAt(i);
}
return result % size;
}
请先谢谢您。