国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

插值查找和斐波那契查找

這篇具有很好參考價值的文章主要介紹了插值查找和斐波那契查找。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

插值查找

一種基于二分查找的優(yōu)化算法,與二分查找相比,插值查找更加適用于數(shù)據(jù)分布較為均勻的有序數(shù)組。

插值查找算法基本思想

根據(jù)要查找的值與數(shù)組中最小值和最大值的比較,估算出要查找的值在數(shù)組中的大致位置,然后按照二分查找的方式進(jìn)行查找。

插值查找算法的具體實(shí)現(xiàn)步驟如下:

在要查找的有序數(shù)組中,確定要查找的值的范圍,即最小值和最大值;
根據(jù)要查找的值與最小值和最大值的比較,估算要查找的值在數(shù)組中的位置,計(jì)算出中間值;
將中間值與要查找的值進(jìn)行比較,如果相等,則返回中間值所在的位置;
如果中間值大于要查找的值,則在左側(cè)范圍內(nèi)繼續(xù)查找,將最大值更新為中間值減一;
如果中間值小于要查找的值,則在右側(cè)范圍內(nèi)繼續(xù)查找,將最小值更新為中間值加一;
如果要查找的值在數(shù)組中不存在,則返回查找失敗的結(jié)果。
與二分查找相比,插值查找算法的優(yōu)點(diǎn)在于對于數(shù)據(jù)分布較為均勻的有序數(shù)組,查找速度更快,而且時間復(fù)雜度也能達(dá)到O(log log n)級別。但是,對于數(shù)據(jù)分布不均勻的數(shù)組,插值查找算法的性能可能會劣于二分查找。

下面是插值查找算法的Python實(shí)現(xiàn)代碼:

def interpolation_search(arr, low, high, x):
    """
    插值查找算法
    :param arr: 要查找的有序數(shù)組
    :param low: 查找范圍的最小值
    :param high: 查找范圍的最大值
    :param x: 要查找的值
    :return: 查找結(jié)果,如果找到,則返回元素的下標(biāo),否則返回-1
    """
    while low <= high and arr[low] <= x <= arr[high]:
        mid = low + (x - arr[low]) * (high - low) // (arr[high] - arr[low])
        if arr[mid] == x:
            return mid
        elif arr[mid] < x:
            low = mid + 1
        else:
            high = mid - 1
    return -1

斐波那契查找

一種基于斐波那契數(shù)列的查找算法,與二分查找類似,只是每次將數(shù)組分成比例不同的兩部分,而不是像二分查找一樣分成相等的兩部分。

斐波那契查找的思路如下:

使用斐波那契數(shù)列作為分割點(diǎn)的數(shù)組下標(biāo)。
將目標(biāo)值與斐波那契數(shù)列上的元素比較,根據(jù)比較結(jié)果向左或向右查找。
如果目標(biāo)值在左半邊,則將區(qū)間范圍縮小到左半邊,重新計(jì)算斐波那契數(shù)列上的分割點(diǎn);如果目標(biāo)值在右半邊,則將區(qū)間范圍縮小到右半邊,重新計(jì)算斐波那契數(shù)列上的分割點(diǎn);如果目標(biāo)值等于當(dāng)前查找的元素,則返回該元素的下標(biāo)。
斐波那契查找的優(yōu)點(diǎn)是能夠在數(shù)組長度較大時,更快地找到目標(biāo)元素,但其缺點(diǎn)是需要在查找前計(jì)算斐波那契數(shù)列,時間復(fù)雜度較高。

以下是使用Python實(shí)現(xiàn)的斐波那契查找的代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-421603.html

def fib_search(arr, target):
    # 計(jì)算斐波那契數(shù)列
    fib = [0, 1]
    while fib[-1] < len(arr):
        fib.append(fib[-1] + fib[-2])
    
    # 初始化左右邊界和斐波那契分割點(diǎn)
    left, right = 0, len(arr) - 1
    k = len(fib) - 1
    
    # 在斐波那契分割點(diǎn)附近查找
    while k > 0:
        # 計(jì)算新的左右邊界和斐波那契分割點(diǎn)
        idx = min(left + fib[k - 1], len(arr) - 1)
        if target < arr[idx]:
            k -= 1
            right = idx - 1
        elif target > arr[idx]:
            k -= 2
            left = idx + 1
        else:
            return idx
    
    # 沒有找到目標(biāo)元素
    return -1

