Scala:查找不适合内存的列表中所有元素的编辑距离

时间:2014-07-06 18:46:42

标签: sql algorithm list scala

在我之前的问题中,我在寻求一个算法的建议来比较巨大列表中的所有元素: Scala: Compare all elements in a huge list

我面临的一个更普遍的问题,并希望得到一些建议是对列表元素进行近似比较,以获得一次不适合内存的列表。我正在从SQL请求构建此列表,该请求返回一个游标以迭代大约70 000 000条记录的单个字符串字段。我需要在此列表中的每两个字符串元素之间找到edit-distance(http://en.wikipedia.org/wiki/Edit_distance)。

我的想法是使用N条记录的滑动窗口来比较所有70 000 000条记录:

  1. 将N个元素读入一个非常适合内存的列表(N~10 000)
  2. 使用此处描述的算法计算此列表中所有元素的编辑距离: Scala: Compare all elements in a huge list
  3. 将下一个N个元素(从N到2N-1)读入新列表。比较所有这些,如2。
  4. 将SQL查询光标倒回到第一条记录
  5. 使用与2中相同的算法,将从索引0开始到N的每个字符串与此新列表中的所有字符串进行比较。
  6. 幻灯片窗口从2N到3N-1记录中读取字符串到新列表
  7. 使用与2中相同的算法,将从索引0到2N开始的每个字符串与此新列表中的所有字符串进行比较。
  8. 所有比较结果我需要将DB写入(String,String,Distance)记录,其中前两个元素是要匹配的字符串,第三个是结果。

    问题:

    1. 如何强制Scala从此算法的前面步骤中垃圾收集不需要的列表?
    2. 此算法在完成工作所需的计算次数方面非常糟糕。关于如何降低复杂性的任何其他算法,想法?
    3. 谢谢!

0 个答案:

没有答案