1
5
一般来说,我认为任何完整的字符串哈希都必须使用字符串中的每个字符,因此对于n个字符,需要增长为o(n)。不过,我认为对于实际的字符串散列,可以使用近似散列,它很容易是O(1)。 考虑一个总是使用最小(n,20)字符来计算标准哈希的字符串哈希。显然,随着字符串大小的增加,这个值会增加为O(1)。它能可靠地工作吗?这取决于你的领域… |
2
7
哈希函数不必(也不能)为每个字符串返回唯一的值。 可以使用前10个字符初始化随机数生成器,然后使用该生成器从字符串中提取100个随机字符,并对其进行哈希处理。这将是一个恒定的时间。 也可以返回常量值1。严格地说,这仍然是一个哈希函数,尽管不是一个非常有用的函数。 |
3
3
如果不冒着哈希冲突的严重风险,就无法轻松地为字符串实现一般的常量时间哈希算法。 如果时间不变,则无法访问字符串中的每个字符。作为一个简单的例子,假设我们采用前6个字符。然后有人来尝试散列一个URL数组。has函数将看到每个字符串的“http://”。 其他字符选择方案也可能出现类似的情况。您可以根据前一个字符的值随机选取伪字符,但如果由于某种原因字符串具有“错误”模式,并且许多字符串以相同的哈希值结尾,则仍然存在失败的风险。 |
4
1
你可以 希望 如果使用 ropes 而不是字符串和共享,允许您跳过一些计算。但显然,哈希函数不能分离它没有读取的输入,所以我不会太认真地对待“所有东西都可以在恒定时间内进行哈希处理”。 哈希函数的质量和计算量之间的折衷是可能的,而且长字符串上的哈希函数无论如何都必须发生冲突。 你 如果散列函数只查看前缀,则必须确定算法中可能出现的字符串是否会经常发生冲突。 |
5
1
虽然我无法想象无限长字符串的固定时间哈希函数,但实际上并不需要它。 使用散列函数的思想是生成散列值的分布,使其 许多弦不太可能发生碰撞 -考虑中的领域。此密钥将允许直接访问数据存储。这两个结合的结果是 持续时间查找-平均 . 如果发生这样的冲突,查找算法将回到更灵活的查找子策略上。 |
6
1
当然,这是可行的,只要在将所有字符串传递给需要散列的对象之前确保它们都是“实习生”。interning是将字符串插入到字符串表中的过程,这样具有相同值的所有interned字符串实际上都是相同的对象。然后,您可以简单地将(固定长度)指针散列到实习生字符串,而不是散列字符串本身。 |
7
1
你可能对我去年得出的以下数学结果感兴趣。 考虑将无穷多的键(如任意长度的所有字符串)散列到1,2,__中的数字集的问题。随机散列首先随机选取H函数族中的散列函数H。 我将向您展示,在所有的h函数上,总是有无穷多的键会发生碰撞,也就是说,对于所有的哈希函数,它们总是有相同的哈希值。 选取任意散列函数h:至少有一个散列值y,使得集合a=s:h(s)=y是无限的,也就是说,有无限多个字符串发生碰撞。选择任何其他散列函数h_152;,散列集合A中的键。至少有一个散列值y_152;,这样,集合A__s位于:h_(s)=y__是无限的,也就是说,两个散列函数上有无穷多的字符串碰撞。你可以多次重复这个论点。重复h次。然后有一组无限多的字符串,其中所有字符串在所有H哈希函数上发生冲突。CQFD。 进一步阅读 : 可变长度字符串的合理散列是不可能的 http://lemire.me/blog/archives/2009/10/02/sensible-hashing-of-variable-length-strings-is-impossible/ |
mrid · JavaScript关联数组行为异常 7 年前 |
Podarce · 使用array_键访问嵌套关联数组(PHP) 7 年前 |
logo3801 · 将等于的数组转换为关联数组 7 年前 |
RhymeGuy · PHP-数字值作为关联数组中的键 7 年前 |
Matthieu Raynaud de Fitte · 晶体关联阵列 7 年前 |
hello world · 如何将FPDF总计添加到表格的最后一行? 7 年前 |
kumarmo2 · 无法理解如何在java中定义列表列表[重复] 7 年前 |
user5299698 · 创建动态关联数组时出现问题 7 年前 |
Constantine · 如何更改循环中的assoc数组值 7 年前 |