编辑,请再读一次,因为我添加了我的一些工作
我的任务是比较两个URL的模板。我已经准备好算法。但是,给出最终答案需要花费太多时间。
我使用 Jsoup 和 Selenium 用 Java 编写了代码
在这里, 模板 是指任何页面呈现其内容的方式。
例:-
任何购物网站上都有任何鞋子的页面,其中包含,
Images in the left. Price and Size in the right. Reviews in the bottom.
如果两个URL属于任何特定产品,则返回“两者均来自同一模板”。例如,此链接和此链接具有相同的模板。
如果一个URL显示任何产品,而另一个URL显示任何类别,则显示“没有匹配项”。例如,此链接和此链接来自不同的模板。
我认为该算法需要一些优化,这就是为什么我要在此论坛中发布此问题。
我的算法
Two URL matched
not
我对此算法有很多想法,并且发现从DOM树中删除节点是一个非常缓慢的过程。这可能是减慢该算法的罪魁祸首。
我从一些极客那里讨论了
他们说,对每个标记使用分数而不是将其删除,然后将其添加,然后在末尾返回(分数I Got)/(accumulatedPoints)或类似的值,然后在此基础上,您确定两个URL相似或不。
但是我不明白这一点。因此,您可以解释一些极客的说法,还是可以给出任何其他优化的算法来有效解决此问题。
提前致谢。寻找您的友好回应。
为了提高算法的复杂性,假设您正在使用Jsoup,则必须使数据结构适应算法。
4)标签的位置是什么意思?标签的Xpath?如果是,则为每个标签O(n)预先计算一次该值,并将该值存储在每个节点中。如果需要,您也可以将其存储在HashMap中以在O(1)中进行检索。
5)使用MultiMap按类别名称标记您的索引。您将节省大量计算
6)没有ID,没有类名的索引类
所有这些预计算都可以在树的一次遍历中执行,因此O(n)。
通常,如果要减少计算量,则必须在内存中存储更多数据。由于DOM页面是非常小的数据,因此在您的情况下这不是问题。