在字典中使用二次残差搜索(Java)

时间:2019-12-04 16:10:41

标签: java

早上好, 我需要在哈希表中为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;
    }

请先谢谢您。

0 个答案:

没有答案