7

我上周接受了面试。我被困在算法回合中的一个问题中。我回答了这个问题,但面试官似乎并不相信。这就是我分享相同内容的原因。

请告诉我这个问题的任何优化方法,以便在以后的采访中帮助我。

问题:-

给出了 20 个文本文件,所有文件都是 ASCII 文本文件,大小小于 10^9 字节。还给出了一个输入,这也是一个 ASCII 文件,例如 input.txt。

我们的任务是策略性地将这个输入文件的内容与给定的 20 个文件进行匹配,并打印最接近的匹配文件的名称。输入文件的内容可能仅部分匹配

提前致谢。寻找您的友好答复。

4

3 回答 3

3

区分它们并通过 wc -l,或在 C++ 中实现Levenshtein 距离,将每一行视为单个字符(或考虑主题域的任何更合适的单元)

于 2013-04-04T19:41:48.480 回答
1

您可以创建某种索引(例如:trie)来汇总输入文件。然后您可以检查有多少索引在文档中匹配。

例如。为长度为 10 的输入文件创建一个 trie。对于文本文件中每个长度为 10 的字符串(重叠),检查其中有多少在 trie 中匹配。

于 2013-04-04T20:24:49.917 回答
0

作为为文档相似性设计真正功能强大、可扩展的系统的建议,我建议阅读《挖掘海量数据集》的第 3 章,该书可在线免费获得。那里提出的一种方法是通过将字数向量化为集合来“拼凑”数据集,然后对这些字数进行散列处理,并将散列结果族与 Jaccard 相似度进行比较,以获得所有文档之间的分数。如果操作正确,这可以以高精度处理数 PB 的文件。可以从斯坦福的CS246 Slides on Locality Sensitive Hashing中阅读带有良好图表的明确细节。书中还描述了更简单的方法,如词频计数。

于 2013-04-04T21:45:53.273 回答