关键词:
字符串检索
前缀树
数据结构
动态位数组
摘要:
随着互联网信息技术和计算机的发展与推广,社会生活中的许多方面都以数字化方式呈现,这样的社会变革引发了各行业数据的爆炸性增长,使人们踏入了21世纪的大数据时代。大数据时代是在利用相关算法对海量数据进行处理、分析的过程中,挖掘数据财富和数据价值,并运用它来决策发展方向、服务于生活与生产的时代。在大数据时代,数据分析和挖掘是重中之重,大数据时代的数据挖掘区别于传统数据挖掘的显著特征在于,其处理速度快且时效性高。这要求高效的数据结构与算法支持对字符串的各种处理。作为实现字符串高效处理的基础保证——字符串检索,如何提高字符串检索在大数据场景的各项性能表现,成为推动相关大数据产品落地的关键。针对这个角度,本文从字符串检索方向进行了深入学习研究,具体完成的工作包括:
(1)详细分析了广泛用于字符串检索领域的前缀树(Trie)搜索结构与算法原理,针对基于Trie树的多种实现结构包括经典Trie树结构、压缩前缀树(Radix-tree)结构以及双数组(Double-array Trie,DAT)结构分别进行了深入的原理剖析及时间空间复杂度分析,并分别指出了这些结构存在的缺陷和不足。通过汇总所有的问题,提出了实现基于Trie树的高效搜索结构的优化方案。
(2)根据提出的优化方案,实现了一个基于Trie树的、具备高效时空表现的以及支持动态更新场景的高效字符串搜索结构——动态位数组(Dynamic-Bit Array,D-BA)结构。D-BA结构以2n+1个bit位的空间消耗实现了Trie树的有效表示,这样的特征促进了其在大数据应用场景中的使用。此外,D-BA结构支持Trie树动态更新的性质扩大了其应用于更多场景的可能。
(3)针对字符串插入、删除、查询等基本操作,设计了基于D-BA结构的实现算法,此外,为实现在大数据应用场景中D-BA结构Trie树的快速构建,基于D-BA结构的分层位数组特征以及指令集批处理思想,设计了D-BA结构的快速构建算法。算法通过程序并发的执行方式,同时构建不同层级字符对应的位数组,避免了较长字符串导致算法性能退化的问题,使构建算法时间复杂度恒定为O(n),n为输入数据集包含的字符串数量。
(4)针对D-BA结构以及其相匹配的相关操作算法,设计了定长字符串不同数量规模数据集以及定量字符串不同字符串长度数据集两类数据集情况下,交叉验证D-BA结构性能表现的测试方案。经过与经典Trie树实现结构、Radix-tree结构以及双数组结构的测试对比,D-BA结构的内存空间消耗分别约占上述实现结构的1%、3%、2%。同时,随着字符串数据量级的增长,D-BA结构消耗的内存空间呈较低系数的线性增长,系数约为1.2,而其他结构以大于1.2的系数(测试结果显示,最大增长系数约为2.4)波动增长。这样的性质增强了D-BA结构应用大数据场景内存空间消耗的可预测性,面对实际的业务增长能较好地把控内存空间消耗风险。对计算机资源分配更加友好。
本文图40幅,表10张,参考文献56篇。