数据结构之搜索

基于关键码的搜索,搜索结果唯一。基于属性的搜索,搜索结构可能不唯一。
静态搜索结构/动态搜索结构
为了提高搜索速度,需要用特殊的组织方式来组织需要的搜索信息。
衡量一个搜索算法时间效率的标准是ASL

静态搜索结构

判定树
判定树包括内部节点和失败节点(描述两个相邻元素不在表中的数据值的集合),如果搜索达到失败节点,说明搜索不成功
可以用来辅助计算ASL到达失败节点的关键码比较次数等于层次编号-1
顺序搜索
A S L s u c c = ∑ i = 0 n − 1 p i ( i − 1 ) ASL_{succ}=\sum^{n-1}_{i=0}p_{i}(i-1) ASLsucc=i=0n1pi(i1)
如果是等概率的,则ASL=(n+1)/2
可以按照概率从高到低排队,ASL最小

缺点:平均搜索长度较长,n较大时效率低
优点:对表的特性没有要求,无论元素怎样存放都可以

基于有序顺序表的顺序搜索算法在搜索不成功时不需要遍历表中所有元素。
A[i-1].key<x<=A[i].key的时候就可以停止搜索了

int SortrdList<E,K>::SequentSearch(const K x)const
{
   
	for(int i=1;i<=CurrentSize;i++)
		if(Element[i-1].key==x)
			return i;
		else if(Element[i-1].key>x)
			break;
	return 0;
}

基于有序顺序表的顺序搜索
A S L s u c c = n + 1 2 ASL_{succ}=\frac{n+1}{2} ASLsucc=2n+1
A S L u n s u c c = 1 n + 1 ( 1 + 2 + . . . + n + n ) = n 2 + n n + 1 ASL_{unsucc}=\frac{1}{n+1}(1+2+...+n+n)=\frac{n}{2}+\frac{n}{n+1} ASLunsucc=n+11(1+2+...+n+n)=2n+n+1n

折半搜索
O ( l o g 2 n ) O(log_{2}n) O(log2n)

//迭代算法
int SortedList<E,K>::BinarySearch(const K x)const
{
   
	int high=CurrentSize-1,low=0,mid;
	while(low<=high)
	{
   
		mid=(low+high)/2;
		if(x>Element[mid].key)
			low=mid+1;
		else if(x<Element[mid].key)
			high
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值