划分和征服算法在O(logn)中找到伪造硬币

时间:2015-11-10 11:27:38

标签: algorithm runtime recurrence divide-and-conquer master-theorem

enter image description here

嗨!!我试图找到解决这个问题的信息和例子,但是找不到它。这是我准备考试的问题而不是作业。有人可以解释一下解决这个问题的步骤吗?并且,任何具有相关示例的资源都是这样的?欢呼声!!

1 个答案:

答案 0 :(得分:0)

我将在(log2(n)+ 1)步骤中给出解决方案。 +1是找重或轻。如果您知道该部分,则需要执行log2(n)步骤。

分为2堆。说,A和B.相互称重,你找到A<B(读取,桩A的重量小于B的重量)。拿一堆,说A,拆分并称重部件。如果他们的权重相等,你会得到两个事实:

  • 假币在B
  • 它比其他硬币重。

然后你继续使用桩B.(然后你的+1称重了。)

否则:

  • 伪造硬币在A
  • 它比其他硬币轻。

现在,说A包含假币。然后,将A的两个分开的桩命名为A and B,并重复。

PS:我用3 ^ n个硬币解决了这个难题(几年前)。它也需要相同数量的步骤,因为它的复杂性是(log3(n)(+1))。我将把它作为你要解决的下一个问题。

PPS:我将把问题的第二部分留给你。自己申请Master's theorem
提示:与binary search相同。