簡體   English   中英

在進行指數搜索時,為什么選擇指數的底數為2?

[英]While doing an exponential search, why do we choose the base of the exponent as 2?

我們可以選擇自己喜歡的任何基准還是選擇基准,因為它可以提供最大的效率?

我在看這個算法。 基本上可以這樣:

template <typename T>
int exponential_search(T arr[], int size, T key) {
    if (size == 0) {
        return NOT_FOUND;
    }

    int bound = 1;
    while (bound < size && arr[bound] < key) {
        bound *= 2;
    }


    return binary_search(arr, key, bound/2, min(bound + 1, size));
}

或等效的Python:

def exponential_search(arr, p):
i = 0
while (arr[2 ** i] < p):
    i += 1
binary_search(arr, p, i)

從第二個while循環中可以清楚地看到,它們正在設置

bound *=2

為什么是2? 為什么沒有其他數字?

除了實現上的困難外,用k的乘數搜索位置n的成本為log(n)/ log(k)+ log((k-1)n)+ O(1)= log(n)/ log(k )+ log(n)+ log(k-1)+ O(1)。 通過增加k,我們可以采用恆定因子方法,但不能達到1,但是成本是恆定項的增加。 我想2工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM