Algorithm 在n+;中查找大小为2^k+;1的数组中的第三大元素;2k-3比较

Algorithm 在n+;中查找大小为2^k+;1的数组中的第三大元素;2k-3比较,algorithm,sorting,comparison,tournament,Algorithm,Sorting,Comparison,Tournament,“在n+2k-3比较中查找大小为(2^k+1)的数组中的第三大元素。” 这是我在算法课程期末考试中遇到的一个问题,我没有得到所有的分数。经过彻底的网络搜索,我仍然不确定正确的答案是什么 我意识到这是同一个问题的一个扩展版本,具有第二大问题,但要求的严格比较界限使问题变得棘手。 我还找到了一个数学解释来找到第K个元素,但是它太复杂了,我无法理解 表示数组大小为n=2^k+1 在考试中,我的答案是这样的: 我们将使用锦标赛树。首先,我们省略了任意元素。 然后构建包含2^k个元素的树。因此,树中有K个

“在n+2k-3比较中查找大小为(2^k+1)的数组中的第三大元素。”

这是我在算法课程期末考试中遇到的一个问题,我没有得到所有的分数。经过彻底的网络搜索,我仍然不确定正确的答案是什么

我意识到这是同一个问题的一个扩展版本,具有第二大问题,但要求的严格比较界限使问题变得棘手。 我还找到了一个数学解释来找到第K个元素,但是它太复杂了,我无法理解

表示数组大小为n=2^k+1

在考试中,我的答案是这样的:

我们将使用锦标赛树。首先,我们省略了任意元素。
然后构建包含2^k个元素的树。因此,树中有K个级别(log(2^K))

找到赢家需要我们进行n-2次比较

在输给胜利者的人中找出最大的因素。(K-1公司)

在决赛中输给失败者的人中找出最大的因素。(K-2公司)

我们将比较这些和我们在开始时遗漏的那个。(2个公司)

3个阵列中最大的一个是阵列中的第三个

总体比较:n-2+k-1+k-2+2=n+2k-3

我25分得了10分

我犯了两个错误。最重要的一点是,如果所需元素位于优胜者的子树中,我的答案将是错误的。此外,正确答案应该是我最后比较的3个答案中的第二大

我发现的另一个算法如下:
-构建锦标赛树并找到赢家(n-2)
-通过比较所有输家和赢家,找出第二大赢家。(也通过锦标赛树)(k-1)
-答案在最大的输家到第二大输家之间,输家到决赛中第一棵树上输家之间。(对数(k+1)+k-1-1)

-此解决方案假定我们遗漏的元素不是数组中最大的元素。如果是的话,我不知道它是如何运作的。 另外,我可能没有正确理解比较的数量

如果有更好的解释算法,我会很高兴找到。 我也很想知道,对于第1大类,是否还有更广义的一个(K被采用了…)。

提前感谢,, 伊泰

  • 在任意选择的元素的n-1=2k上构造一个竞赛树。(n-2项比较)

  • 在叶上,用未选择的元素替换所选元素的最大值。重建锦标赛树。(k)比较

  • 将丢失的元素的最大值取为新的最大值,如第二个最大值的算法。(k-1比较)


  • 我将把正确性证明留作练习。

    算法问题在这里完全有效;这就是“算法”标签的作用。好的,再次感谢。如果数组大小为2^k+1,您知道第L个最大元素是否也有算法吗?@ItayR您可以重复步骤2数次。当L变大时,这是次优的。