嵌套哈希VS哈希

时间:2015-12-04 11:39:26

标签: python data-structures hash hashtable

我正在构建一个webcrawler,我希望尽量减少查找已访问过的网站所花费的时间,并更新已访问过的网站列表。 我想知道哪种数据结构最适合这样的列表。

  1. 散列哈希:给定一个网站哈希将域转换为第一个哈希表,然后在二级哈希表中哈希最后一部分网址(当然有二次哈希表)哈希表作为在第一个哈希表中映射的域,即每个域都有自己的哈希表。)

    pro :第一个表和嵌套的

    中最快的查找时间

    con :难以实施?

  2. 哈希:简单哈希表对于每个网址,请在表格中映射网址。

    pro :更简单的方法和实现

    con :查看值的时间较慢(您必须在整个表中查找)

  3. 提前致谢!

1 个答案:

答案 0 :(得分:0)

通常一个哈希表应该更可取,因为查找时间在一般情况下是常量,使得一次查找优于两次查找。 Python哈希表也专门针对字符串进行了优化(参见here)。

如果您仍想实现哈希"哈希"解决方案,只需使用集合的字典。 dict键是域,值是一组subdomain-urls。

seen_pages = dict()

# Adding a page
seen_pages.setdefault(domain, set()).add(subdomain)

# Check whether page was seen before
is_known = False
seen_subdomains = seen_pages.get(domain)
if seen_subdomains is not None:
    is_known = subdomain in seen_subdomains

如果您真的很好奇,在您的特定情况下,表的大小实际上会减慢速度,只需实现两个版本。代码的差异应该是最小的。为了进行适当的测试,请预编译网址列表,并使用timeit评估这两个实现。

无论哪种方式,我怀疑哈希表查找时间将是你最紧迫的瓶颈。可能最好将优化时间花在代码的其他方面。