字符串处理中常用的几种数据结构及其性能分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第19卷 第12期2003年12月
甘肃科技
G ansu Science and T echnology
Vol.19 No.12
Dec. 2003
字符串处理中常用的几种数据结构及其性能分析
郑丽英1,李永昶2
(1.兰州交通大学信息与电气工程学院,甘肃兰州 730070;2.兰州交通大学机电工程学院,甘肃兰州 730070)
摘 要:许多计算机应用涉及字符串处理。
为了提高处理效率,设计一个好的数据结构十分重要。
分析了几种常用的字符串数据结构及其性能,重点分析了数据结构T rie及其三种形式的结构特性。
关键词:T rie;数据结构;索引
中图分类号:TP311
1 前言
许多计算机应用都涉及到对一个非常大的字符串集合的有效管理。
例如,从档案管理、文献目录查找、地理信息索引到Web上大量的文本信息处理等等,都涉及到对一个非常大的字符串集合的管理。
显然,如何有效管理大的字符串集合的首要问题是如何存储和组织它们即选择一个合适的数据结构。
在实际中为一个应用选择一个好的数据结构取决于许多因素,如存储需求、查找速度、是否在内存、是否要求有序存储等等。
已有许多用于字符串管理的数据结构,下面将分别进行分析和讨论。
2 常用的字符串数据结构
2.1 BST树
BST树((Binary Search T ree,即二叉搜索树)是最简单且最直观的一种。
在一棵BST树中,每一个结点存储一个字符串和两个分别指向左右孩子结点的指针。
在BST树中查找一个给定的字符串的过程是:首先和根结点的字符串比较,若相等则查找成功。
若不相等则按比较结果决定沿左分支或右分支继续比较。
BST树的结构性能主要取决于树的形态,与输入字符串集的排列有关。
假设字符串集合的分布是稳定的、且常用词的集合是已知的且常用词分布在根结点的附近,则BST结构是相当快的,如果字符串集合的分布不稳定,特别地如果是有序的,BST的性能最差(为O(n)),BST退化为一棵单枝树。
因此,BST特别不适合有序排列的输入字符串集合。
2.2 BST树的变种
实际应用中,有许多BST的变种。
如AV L-树和红-黑树及splay树等,它们与BST树的不同在于插入字符串的过程中重组树的结构,保持树的近似平衡,从而保证不会出现单枝树。
但是,AV L-树和红-黑树结构的不足在于每一个结点中要保存附加的信息位(AV L-树中2位,红-黑树中1位)。
另一方面,由于重组树的结构使一些经常存取的关键词聚集在树的根附近。
并且,在不经常作插入运算的情况下,保持树的平衡的代价相对较低。
因此保持树的平衡所带来的好处相对于BST树来说可以抵消由于插入运算引起的附加时间。
S play树是另一种BST树的变种。
其特点是:每一次搜索,都要将操作的结点通过一系列的结点旋转即splaying 运算将结点移到根结点的附近。
这样使得一些经常存取的关键词总在根的附近,以便在后续查找中可以快速找到。
但是,这种结构也有明显的不足。
相对于BST树,一棵S play树需要较多的存储空间(每一个结点中要存储一个指向双亲的指针),其次, S playing运算本身比较复杂。
在实际的应用中,应该根据实际的应用需求选择合适的结构。
2.3 Hash表
字符串处理中常用的另外一种数据结构是哈希表(Hash table)。
哈希表是一种直接计算记录存放地址的方法,它在关键码(字符串)与存储位置之间直接建立映像。
当采用链式哈希表结构、位方式的哈希函数、不要求字符串集合有序存储时,哈希表结构及其查找技术性能最佳。
由于哈希表中的字符串通常是随机地分布在表中,不是有序的,在某些要求字符串有序存储(如索引维护及前缀查找)的应用中,不适合采用哈希表。
2.4 T rie树
T rie树是一种有效的字符串处理数据结构,广泛地用于自然语言处理、模式匹配、IP路由表以及文本压缩等。
T rie是一种树型数据结构,用于存储字符串,可以实现字符串的快速查找。
有三种类型的trie:标准trie,压缩trie,后缀trie;
・标准trie
定义1:令S ={s1,s2,s3,......sn},是一个定义在字符集合∑上的字符串集合。
S 的一个trie 结构是一棵m 分支树T (|∑|=m ),除根以外的所有非终端结点存储∑中的一个字符,每一个叶子结点li 对应一个字符串si ,并且从根到叶子结点li 的路径上的结点字符连接起来就是字符串si 。
T 的结构特性如下:
(1)T 是有序树,T 所表示的字符串互不相同;(2)T 最多有n 个叶子结点;
(3)T 的深度为S 中最长字符串的长度;T 的结点个数是O (n )(n 为总的字符串长度)。
.压缩trie (com pressed trie )
为了改进标准trie 的不足,常常要对标准trie 树进行压缩。
一种简单直观的压缩方法是路径压缩,基本思想是:若树的某个结点到叶子结点的路径上,每个结点都只有一个分支,可将该路径压缩到一个叶子结点。
若S ={s1,s2,...sn}且|∑|=d ,S 的压缩trie 树T 有下列特性:
(1)每一个非叶子结点至少有两个最多有d 个分支;
(2)T 有s (s =|S|)个叶子结点;(3)T 的结点个数是O (s )。
压缩trie 常常用做文本集合的辅助索引结构,在这种结构里,每个结点并不存储具体的字符,而是用一对数字表示字符(串)在基本结构中的位置。
这种结构不仅大大减少存储空间,而且不必考虑实际的文本如何存储(是二进制?还是ACII 码),常常用于文本压缩应用。
.后缀trie (suffix trie )
后缀trie 与标准trie 的不同在于trie 中存储的是一个文本(或字符串)的后缀子串。
这种trie 结构的特点是:
(1)减少存储空间;
(2)不必考虑实际的文本如何存储(是二进制?还是ACII 码);
(3)不必担心存储同样的字符串;
(4)当要匹配的模式是一个后缀(或前缀)子串时,可以有效地支持模式匹配运算。
3 结论
尽管有多种字符串数据结构,但是由于其各自的特点,其应用的适应性也不一样,在实际应用中应根据其特点选择。
参考文献
[1] D.E.克努特1计算机程序设计技巧1北京:国防工业出版社,
1982,81
[2] 郑丽英,吕 慧,闫光辉1数据结构1兰州:兰州大学出版社,
2003,51
[3] 严蔚敏1数据结构1北京:清华大学出版社,1991,10,
(上接第34页)
减速时间分别设定为20、10、5S。
图2 梯形图控制程序
在t =0时按下正转起动按钮X3,电机以7速开
始起动,0-2S ,2-4S 分别以第1、第4加减速时间
加速,4-20S 使用第2加减速时间,t =8S 时改为5速,t =12S 时改为3速,t =16S 时按下停止按钮X5,t =20S 时按下反转按钮,反转起动,20-24S 使用第4加减速时间,t =23S 时发出停车信号。
相应的梯形图控制程序如图2所示。
4 效果分析
可编程序控制器体积小,功耗低,控制灵活,使用方便,编程简单,针对不同的控制要求只需更改程序。
变频器功能强、节电效果明显。
可编程序控制器与变频器结合是一种理想的控制方案,在很多设备或系统中得到广泛推广应用。
参考文献
[1] 廖常初1可编程序控制器的编程方法与工程应用1重庆:重
庆大学出版社,2001,21
[2] 满永奎等1通用变频器及其应用1北京:机械工业出版社,
19991
2
4 甘 肃 科 技 第19卷。