【问题标题】:Algorithm project issue算法项目问题
【发布时间】:2020-04-18 02:59:40
【问题描述】:

我目前正在在线学习计算机科学和项目管理,但是我真的被困在一个算法项目上。 到目前为止,我已经包含了所有需要的信息以及我的项目。 也许我选择了错误的算法? 任何帮助将不胜感激。


活动

您需要就以下算法问题撰写报告: 这个问题要求你在一组真硬币中找到一个假硬币。可以找到假硬币,因为它没有重量 和其他真币一样。它要么更轻,要么更重,但你事先并不知道。你唯一的方法 必须做出决定的是带有两个托盘的经典天平秤。您可以将一枚或多枚硬币放在一个托盘上,数量相近 在另一个托盘上,并确定哪个托盘有较轻的堆。例如,如果您只有三个硬币,那么取硬币 1 和 硬币 2 并称重。如果天平平衡,那么硬币 3 一定是奇数。如果秤不平衡,然后比较 硬币 1 和硬币 3。如果它们平衡,则硬币 2 必须是奇数,而如果它们不平衡,则硬币 1 必须是奇数 出去。 问题的关键是使用最少的比较次数找到假硬币。什么是最少的比较 3 硬币? 4个硬币? 5个硬币? 12个硬币?对于 N,任意数量的硬币?这个问题传统上用 12 表示 硬币。

在您的报告中包含以下内容:

  • 了解问题:描述您如何解决问题并举例说明以加深理解。
  • 了解算法过程如何解决问题:描述解决问题的一种或多种通用方法,包括您是如何踏上第一步的。
  • 制定算法:更详细地描述您的算法。
  • 评估您的算法的准确性及其作为解决其他问题的工具的潜力:描述您的想法 您的算法解决方案是正确的,以及为什么它可能比您的其他想法更好。

到目前为止我的报告:

算法设计

问题:

在一组真硬币中找出一个假硬币 我们被告知有 12 个硬币,我们需要确定哪个硬币是假的。 我们还对假硬币有了更深入的了解,这枚硬币的重量与其他硬币不同。这将向我们表明硬币更重或更轻,这是我们必须确定的。 最后我们知道,我们将不得不使用 2 个托盘秤来做出这个决定。

解决方案:

我的第一个想法是,我们得到了偶数个硬币,这在我看来是一种优势。 从这里我可以在每个托盘上放置偶数 6 个硬币。 其中一个托盘比另一个托盘要多,但这并没有定义托盘仍然有假硬币,因为我们不确定它的重量是更轻还是更重。 当我意识到这一点时,我意识到二进制算法方法在这种情况下不起作用,因为首先深入研究问题的中间不会做出任何决定。


第二个想法

我可以再次将硬币分成 2 组,每组有 6 个。 从这里我可以从第 1 堆中取出 1 个硬币,从第 2 堆中取出 1 个硬币。 如果它们的重量相同,则两个硬币都不是假的,可以从秤上取下。 如果 1 枚硬币更重,我们就知道其中一枚硬币是假的。 现在我们需要确定它是哪一个。 我们可以取出一枚硬币并用下一枚硬币替换。 我们知道下一个或最后一个硬币是真的,因此如果它们平衡,那么取出的硬币是假的,如果 他们不平衡,我们就知道剩下的硬币是假硬币。 现在我需要通过找出最好的,最坏的方法来确定这种方法是否是最好的方法 和平均情况。 最坏的情况是在我们得到最后 2 个硬币之前,所有硬币的重量都相同。

我们将分为几个步骤:

  • 首先从中间分裂(1)
  • 接下来比较硬币 1 和硬币 2 (2)
  • 接下来比较硬币 3 和硬币 4 (3)
  • 接下来比较硬币 5 和硬币 6(此处出现不平衡)(4) 取出硬币 5 并与硬币 4 交换

如果平衡, 那么硬币 6 是假的 否则硬币 5 是假的 Lg n = 12 = 4

【问题讨论】:

  • 您报告的当前草稿没有提及您向 Stack Overflow 寻求建议。我相信很多教育机构不赞成使用未注明出处的参考资料,所以不要忘记注明出处。
  • 这里你只检查6个硬币(不是12个)!但即使你修复了它,也要注意它的复杂性是O(n) 而不是lg(n),因为你需要最多(n/2) + 1 比较才能找到假币。因此,我的方法具有更好的复杂性。

标签: algorithm binary project computer-science


【解决方案1】:

解决您的问题的算法是遵循以下程序:

  • 将你的堆栈分成两半。

  • 再分成两半,放在天平上。

  • 如果这半部分包含假币,结果将不平衡。所以你可以选择右半边...

  • 重复此过程,直到您只有 2 或 3 个硬币。

  • 然后,您可以通过 2 次比较找到好硬币。

因此,假设您有 n 个硬币,您需要通过int(log2(n)) + 2 比较才能找到它。

我没有检查这种方法的最优性,但它必须至少接近最优性(最多 1 或 2 次额外比较)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多