我正在实现一个Crawler,我想为我的系统抓取的每个URL生成一个唯一的哈希码。这将帮助我检查重复的URL,匹配完整的URL可能是一个昂贵的东西。 Crawler每天会抓取数百万个页面。因此,此哈希函数的输出应该是唯一的。
答案 0 :(得分:1)
除非你提前了解每个地址,并且恰好有一套完美的哈希值,否则这个任务在理论上是不可能的。
根据鸽子原则,无论您使用何种技术进行转换,都必须存在至少两个具有相同Integer
值的字符串,因为Integers
具有有限范围,而字符串不具有。虽然地址实际上并不是无限长,但您仍然会获得映射到相同哈希值的多个地址。理论上,有无限多的字符串会映射到相同的Integer
值。
因此,总之,您应该只使用标准HashMap
。
此外,您需要担心以下事项:
www.stackoverflow.com
http://www.stackoverflow.com
http://stackoverflow.com
stackoverflow.com
...
都是等价的,所以你需要首先规范化,然后哈希。虽然有一些算法首先给出这个集合会生成一个完美的哈希,但我怀疑这对你的目的是必要的。
答案 1 :(得分:0)
我认为解决方法是删除第一部分,例如http://
或http://www.
,然后在清除之后删除最后一部分,例如/
或?...
或#...
应该有一个干净的URL,然后你可以为它做一个MD5哈希。