数据结构与算法---查找算法

查找算法

静态查找: 数据集合稳定,不需要添加,删除元素的查找操作。
动态查找: 数据集合在查找的过程中需要同时添加或删除元素的查找操作。

查找结构
对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法等来提高查找的效率。

对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题。

顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功。如果查找了所有的记录仍然找不到与给定值相等的关键字,则查找不成功。

  插值查找--按比例查找

折半查找的基本思想是: 减小查找序列的长度,分而治之地进行关键字的查找。
折半查找的实现过程是∶先确定待查找记录的所在范围,然后逐渐缩小这个范围,直到找到该记录或查找失败(查无该记录)为止。
例如有序列:11235813 213455 89(该序列包含11个元素,而且关键字单调递增。),现要求查找关键字key为55的记录。

我们可以设指针low和 high 分别指向关键字序列的上界和下界,指针 mid指向序列的中间位置,即 mid =(low+high)/2.

 首先将mid 所指向的元素与key 进行比较,因为我们这里key = 55,大于8,这就说明待查找的关键字一定位于mid和high之间。于是我们执行low = mid+1; mid = (low+ high)/2;

 然后再将mid 所指的34与key进行比较,仍然 mid < key,所以继续执行low = mid+1; mid = (low=high)/2;

斐波那契查找

黄金比例---0.618:1

斐波那契数列(F[k]):
1, 1, 2, 3, 5, 8,13,21,34,55,89....

将斐波那契数组替换带查找的数组

 线性索引查找

稠密索引

左边的索引表是根据右边的查找表,关键码进行排序整理的。数据表特别大不推荐稠密索引

 分块索引

块内无序,块间有序

 倒排索引

根据属性查找记录

记录号不定长

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值