分治算法在 O(logn) 中找到假币

Posted

技术标签:

【中文标题】分治算法在 O(logn) 中找到假币【英文标题】:Divide and conquer algorithm to find the counterfeit coin in O(logn) 【发布时间】:2016-02-11 06:25:46 【问题描述】:

嗨!!我试图找到解决此问题的信息和示例,但找不到。这是我的考试准备问题,而不是作业。有人可以解释解决此问题的步骤吗?而且,任何具有此类相关示例的资源?干杯!!

【问题讨论】:

n = 2 实际上无法解决。哎呀。 【参考方案1】:

我将在 (log2(n) + 1) 步骤中给出解决方案。 +1是找重还是轻。如果你知道那部分,它将采取 log2(n) 步骤。

分成2堆。比如说,A 和 B。将它们相互称重,你会找到A<B(阅读,A 堆的重量小于 B 堆的重量)。拿一堆,比如说A,分开并称重。如果它们的重量相等,您会得到 2 个事实:

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

然后你继续堆 B。(你的+1 称重了。)

否则:

假币在A中 它比其他硬币轻。

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

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

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

【讨论】:

以上是关于分治算法在 O(logn) 中找到假币的主要内容,如果未能解决你的问题,请参考以下文章

数据结构分治算法求解假硬币问题

算法复杂度中的O(logN)底数是多少

分治算法总结(未完结)

O(nlogn) 分治算法找到可见线

python_分治算法贪心算法动态规划算法

分治算法-二分查找