检索(一)线性表检索、集合检索
来源:互联网 发布:ws源码 编辑:程序博客网 时间:2024/05/17 09:33
检索是指在数据中找到关键码满足特定条件的某些记录。
一,效率
检索的销率非常重要,特别是对于海量的数据。下面介绍提高检索效率的方法:
1)预排序 (适用于少量数据):在检索前完成,利用有序性,进行有序表的查找。比如二分查找。缺点:排序算法比较耗时
2)索引:对于经常查找的情况,利用辅助的索引信息,提高检索的销量。
缺点:要浪费空间存储辅助的索引信息,是以空间换时间的做法。且,需要维护索引表和查找表的一致,查找表改变时,要相应的改变索引表。
3)散列(适用于数据量大的情况,检索效率高):数据存储于散列表中,根据关键码,确定数据在散列表中的位置。
缺点:只能针对一个关键值的查找,不适合范围查找。一般也不允许重复的关键字
二、衡量标准
1)时间标准:平均检索长度 ASL=∑c(i)*p(i)
2)需要的存储量
3)算法的繁杂度
三、线性表的检索
1)顺序检索:适用于链表和顺序表
检索成功的ASL=(n+1)/2; 检索失败的比较次数是n+1;
假设成功检索的概率是p,失败检索的概率是1-p,ASL2=p*(n+1)/2+(1-p)(n+1)=(n+1)(1-p/2) ASL2=Θ(n)
优点:插入数据可以插入末尾 时间为O(1)
缺点:检索时间长为O(n)
2) 二分检索
intbsearchWithoutRecursion(intarray[],intlow,inthigh,inttarget){while(low<=high){intmid=(low+high)/2;if(array[mid]>target)high=mid-1;elseif(array[mid]<target)low=mid+1;else//findthetargetreturnmid;}//thearraydoesnotcontainthetargetreturn-1;}
二分查找的时间复杂度
基于BST
最大的成功查找比较次数⌈log2(n+1)⌉
失败查找比较次数⌈log2(n+1)⌉或⌊log2(n+1)⌋
优点:查找效率为logn
缺点:插入元素不方便,需要先排序
3)分块检索
思想:按块有序
前一块的最大关键码必须小于后一块的最小关键码
每一块中的关键码不一定有序
用二分查找找到数据块,再用顺序查找块内的数据。
顺序检索和二分检索的折中,既有较快的检索速度,又方便插入。
分块检索时间复杂度分析:
b块,每块长度为s。b=n/s
优点:插入删除方便,没有大量记录的移动
缺点:增加一个辅助的存储数组。
检索前需先对分块进行排序。
当大量插入删除,至使块满或块空时,需要重新组织数组。
四、集合的检索
1)集合的表示方式
用位向量来表示集合:适合于密集型集合
2)集合的数据结构
3)集合的插入删除
- 检索(一)线性表检索、集合检索
- 线性检索:顺序检索
- 检索 - 线性表
- 检索
- 检索
- 检索
- 检索
- 检索
- C语言-数据结构-线性表检索和二分检索
- 分布式检索(智能检索)
- 全文检索----新手入门(一)
- 信息检索导论学习笔记(一) 布尔检索
- 快速检索(一)之自定义快速检索QiuckIndexBar控件
- 数据结构----索引方法(1)线性检索
- 全文检索(一)
- 多对一 检索
- 新闻信息检索(一)
- 使用微软检索服务器检索(转载)
- 数组和指针的区别
- 笔试真题解析 ALBB-2015 系统工程师研发笔试题
- git和github学习1(搭建git环境)
- 计蒜之道2015程序设计大赛
- Eclipse 下搭建C++编译环境
- 检索(一)线性表检索、集合检索
- hive 配置
- hdu 5389 Zero Escape(dp)
- 简化IT程序员工作生活的4个窍门
- How to compile the book Mercurial: The Definitive Guide from the DocBook source files?
- NSString NSArray NSNumber 总结
- 使用 rsync 服务(二)
- Android的提交数据到服务器
- KMP算法--next数组