![](/img/trans.png)
[英]How to do exponential division when base and exponent is different between numerator and denominator?
[英]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.