【问题标题】:Insert N numbers in a maximum binary heap在最大二叉堆中插入 N 个数字
【发布时间】:2020-11-24 21:10:03
【问题描述】:

我创建了一个实现最大二进制堆的数据结构。我试图找到插入需要 O(n) 和 O(nlogn) 时间的 2 个 n 数字序列。 这可能吗?

【问题讨论】:

  • 按排序顺序和反向排序顺序插入它们。

标签: algorithm data-structures heap graph-algorithm


【解决方案1】:

让我试着重申你的要求;如有错误请指正。

所以 二进制堆 数据结构的时间复杂度为 logN 对应于 insertion。在max-heap中插入的过程如下,

  1. 这棵树是一棵完全二叉树,即除最后一层外,所有层都是满的。
  2. 插入树中最左边的位置。
  3. 如果节点小于父节点,则执行交换。
  4. 重复该过程,直到节点处于适当的级别。

所以对于你的问题, 你想要一个插入时间复杂度为O(n) 的n 数字序列。这意味着,每次插入都需要O(1) 或恒定时间。这意味着我们需要一个不需要heapify 操作的序列。我认为像下面这样的序列将消除对heapify 操作的需要。

[10, 8, 9, 4, 5, 6, 7 ]

对于第二个,您需要O(nlogn),这意味着每个操作都采用logn,这是用于插入的二进制堆的标准或平均性能。所以任何序列都应该这样做,

[ 1, 2, 3, 4, 5, 6, 7]

对于第 2 次以后的每一个,您需要与父节点和swap 进行比较。

【讨论】:

  • 对于 O(n),它就像 10 9 8 7 6 5 4 一样简单。唯一的要求是每个级别的所有节点都小于父级别的节点。一个简单的递减序列就可以满足这个要求。
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2023-03-16
  • 2013-02-25
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多