Algorithm 从一组n个球中查找有缺陷的球

Algorithm 从一组n个球中查找有缺陷的球,algorithm,Algorithm,类似于有缺陷的球问题,你会得到n个球,但是有未知数量的有缺陷的球和好的球。至少有一个好球和至少一个坏球。所有好球的重量相同,所有有缺陷的球的重量相同,但好球的重量比有缺陷的球轻,在天平上,将有缺陷的球与好球分开 我天真的尝试解决方案是将第一个球放在一个列表中,然后遍历整个列表,将它们相应地放在各自的列表中。然而,这显然是一个O(n)解。我想知道是否还有其他更有效的方法?在最坏的情况下,你找不到比O(n)称重更好的解决方案。有2^n种可能的结果(2^n种方式为每个球指定“好”或“坏”)。每个称重有

类似于有缺陷的球问题,你会得到n个球,但是有未知数量的有缺陷的球和好的球。至少有一个好球和至少一个坏球。所有好球的重量相同,所有有缺陷的球的重量相同,但好球的重量比有缺陷的球轻,在天平上,将有缺陷的球与好球分开


我天真的尝试解决方案是将第一个球放在一个列表中,然后遍历整个列表,将它们相应地放在各自的列表中。然而,这显然是一个O(n)解。我想知道是否还有其他更有效的方法?

在最坏的情况下,你找不到比O(n)称重更好的解决方案。有2^n种可能的结果(2^n种方式为每个球指定“好”或“坏”)。每个称重有三种可能的结果,因此
m
称重可以区分
3^m
可能的结果

因此,要区分所有2^n可能的结果,至少需要log3(2^n)权重,这等于n*log3(2)=O(n)

因此,在最坏的情况下,平凡解(取一个球,并将其与其他球进行称重)是渐进的最佳解


注意:这个证明基于与比较排序不能渐近优于O(n*logn)的证明相同的思想。

在最坏的情况下,你找不到比O(n)权重更好的解决方案。有2^n种可能的结果(2^n种方式为每个球指定“好”或“坏”)。每个称重有三种可能的结果,因此
m
称重可以区分
3^m
可能的结果

因此,要区分所有2^n可能的结果,至少需要log3(2^n)权重,这等于n*log3(2)=O(n)

因此,在最坏的情况下,平凡解(取一个球,并将其与其他球进行称重)是渐进的最佳解


注意:这个证明基于与比较排序不能渐近优于O(n*logn)的证明相同的思想。

在最坏的情况下,你找不到比O(n)权重更好的解决方案。有2^n种可能的结果(2^n种方式为每个球指定“好”或“坏”)。每个称重有三种可能的结果,因此
m
称重可以区分
3^m
可能的结果

因此,要区分所有2^n可能的结果,至少需要log3(2^n)权重,这等于n*log3(2)=O(n)

因此,在最坏的情况下,平凡解(取一个球,并将其与其他球进行称重)是渐进的最佳解


注意:这个证明基于与比较排序不能渐近优于O(n*logn)的证明相同的思想。

在最坏的情况下,你找不到比O(n)权重更好的解决方案。有2^n种可能的结果(2^n种方式为每个球指定“好”或“坏”)。每个称重有三种可能的结果,因此
m
称重可以区分
3^m
可能的结果

因此,要区分所有2^n可能的结果,至少需要log3(2^n)权重,这等于n*log3(2)=O(n)

因此,在最坏的情况下,平凡解(取一个球,并将其与其他球进行称重)是渐进的最佳解



注:此证明基于与比较排序不可能渐近优于O(n*logn)的证明相同的思想。

只需将第一个球放在一个列表中
-将其放在刻度的一侧,另一个放在另一侧。如果重量不同,你如何继续?如果重量相同,你如何继续?当你反复浏览列表时,最终你会发现一个球的重量与第一个不同,从那里你可以得出哪个列表有好球/坏球?你永远不会知道哪个是好球,哪个是坏球。但是你可以把它们分开……我对我的问题做了一个澄清,很抱歉忘记了:好球比坏球重。你只需做一个二进制搜索(如果你有10个球,在天平的每一边放5个球,然后选择更重的那一边,直到你做出1:1的决定),这是微软采访中的一个非常著名的问题。
只需将第一个球放在一个列表中
——将它放在天平的一边,另一个放在另一边。如果重量不同,你如何继续?如果重量相同,你如何继续?当你反复浏览列表时,最终你会发现一个球的重量与第一个不同,从那里你可以得出哪个列表有好球/坏球?你永远不会知道哪个是好球,哪个是坏球。但是你可以把它们分开……我对我的问题做了一个澄清,很抱歉忘记了:好球比坏球重。你只需做一个二进制搜索(如果你有10个球,在天平的每一边放5个球,然后选择更重的那一边,直到你做出1:1的决定),这是微软采访中的一个非常著名的问题。
只需将第一个球放在一个列表中
——将它放在天平的一边,另一个放在另一边。如果重量不同,你如何继续?如果重量相同,你如何继续?当你反复浏览列表时,最终你会发现一个球的重量与第一个不同,从那里你可以得出哪个列表有好球/坏球?你永远不会知道哪个是好球,哪个是坏球。但是你可以把它们分开……我对我的问题做了一个澄清,很抱歉忘记了:好球比坏球重。你只需做一个二进制搜索(如果你有10个球,在天平的每一边放5个球,然后选择更重的那一边,直到你做出1:1的决定),这是微软面试中的一个非常著名的问题。
只需将第一个球放在一个列表中即可