我想知道为什么没有谈论多项式散列函数的效率(在时间和空间方面)?我书中常量的推荐值是33,37,39和41,但它们的数字相当大。如果我的字符串是15 a(aaaaaaaa ..)那么计算(41 ^ 15)(97)+(41 ^ 14)(97)+ ...... (97因为它的ASCII值为a)是如此繁重的任务,如果我百万条目那么你可以想象。所以,任何人都可以回答我的两个问题吗?
我是否误解了这个函数的时间和空间复杂性,或者我对它的理解是否正确?
如果我是对的,为什么我们需要使用它?我们能找到其他更有效的替代方案吗?
答案 0 :(得分:1)
它的实现方式如下:
int h=0;
foreach (character c in string)
{
h = (h*41)+c;
}
return h;
正如你所看到的,它没有太大的空间而且非常快。