“型号”子字符串搜索的高效数据结构

时间:2012-12-05 16:46:31

标签: java search substring

我们有一个问题,我们想要对大量[1MM - 10MM]的字符串(“型号”)进行子字符串搜索,快速识别包含给定子字符串的任何“型号”。型号是短字符串,例如:

  1. ABB1924DEW
  2. WTW9400PDQB
  3. GLEW1874
  4. 目标很简单,给定一个子字符串,快速找到匹配子字符串的所有模型编号。例如(在上面的模型编号的世界中),如果我们搜索字符串“EW”,该函数将返回GLEW1874和ABB1924DEW(因为它们都包含子串EW)。

    数据结构还需要能够支持快速搜索以给定子字符串开头和/或以给定子字符串结尾的模型编号。例如,我们需要能够像WTW ... B那样进行搜索(这与WTW9400PDQB相匹配,因为它以WTW开头并以B结尾)

    我正在寻找的内存数据结构可以非常有效地进行这些搜索。理想情况下,在Java中也可以使用一个很好的(简单)实现。简单(和快速)比优步更复杂,速度更快。天真的算法(只是遍历所有对每个部分进行子串搜索的部件号)对于我们的目的来说太慢了,我们正在寻找更快的东西(预先确定)

    那么,这个问题的教科书数据结构/算法是什么?

1 个答案:

答案 0 :(得分:0)

您需要的是Suffix Tree。我不知道Java推荐的库,所以你可能需要自己实现一个