问题背景用于模式匹配的数据结构上的大数据
我有一个包含一个有限的词汇说10个符号[A-D]。这些符号的含义与这个问题无关。它们可以是DNA碱基,音素,单词等。
项目是一系列符号。在这个问题中,所有项目的长度都是相同的(比如说6)。例如。
A C B A D J
我有一个很大的(5M)表,它包含从一些已知数据采样的所有长度为6的项目的计数。例如。
A C B A D J 55
B C B I C F 923
A B C D E G 478
给定一个带有一个未知符号的新序列,我的任务是猜测符号。在以下示例中,缺少的符号是?。
B C B ? C F
一个简单的解决方案猜?是看在我的表,找到适合的模式B C B ? C F
问题
什么是一个很好的数据结构来存储我的项目,频率表,以便最大数量的项目我合理有效地处理时空?如果查询时间的计算合理,我宁愿使用更少的内存。 (我会有很多这样的表格,所以5M数字只是一个近似值。)
什么是一些实现细节,可以使处理速度有很大的不同?
事情我已经想到了:
做一个串出每个序列,并使用正则表达式匹配。警告:1. O(n)是不可接受的。 (2)正则表达式很慢。 (3)字符串(至少在java中)膨胀。
让Lucene处理索引。关闭tfidf评分。使用短语搜索。有可能使用计数值进行评分,以便Lucene负责分类。
使用前缀和后缀尝试索引每个项目。
在一个/单独的列中使用db(可能是内存中的)整个数据来处理搜索。
更新
- 以我实际应用中,我将与单独存储长度-5,6,7,8,9,10-的序列来工作。我通过将问题限制在固定长度来简化问题。因此,对使用较少内存的解决方案的约束/偏好。
- 我的词汇尺寸可以被假定为下20.
我会设计它,使每个项目驻留在它自己的索引列中。因此6列+1列的频率。从数据库查询和订购应该非常快。 – arviman 2011-05-09 19:19:34
你描述中的两个常量:10个字母和长度= 6。它们只是例子还是真实的价值?长度的字母数量可以大得多吗? – maxim1000 2011-05-09 19:24:42
@ maxim1000。常数可以被认为接近真实。新增更新1,2谢谢。 – hashable 2011-05-09 19:42:22