【问题标题】:What are some algorithms or methods for highly efficient search indexes over random data?有哪些算法或方法可以对随机数据进行高效搜索索引?
【发布时间】:2012-09-26 19:56:02
【问题描述】:
我需要一个“出发点”来研究用于在大量随机数据中查找随机字符串的高效搜索算法、方法和技术的选项。我只是在学习这些东西,所以有人有这方面的经验吗?以下是我要优化的一些条件:
- 第一个想法是在搜索索引等方面最小化文件大小 - 因此尽可能使用最小的索引,甚至更好 - 动态搜索。
- 要搜索的数据是大量完全随机的数据 - 比如说,没有可感知模式的随机二进制 0 和 1。千兆字节的东西。
- 以同样随机的搜索字符串呈现,例如 0111010100000101010101 在大量随机数据中定位相同字符串的最有效方法是什么?性能等方面的权衡是什么?
- 需要定位该搜索字符串的所有实例,因此这似乎是限制要实施的解决方案类型的重要条件。
任何提示、线索、技术、维基文章等将不胜感激!我现在正在研究这个,看起来很有趣。谢谢。
【问题讨论】:
标签:
algorithm
search
data-structures
indexing
【解决方案1】:
执行此操作的一种简单方法是在可搜索数据的所有可能的 N 字节子字符串上建立索引(N = 4 或 8 或类似的值)。索引将从小块映射到该块出现的所有位置。
当你想查找一个值时,取前 N 个字节并使用它们来查找所有可能的位置。当然,您需要验证所有位置。
较高的 N 值意味着更多的索引空间使用和更快的查找,因为会发现更少的误报。
这样的索引在大小上可能是基本数据的小倍数。
第二种方法是将可搜索数据拆分为连续的、不重叠的 N 字节块(N = 64 左右)。将每个块散列到更小的大小 M(M = 4 或 8 左右)。
这节省了大量的索引空间,因为您不需要所有重叠的块。
当您查找一个值时,您可以通过查找要查找的字符串的所有连续、重叠的子字符串来定位候选匹配项。这假定要查找的字符串的大小至少为 N * 2 个字节。