我需要实现w-shingling(用Java)来比较两个html文档的相似性。问题是如何收集和存储带状疱疹。让我们假设(a,rose,is,a,rose,is,a,rose)就是这些文档中的一个。我想我的算法(使用LinkedList)不会是最快的:
正如我预测的那样,对于大型文档来说,这可能会非常慢。你能给我一些提示,让它更快......?
答案 0 :(得分:1)
根据算法,您必须首先创建所有可能的w-shingling - w - 文档中出现的字长序列。您需要维护一个从文档中读取的 w - 字序列的窗口(即在读取 w + 1个字后,您可以丢弃缓冲区中的第一个字)。
对于存储w-shingling,您可以创建不可变类并实现equals()和hashCode()以提高比较性能。当您构建带状疱疹时,您可以将它们存储在Set
中,以便在运行中摆脱重复。