((n/m) + m-1)
时,函数m = √n
的值最小。因此,最佳步长为m = √n
。
这里,n
是数组的大小,m
是要跳转的块大小。
我理解n/m
是我们针对最坏情况所做的跳转,m-1
是我们找到间隔(arr[km] < x < arr[(k+1)m])
后线性搜索所需的时间。
但我不明白如何找到m=√n
。我正在尝试如下。
(n/m)+m-1=0;
(n/m)+m=1;
n+m^2=m;
n=m-m^2.
但是这怎么会变成m = m=√n
答案 0 :(得分:2)
我假设你想找到任何n
的最低要求。
(n/m)+m-1
最小值是渐变为0的位置。
因此,将表达式与m
:
d/dm (n/m)+m-1 = 1-n/m^2
解决1-n/m^2 = 0
会给你m = sqrt(n)