程序员常用的搜索算法(顺序、二分法、插值、分块、斐波那契)
为了找到
基本思想
它属于线性搜索和无序搜索,从一端开始按顺序扫描,直到找到与目标值相等的元素。
这是最基本的搜索方法,也是时间复杂度最高的搜索算法。
当数据过多时,此方法不适用。
代码实现
块搜索
基本思想
这是一生存在轮回世界最新章节种改进的顺序搜索方法,也称为索引顺序搜索。
这n个元素被分成m个块(m
虽然分块搜索的速度不如二分搜索法算法快,但比顺序搜索算法快得多,而且不需要对所有节点进行排序。当节点和块较多时,索引表可以对半搜索,这样可以进一步提高搜索速度。
那么索引表的组成就是每个块中最大的元素。
搜索方法是以二进制或顺序方式搜索索引表,选择目标值应该位于的块,然后在块内以顺序方式搜索。
二进位检索
基本思想
它属于有序搜索算法,也称为二分搜索法,即每次选择一半的数组进行搜索。如何选择一半需要比较中间值和目标值。根据顺序,如果中间值小于目标值,则选择后一半,如果大于目标值,则选择前一半,依此类推,直到找到等于目标值的元素,否则返回-1或null。
该方法能有效降低搜索频率和搜索范围,适用于大数据量的有序表。
因为前提是有序表,所以它不适用于具有太多操作(如插入和删除)的数据集,因为在排序算法上浪费了更多时间。
一般时间复杂度为0(log2n)
代码实现
插值搜索
基本思想
这是二分搜索法的改进版本,它一直重复着一半又一半的操作。该操作相对固定,并且不根据目标值的大小自适应地分割和选择,而插值搜索可以根据目标值自适应。
以下是百度对内插法的解释:内插法类似于通常查英文字典的方法。当查找以字母c开头的英语单词时,从字典的中间页开始,它将永远不会以二进制形式进行搜索,因为已知它的大致位置在字典的前部,所以可以从前面的某个地方进行查找。
因为它是二分搜索法的改进版本,所以有必要找到改进的关键点。二分搜索法是基于1/2有序表,所以mid是关键点。二分搜索法的mid=(低+高)/2可以转换为mid=low+(高-低)/2,因此它相当于1/2 in(高-低)/2的比例点。中=低+低+(价值列表[低])/(列表[高]-列表[低]) *(高-低),(价值列表[低])/(列表[高]-列表[低])为分割比例。
根据目标值在整个有序表中的位置,mid的变化更接近目标值,这间接减少了比较的次数。
该方法适用于关键字分布均匀的有序表。
复杂性为0(log2(log2n))
代码实现
斐波那契搜索
基本思想
斐波那契数列与0.618有很好的关系。随着斐波那契数列的增加,这两个数字的比率将越来越接近0.618,所以黄金比率可以应用于搜索。
百度词条:斐波那契搜索,斐波那契搜索是在二分搜索法的基础上按照斐波那契序列划分的。在斐波那契数列中找出一个比查找表中元素数稍大的数字f(n),并将原始查找表扩展到f(n)的长度(如果要补充元素,补充并重武神主宰最新章节复最后一个元素,直到满足f[n]个元素)。完成后,进行斐波那契分割,即把f[n]个元素分成f[n-1]个元素的前半部分和后半部分
这个方法很重要,所以百度的词条很清楚!
代码实现
总之,还有两个非常重要的搜索算法,即树表和哈希。我将分别写这两个算法。不要抛弃他们!
文章来源:www.atolchina.com