当前位置: 首页 > 知识库问答 >
问题:

经典的假币谜题

长孙阳嘉
2023-03-14

这个问题与经典的硬币搜索类似,搜索一枚重量比x枚硬币轻的假币,但可能是假币的硬币数量有所增加。真硬币的重量都一样,假硬币的重量也一样。假硬币比真硬币轻。

我试图解决的那个的区别是当最多有2个假币时(即可能有,没有假硬币,1个假硬币或2个假硬币)。

我尝试的例子:我在这个问题的早期部分的尝试是弄清楚如何找到假币(如果有的话),当x=9#硬币时,但是你最多只能使用重量秤6次来弄清楚。

我首先将x = 9个硬币分成3个一组,然后比较各组以检查是否相等(如果所有组都相等,则表示没有假硬币,因为最多可能有2个假硬币,至少有0个假硬币。)然后从那里开始检查组1与组2的不等式,并再次检查组1与组3的不等式。组1、2或3中有两个假硬币的可能性,以及诸如组1、2、1、3或2、3的两个组中每个组有一个假硬币的另一种可能性。考虑到这些情况,我进行了比较,从而将各组的比较分成三组,直到我找到最后的几个硬币并找到假硬币。

问题是 __________:

在一堆硬币中,硬币的x数量为“

当我可以考虑所有情况并以较慢的速度比较每个情况时,编程这很容易。然而,当考虑称重的次数必须是O(对数基数2(n))时,它会变得更加困难。我考虑过使用硬币的数量来区分如何进行比较,例如检查硬币的x数量是奇数还是偶数,然后决定如何比较。如果是奇数,将x-1分成3组,并将最后一枚硬币放入第四组,然后继续螺旋式比较,最终找到假币,如果有的话。我还考虑过把100个硬币分成33个,然后比较3组,然后去掉1/3的硬币,在左边66个进行比较。我仍然无法解决如何设计一个通用算法程序来找到假币,然后如何找到一个通用公式来比较加权到对数基数2(n)的次数。

即使当n =质数/奇数时,也很难用适用于任何数n的通用程序来分割这些硬币并检查重量

为了澄清,我需要帮助弄清楚我之前的尝试/示例是否/如何应用于创建通用比较算法,该算法适用于任何数量的硬币,其中x

共有1个答案

田巴英
2023-03-14

因为O(log_2n)O(log_bn)对于任何碱基b都是相同的

在这里,让3枚硬币作为我们的基本案例。在权衡了所有3对硬币后(技术上,我们可以通过2个称重来逃脱),我们将确切地知道这3枚硬币中的哪一枚是轻的,如果有的话。所以如果我们把一堆11枚硬币分成3枚的三分之一,我们可以拿走这2枚剩余的硬币,从其他一堆借用任何其他硬币,进行3次称重,然后丢弃这2枚剩余的硬币,因为我们知道它们的状态。只要有O(log n)分裂阶段,处理剩余的硬币不会影响渐近性。

证明的唯一复杂部分是,在第一步之后,我们从“0、1或2个假”问题转到两个“正好1个假”子问题或“1或2个子问题”。假设您知道使用<code>1 log_3n</code>权值的原始“精确1假”问题的解决方案,那么证明应该相当相似。

“最多2个假货”和“1个或2个假货”的程序是一样的。给定n个硬币,我们将它们分成三组< code>floor(n/3)硬币(并像上面一样处理任何剩余的硬币)。如果n

如果它们的重量相同(A=B=C),就没有假硬币。

如果有一桩不一样,有两种情况:单桩比其他两桩轻或重。

如果它更轻(例如,A

如果异常值较重(例如,A=B,A

为了证明加权数的界限,您可能需要使用归纳法。每个递归级别最多需要6个权重,因此当可能剩余多达2个虚拟币时,所需权重数的上限公式是T(n)=max(T(n/3),2*(1log_3(n/3))6,其中1log_3(n/3)项是标准上限,具有完美的策略,可以在n/3硬币中找到一个光币(我们在所有部门中获得整数)。

 类似资料:
  • 我理解比特币挖掘需要花费很长时间来猜测名词,直到能够生成前导零的散列。 我有两个特别的问题 > 为什么比特币挖矿在计算上如此昂贵?如果目的只是选择一个随机的获胜者进行块放置,为什么不使用简单快速的工作证明算法呢?(一个例子可以是在0-1之间生成一个随机数,并且具有最小/最大值的那个赢得这一轮)。通过降低拼图的计算成本,我们应该在全球范围内节省大量电能。 选择一个谜题来生成前导零的散列有什么特别的好

  • 只是在这里遇到了这个简单的算法,从相同的称重硬币列表中找到奇数硬币(重达重)。 我可以理解,如果我们一次拿3个硬币,那么最小称重次数只有两个。 我是怎么找到答案的? 我人工试了一下一次称4套硬币,一次称3套硬币,一次称两个硬币,一次称一个硬币。 当然,只有当我们一次拿3个硬币时,最少的步数(两步)才是可以达到的。 问题是,你怎么知道我们必须拿3个硬币? 我只是想知道如何解决这个难题,而不是做所有可

  • 所以这是一个经典的问题,在一套硬币中找到一个假币,只使用一个称重天平。为了完整起见,这里有一个这样的问题的例子: 一个著名的例子有九个(或更少)物品,例如硬币(或球),它们的重量相同,除了一个,在这个例子中它比其他的更轻--一个假币(一个奇怪的球)。差别只有在秤上称重才能察觉--但只有硬币本身才能称重。仅用两个称重就能将假币隔离吗? 我们所处理的情况是,只有一枚硬币是假币,而且我们知道它是怎么回事

  • 本文向大家介绍PHP经典算法集锦【经典收藏】,包括了PHP经典算法集锦【经典收藏】的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了PHP经典算法。分享给大家供大家参考,具体如下: 1、首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半。 思路:多少行for一次,然后在里面空格和星号for一次。 2、冒泡排序,C里基础算法,从小到大对一组数排序。 思路:这题从小到大,第

  • 我的问题是,在这段代码中,最初我们将boolean isAnagram设为false,然后设置条件,但是我们得到的结果是错误的。因为很清楚,它们不是anagram,但是代码输出是“anagram”。

  • 本文向大家介绍使用清单和字典在Python中一起打印字谜,包括了使用清单和字典在Python中一起打印字谜的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,该程序使用list和dictionary查找和打印字谜。对于每个问题,我们都有不同的方法。尝试编写代码而不遵循本教程。如果您不能产生任何想法来编写逻辑,请执行以下步骤。 算法 让我们为上述算法编写代码。 示例 输出结果