一尘不染

在比较次数最少的情况下,找到数组中的第二大元素

algorithm

对于大小为N的数组,需要进行多少次比较?


阅读 347

收藏
2020-07-28

共1个答案

一尘不染

最佳算法使用n + log n-2个比较。将元素视为竞争者,锦标赛将对其进行排名。

首先,比较树中的元素

   |
  / \
 |   |
/ \ / \
x x x x

这需要进行n-1个比较,并且每个元素最多要进行n次比较。您将找到最大的元素作为获胜者。

第二大元素必定输给了获胜者(他不能输给其他元素),因此他是获胜者所面对的log n元素之一。您可以使用log n-1比较来查找其中的哪个。

通过对抗性论证证明了最优性。请参阅https://math.stackexchange.com/questions/1601http://compgeom.cs.uiuc.edu/~jeffe/teaching/497/02-selection.pdf
http://www.imada.sdu。 dk /〜jbj / DM19 /
lb06.pdf或https://www.utdallas.edu/~chandra/documents/6363/lbd.pdf

2020-07-28