algorithm - 查找最大堆中第k个元素的位置

标签 algorithm position max heap

在这里做一些算法作业:(

我需要想出一个方程来找到最大堆数组中给定的第 k 个元素可能所在的所有可能位置。

i.e. the largest element (k=1) is at position n=1.
The second largest element (k=2) can be at positions n=2\3.
Element k=3 can also be in positions n=2\3.
...
The 6th largest element (k=6) can be in positions n=4 up to n=7.
etc.

没有真正想出可靠的计算。

如有任何意见,我们将不胜感激。

最佳答案

第 6 大元素可以远。极端情况是前六个元素是根和一系列右 child 。每个 child 都在节点 2n+1 处,其中 n 是父节点。最右边序列的索引序列是 1、3、7、15、31、63(又名 2^6-1)。其他较小的值填充在每个分支的左侧。

最早的位置是如果相同的值恰好是根的左子节点,而所有其他值都转到右分支:它出现在位置 2 中。同样,根据需要出现较小的值。

所以,可能值的范围是从 2 到 2^n-1。 您剩下的问题是确定剩余位置中的哪些位置可以包含该第 6 大元素。

画一棵适当深度的树——更好的是,只画 4 层深,并使用第 4 大元素。比如,使用 99、98、98、96,然后“其他”值可以是 1 到 11。在这棵树上有什么地方可以放置 96 而您不能 将其他数字排列成一棵合法的树?

再将树展开一层。 现在不能放置 96 的孔在哪里?

这会让你摆脱困境吗?

关于algorithm - 查找最大堆中第k个元素的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49638177/

相关文章:

c++ - 检查 3D 点是否位于 3D 柏拉图立体内部?

jquery - 响应地在另一个 Div 中将 Vert&Hori 居中,宽度为 :100% and padding-bottom:100%

SQL - 如何确定我选择的记录在哪个位置/订单/计数?

javascript - 查找字符在字符串中的位置,JS

python - 在 python 的 max 函数中传递 1 2 23 32 4 返回 4,为什么?

algorithm - 最有效的选择周围点最多的点的方法

python - 创建数组的算法或代码,规则是否符合规定?

algorithm - 具有自定义成本函数的最小成本最大流算法

numpy - 获取 numpy 数组中具有最大计数的每个值

php - 聚合 MYSQL 函数获取同一行中的值