【问题标题】:Split an array of binary search into unequal parts将二进制搜索数组拆分为不相等的部分
【发布时间】:2015-11-30 19:27:08
【问题描述】:

在排序数组中的二分搜索的原始迭代版本中,我们计算中点如下:
m = (i+j)/2 (占个地板)

但是,如果我们决定将其分成不相等的部分,例如 1/3 和 2/3,我们会使用以下公式:
m = (2i+j)/3 (请采纳) p>

所以,我希望您能帮助我将公式拆分为 (1/4 和 3/4) 、 (1/5 和 4/5) 或 (2/5 和 3/5)。
我只需要m 的值,不是整个代码。

仅供参考,m = 3i+j/4 (将数组拆分为 1/4 和 3/4 不正确吗?)

【问题讨论】:

  • 什么是ij
  • Java 和 C 是两种截然不同的编程语言。请选择其中之一!此外,到目前为止,您尝试过什么?
  • 我不明白这个问题。可能仅通过公式计算数组的一部分的大小,并通过从整体中减去而不是从公式中获得另一部分的大小。
  • 不清楚你在问什么以及这与数组有什么关系
  • Java 和 C?我们应该选择一个吗?

标签: algorithm formula


【解决方案1】:

让我们做一些数学运算:

假设:

  1. i 是数组的低位索引,
  2. j 是数组的较高索引,
  3. 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)

CASE 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

CASE 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2012-04-12
    • 2017-04-15
    相关资源
    最近更新 更多