鉴于n个硬币,其中一些更重,找到重币的数量?

时间:2013-05-25 11:06:18

标签: algorithm

给定n个硬币,其中一些是较重的,使用O(log ^ 2 n)称重来查找重硬币数量的算法。请注意,所有重型硬币都具有相同的重量,而所有重型硬币也具有相同的重量。

您将获得一个余额,您可以使用它来比较两个不相交的硬币子集的权重。请注意,余额仅指示哪个子集较重,或者它们是否具有相等的权重,而不是绝对权重。

1 个答案:

答案 0 :(得分:4)

我不会放弃整个答案,但我会帮你分解。

  1. 找一个O(log(n))算法来查找单个重币。
  2. 找到一个O(log(n))算法,将一个集合分成两组,重数和亮数相等,最多剩余两个(当没有剩余数量时)。
  3. 结合算法#1和#2。
  4. 提示:

    • 算法#1独立于算法#2。
    • O(log(n))提示二进制搜索
    • 您最终可能会使用O(log^2(n))两个O(log(n))算法来结束{{1}}吗?