查找算法
静态查找: 数据集合稳定,不需要添加,删除元素的查找操作。
动态查找: 数据集合在查找的过程中需要同时添加或删除元素的查找操作。
查找结构
对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法等来提高查找的效率。
对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题。
顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功。如果查找了所有的记录仍然找不到与给定值相等的关键字,则查找不成功。
插值查找--按比例查找
折半查找的基本思想是: 减小查找序列的长度,分而治之地进行关键字的查找。
折半查找的实现过程是∶先确定待查找记录的所在范围,然后逐渐缩小这个范围,直到找到该记录或查找失败(查无该记录)为止。
例如有序列: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....
将斐波那契数组替换带查找的数组
线性索引查找
稠密索引
左边的索引表是根据右边的查找表,关键码进行排序整理的。数据表特别大不推荐稠密索引
分块索引
块内无序,块间有序
倒排索引
根据属性查找记录
记录号不定长