我们如何编写具有给定素数的多项式哈希函数

How can we write a polynomial hash function with given prime

那么对于给定的素数 31,我该如何为字符串参数编写哈希函数?

这是我的尝试。

    private int hash(String key){
        int c = 31;
        int hash = 0;
    
        for (int i = 0; i < key.length(); i++ ) {
            int ascii = key.charAt(i);
            hash += c * hash + ascii; 
    }
        return (hash % sizetable);} // sizetable is an integer which is declared outside. You can see it as a table.length().

所以,由于我不能运行工作中的任何其他功能,我需要确定这里的流程,所以我需要您的回答和帮助!非常感谢。

您的实施看起来与 documented 作为标准 String.hashCode() 实施非常相似,它甚至还使用 31 作为质因数,所以应该足够好了。

我只是不会将 31 分配给变量,而是声明一个 private static final 字段或直接将其用作幻数 - 一般情况下不行,但在这种情况下可能没问题。

此外,您应该添加一些测试 - 如果您已经了解单元测试的概念 - 以证明您的方法为不同的字符串提供不同的哈希值。并巧妙地挑选样本,所以它们是不同的(对于家庭作业的情况;)