美文网首页
算法-查找-插值查找

算法-查找-插值查找

作者: MacXin | 来源:发表于2018-02-23 11:31 被阅读0次

    算法来源

        对于插值查找,就是对于二分查找的优化,将二分查找中的mid = (low + high) / 2改为mid = low + (high - low) * (key - a[low]) / (a[high] - a[low])。插值查找是根据查找关键子key与查找表中最大最小记录关键字比较后的查找方法,核心在于插值计算公式(key-a[low])/(a[high] - a[low])。

    算法分析

        时间复杂度依旧为O(logn)。

        对于表长较大,而关键字分部比较均匀的查找表来说,平均性能要比折半好很多。

        如果数组中的分部类似{1,100,200,1000,10000...10000}这种极端不均匀的数据,用插值法也不太合适。

    javaScript:

    function search(arr, key, left, right){

        while(left < right){

            if(arr[left] == key){

                return left

            }

            if(arr[right] == key){

                return right

            }

            let middle = left + (right-left)*((key-arr[left])/(arr[right]-arr[left]))

            middle = Math.floor(middle)

            if(arr[middle] == key){

                return middle

            }

            if(key < arr[middle]){

                return search(arr, key, left, middle-1)

            } else {

                return search(arr, key, middle+1, right)

            }

        }

        return -1

    }

    let arr1 = [0, 9, 11, 39, 68, 88, 101]

    console.log(search(arr1, 88, 0, arr1.length-1))

    相关文章

      网友评论

          本文标题:算法-查找-插值查找

          本文链接:https://www.haomeiwen.com/subject/hkztxftx.html