在排序数组中的二进制搜索的原始迭代版本中,我们计算中点如下:
m = (i+j)/2
(请发言)
但是,如果我们决定将它分成不等的部分,如1/3和2/3,我们使用这个公式:
m = (2i+j)/3
(请发言)
所以,我希望你的公式帮助将它分成(1/4和3/4),(1/5和4/5)或(2/5和3/5)。
我只需要m
的值,不是整个代码。
仅供参考,m = 3i+j/4
(将数组拆分为1/4和3/4是不正确的?)
答案 0 :(得分:0)
我们做一些数学运算:
假设:
i
是数组的较低索引,j
是数组的较高索引,m
是数组的分区索引,通过以x:y
比率对数组进行分区来获得。参见下面的评估:
<------x-----><----------y------------->
.-------------.------------------------.
^ ^ ^
i m j
therefore, it can be represented as
(m-i)/(j-m) = x/y
=> y.(m-i) = x.(j-m)
=> y.m - y.i = x.j - x.m
=> y.m + x.m = x.j + y.i
=> (x+y).m = x.j + y.i
=> m = (x.j + y.i)/(x+y) (this is the final result)
案例1:(1/4和3/4)或可以写为1:3
。
m = (x.j + y.i)/(x+y)
=> m = (1.j + 3.i)/(1+3)
=> m = (j + 3.i)/4
案例2:(1/5和4/5)或可以写成1:4
。
m = (x.j + y.i)/(x+y)
=> m = (1.j + 4.i)/(1+4)
=> m = (j + 4.i)/5
案例3:(2/5和3/5)或可写为2:3
。
m = (x.j + y.i)/(x+y)
=> m = (2.j + 3.i)/(2+3)
=> m = (2.j + 3.i)/5