批处理字符串包含操作优化

时间:2014-03-31 07:26:17

标签: java string algorithm search batch-file

我有2套字符串,A和B. 我想解决的问题是计算集合B中的多少个字符串包含集合A中的任何单个字符串,例如:
答:" a"," b"
B:" abc"," dsf"," aqc"," yyy"," xxx",&#34 ; BBB"
结果是3(" abc"," aqc"," bbb")

不幸的是,在我的情况下,设置A和设置B非常大,比如说,设置A有数百万个字符串,设置B有数十亿个字符串。因此,我必须在Java语言中采用数百万亿的“操作索引”。复杂度的算法是O(m * n)。

我可以使用任何优化算法来加快速度吗?

1 个答案:

答案 0 :(得分:1)

可能是数据库搜索和喝咖啡休息时间。

但是,让我们看看。

使用字母组:

  • 首先将每个字母映射到一个主要的,最常见的字母:e 2,t 3,o 5,i 7,...
  • 计算A和B中字符串的所有字母素数的乘积。
  • 现在B中的候选人是那些可以被A中任何元素分割的人。
  • 这可能会减少可能候选人的映射因素。

使用搜索模式(A中的术语字母树):

  • 这有点像制作一个正则表达式模式“(a | b)”然后非常大。可以针对每个单词编译和运行此模式。不确定这是否加速。

此外,使用Java 8及其并行流,以A为块1000,从B为1000。