【发布时间】:2016-06-23 17:19:37
【问题描述】:
我正在构建一个网络爬虫,它必须爬取数百个网站。我的爬虫保留了已爬取的网址列表。每当爬虫要爬取新页面时,它首先搜索已爬取的 url 列表,如果已经列出,则爬虫跳到下一个 url,依此类推。一旦 url 被抓取,它就会被添加到列表中。
目前,我正在使用二进制搜索来搜索 url 列表,但问题是一旦列表变大,搜索变得非常缓慢。所以,我的问题是,我可以使用什么算法来搜索 url 列表(列表的大小每天增长到大约 20k 到 100k)。
Crawler 目前是用 Python 编码的。但我打算将它移植到 C++ 或其他更好的语言上。
【问题讨论】:
-
为什么要标记java?另外,也许阅读一下 Trie。
-
鉴于您的列表已经排序,因为您使用的是二进制搜索,我认为您没有比二进制搜索更好的解决方案。您是否尝试过为程序的计算密集型部分计时。我的猜测是瓶颈可能不是搜索算法,而是排序算法?
-
你总是可以尝试使用字典——字典查找非常有效,因为它们是散列而不是检查字符串匹配(这真的很糟糕,因为 URL 通常会以几个相同的开头)。哈希搜索会更快,因为无论如何字符串比较都很慢。
-
如果你有足够的内存,你可以散列url然后腌制它
-
@StefanPochmann 太傻了,这就是我问堆栈溢出问题的原因
标签: python c++ algorithm search