查找优化

来源:互联网 发布:阿里云的cdn怎么样 编辑:程序博客网 时间:2024/04/30 08:50

一、顺序查找

在某个数组中查找某个key时的一般方法:

...

for(i=0;i<=n;i++){

    if(key == a[i])

        return ;

}

...

复杂度为O(n)

需要判断i<=n和key == a[i]两个语句。

 

顺序查找改进:

如在数组头放入key值,

...

a[0] = key;

while(a[i] != key){

      i -- ;

}

...

复杂度为O(n)

只需要判断key != a[i]一个语句。

这种在查找方向的尽头放置“哨兵”,可以使得效率的提升。

 

二、折半查找(二分查找)

一般方法:

...

while(low < high){

      mid = (low + high)/2;

      if ...

}

...

优化:

插值查找:

将mid = (low + high)/2 = low + 1/2(high - low)      改进为 ===>>>      mid = low + (key - a[low])/(a[high - a[low]])*(high - low)

这样在关键字分布较为均匀,表较大的情况下有明显的改善。

斐波那契(Fibonacci)查找:略。

思想都是改进mid的切分方法。

 

 

0 0