2021/9/24 查找算法(4暴力,二分,插值,黄金)

2021/9/24 查找算法(4暴力,二分,插值,黄金)

暴力查找,遍历数组

二分查找,递归。中止的条件是left > right时

    private static int binarySearch(int[]arr,int left,int right,int value){
        counts++;
        int mid = left + (right-left) / 2; // 不会越界
        while(left<=right){
            if (arr[mid]>value){
                return binarySearch(arr,left,mid-1,value);
            }else if(arr[mid]<value){
                return binarySearch(arr,mid+1,right,value);
            }else {
                return mid+1;
            }
        }
        // left > right 未找到情况
        return -1;
    }

binary search v2 当value有多个时,找到所有下标

/**在上面基础上,在else中改动
 */
{
  // else 条件中找到了value, 因为arr是有序的,我们只需要向左右遍历查看还有没有相同的值
  int temp = mid-1;
  while (temp >=0&& arr[temp]==value ){
    list.add(temp);
    temp --;
  }
  temp = mid+1;
  while (temp <arr.length && arr[temp]==value ){
    list.add(temp);
    temp ++;
  }
  list.add(mid);
  Collections.sort(list);
  return list;
}

Interpolation Search 插值查找

与二分查找类似,不同点在于mid的策略

仔细想想为什么会是这样的把,, ,,

-- 假设这是一个等差数列,用值的比相当于路径的比。

如果你的key 更偏向a[low]或者a[high] 那么他就会向相应的方向靠。

Fibonacci Search 🌟

首先我们来介绍一下Fibonacci这个人吧

中世纪意大利数学家,是西方第一个研究斐波那契数的人。

斐波那契在《计算之书》中提出了一个有趣的兔子问题:

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有的兔子都不死,那么一年以后可以繁殖多少对兔子? 可以更简洁用这张图来看

两个连续的“斐波纳契数”的序列相互分割将接近黄金比例(1.618:1或1:0.618)。例如 233/144.

斐波那契数列也拿来处理股市..

✅ 回到斐波那契查找

K 表示第几个斐波那契数!!

紧接着就是代码实现部分。

posted @ 2021-09-26 15:16  能借我十块钱吗  阅读(36)  评论(0编辑  收藏  举报