【问题标题】:Best algorithm and data structure to compare two big lists比较两个大列表的最佳算法和数据结构
【发布时间】:2018-11-16 09:51:07
【问题描述】:

每天我都会收到一份包含 30-40k 行的列表,每行包含有意义或无意义的名称,例如 fastcar、ultrafastcar、blablablacar 等。

我还有一个大列表,其中包含任何语言的所有单词(大约 50k 行)。

并且我想将第一个列表与第二个列表进行比较,以过滤哪些包含(或以 - 结尾)来自第二个列表的单词。我的意思是如果单词“ultrafastcar”那么它不会被过滤但“blablacar”会被过滤掉。

我已经准备了一些 Java 代码,但是比较列表需要很长时间。我使用了 ArrayLists 并将它们与 contains()、startsWith() 方法进行了比较。 ArrayLists 是正确的选择吗?除了这些方法,我还能用什么算法来比较它们。

【问题讨论】:

  • 50k 不算大,应该可以很快搞定。查看 ArrayList 和 parallelStream() 以轻松添加一些并发性(它在后台使用 fork join)。
  • 你的单词列表排序了吗?如果是这样,您是否使用二进制搜索?哈希映射可能比列表更快。
  • 第二个列表(字典单词)被排序。我没有尝试二分搜索。
  • 第二个列表的HashSet
  • 鉴于 OP 正在寻找子字符串,hash set set 在这里真的对您有帮助吗? Aho-Corasick 听起来更有用。

标签: java collections compare


【解决方案1】:

您可以尝试使用第二个列表实现三元搜索树,然后检查第一个中的单词是否存在于树中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多