关于算法:给定n个硬币,其中一些更重,找到重币的数量?

Given n coins, some of which are heavier, find the number of heavy coins?

给定n个硬币,其中一些更重,使用O(对数2 N)重量计算重硬币数量的算法。注意,所有的重硬币都有相同的重量,所有的轻硬币也有相同的重量。

给你一个天平,你可以用它比较两个分开的硬币子集的重量。请注意,平衡仅指示哪个子集更重,或者它们是否具有相等的权重,而不是绝对权重。


我不会把全部答案都给你,但我会帮你把它分解。

  • 找一个O(log(n))算法来找到一个重硬币。
  • 找到一个O(log(n))算法,将一个集合分成两个集合,每个集合的重计数和轻计数数量相等,加上最多两个剩余部分(当没有相等数量的剩余部分时)。
  • 结合算法1和2。
  • 提示:

    • 算法1独立于算法2。
    • O(log(n))提示二进制搜索
    • 你怎么可能最终得到两个O(log(n))算法的O(log^2(n))