到了這里,關(guān)于插值查找和斐波那契查找的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于C語言用遞歸思想實(shí)現(xiàn)斐波那契數(shù)列的函數(shù)設(shè)計(jì)

    用C語言并利用遞歸思想實(shí)現(xiàn)設(shè)計(jì)一個程序,完成斐波那契數(shù)列的函數(shù)設(shè)計(jì),利用遞歸實(shí)現(xiàn)!

    2024年04月08日
    瀏覽(19)
  • 【動態(tài)規(guī)劃】是泰波那契數(shù),不是斐波那契數(shù)

    【動態(tài)規(guī)劃】是泰波那契數(shù),不是斐波那契數(shù)

    Problem: 1137. 第 N 個泰波那契數(shù) 首先我們來解讀一下本題的意思?? 相信讀者在看到【泰波那契數(shù)】的時候,不禁會聯(lián)想到【斐波那契數(shù)】,它們呢是一對孿生兄弟,這個 泰波那契數(shù) 相當(dāng)于是 斐波那契數(shù) 的加強(qiáng)版 我們首先可以來看到這個遞推公式 Tn+3 = Tn + Tn+1 + Tn+2 ,讀者可

    2024年02月08日
    瀏覽(23)
  • 動態(tài)規(guī)劃-斐波那契數(shù)

    斐波那契數(shù)是一個很好的熟悉和理解動態(tài)規(guī)劃的例子,通過斐波那契數(shù)可以更好的理解動態(tài)規(guī)劃的精髓,動態(tài)規(guī)劃是后面的計(jì)算是如何借助于前面的計(jì)算結(jié)果來加快計(jì)算速度的。 斐波那契數(shù)和斐波那契數(shù)列其實(shí)可以看成是一道題,只不過兩題的限制性條件稍微有差別 斐波那

    2024年02月14日
    瀏覽(19)
  • 509. 斐波那契數(shù)

    斐波那契數(shù) ?(通常用? F(n) ?表示)形成的序列稱為? 斐波那契數(shù)列 ?。該數(shù)列由? 0 ?和? 1 ?開始,后面的每一項(xiàng)數(shù)字都是前面兩項(xiàng)數(shù)字的和。也就是: 給定? n ?,請計(jì)算? F(n) ?。 示例 1: 示例 2: 示例 3: 提示: 0 = n = 30

    2024年02月06日
    瀏覽(21)
  • 力扣 509. 斐波那契數(shù)

    力扣 509. 斐波那契數(shù)

    題目來源:https://leetcode.cn/problems/fibonacci-number/description/ ? ?C++題解1:根據(jù)題意,直接用遞歸函數(shù)。 C++題解2(來源代碼隨想錄):動態(tài)規(guī)劃。動規(guī)五部曲:這里我們要用一個一維dp數(shù)組來保存遞歸的結(jié)果。 確定dp數(shù)組以及下標(biāo)的含義:dp[i]的定義為第i個數(shù)的斐波那契數(shù)值是

    2024年02月15日
    瀏覽(21)
  • 斐波那契算法的理解

    斐波那契算法的理解

    1.斐波那契數(shù)列 ?: 數(shù)組:int[] F= {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 }; 特點(diǎn): 從第三個數(shù)開始,后邊每一個數(shù)都是前兩個數(shù)的和 。 F[k]=F[k-1]+F[k-2]; 如圖所示: ????????①low、mid、high都是F數(shù)組的索引,F(xiàn)[k]-1表示長度。 ????????②為了方便計(jì)算出mid,變形:F[k]-1 = (F[k-1]-1) + (F

    2024年02月08日
    瀏覽(21)
  • JAVA-斐波那契數(shù)列

    輸入一個整數(shù) n ,求斐波那契數(shù)列的第 n 項(xiàng)。 假定從 0 開始,第 0 項(xiàng)為 0 。 數(shù)據(jù)范圍 0≤n≤39 樣例

    2024年02月10日
    瀏覽(23)
  • 斐波那契數(shù)列應(yīng)用2

    目錄 斐波那契數(shù)列應(yīng)用2 程序設(shè)計(jì) 程序分析? 系列文章 【問題描述】定義如下序列:f(1)=1,f(2)=1;f(n)=(A*f(n-1)+B*f(n-2))mod7? ? ?給定A和B,請你計(jì)算f(n)的值。 【輸

    2023年04月10日
    瀏覽(26)
  • Python斐波那契數(shù)列

    斐波那契數(shù)列是一個經(jīng)典的數(shù)學(xué)問題,在 Python 中可以使用多種方法來實(shí)現(xiàn),下面是幾個常見的實(shí)現(xiàn)方式: 1. 使用遞歸 ```python def fibonacci_recursive(n): ? ? if n = 1: ? ? ? ? return n ? ? else: ? ? ? ? return fibonacci_recursive(n-1) + fibonacci_recursive(n-2) ``` 2. 使用循環(huán) ```python def fibonacci_i

    2024年02月02日
    瀏覽(23)
  • 斐波那契問題——上臺階問題

    斐波那契問題——上臺階問題

    題目: ? 給定整數(shù)N,代表臺階數(shù),一次可以跨2個或者1個臺階,返回有多少種走法。 舉例: N=3,可以三次跨一個臺階,也可以先跨2再跨1,也可以先跨1再跨2,共三種走法。 思路: 如果臺階只有1級,方法只有一種,如果臺階有兩級,方法有兩種。如果臺階有N級,最后跳上

    2024年02月04日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包