【发布时间】:2012-03-30 08:36:42
【问题描述】:
从 4 个不同元素中找到最大元素所需的最少比较次数是多少?我知道 5 个不同的数字是 6, floor(5/2) * 3;这是来自 clrs 的书。但我知道没有一个通用的公式可以找到这个,或者有吗?
编辑说明
这 4 个元素可以是任何不同的顺序(对于这 4 个元素的所有排列)我对在遍历元素时跟踪最大元素的计数技术不感兴趣,但比较像 > 或
【问题讨论】:
标签: algorithm comparison
从 4 个不同元素中找到最大元素所需的最少比较次数是多少?我知道 5 个不同的数字是 6, floor(5/2) * 3;这是来自 clrs 的书。但我知道没有一个通用的公式可以找到这个,或者有吗?
编辑说明
这 4 个元素可以是任何不同的顺序(对于这 4 个元素的所有排列)我对在遍历元素时跟踪最大元素的计数技术不感兴趣,但比较像 > 或
【问题讨论】:
标签: algorithm comparison
我知道它没有回答最初的问题,但我喜欢阅读 the minimum number of comparisons needed to find the smallest AND the largest number from an unsorted array 上这篇不太直观的帖子(附有证据)。
【讨论】:
对于元素 a、b、c、d
如果a>b+c+d,那么只需要比较一下就知道a最大了。
不过,你必须要走运。
【讨论】:
把它想象成一场比赛。通过比较两个元素,您有一个较松和一个赢家。
因此,如果您有 n 元素并需要 1 个最终获胜者,则需要进行 n-1 比较以排除其他元素。
【讨论】:
对于 4 个元素,最小。比较次数为 3。
一般来说,要找到最大的N 元素,您需要进行N-1 比较。这给你 4 对 5 个数字,而不是 6。
证明:
N-1 比较总是有解决方案:只需比较前两个,然后选择较大的并与下一个比较,选择较大的并与下一个比较等等......
不可能有更短的解决方案,因为该解决方案不会比较所有元素。
QED。
【讨论】: