【发布时间】:2020-11-24 21:10:03
【问题描述】:
我创建了一个实现最大二进制堆的数据结构。我试图找到插入需要 O(n) 和 O(nlogn) 时间的 2 个 n 数字序列。 这可能吗?
【问题讨论】:
-
按排序顺序和反向排序顺序插入它们。
标签: algorithm data-structures heap graph-algorithm
我创建了一个实现最大二进制堆的数据结构。我试图找到插入需要 O(n) 和 O(nlogn) 时间的 2 个 n 数字序列。 这可能吗?
【问题讨论】:
标签: algorithm data-structures heap graph-algorithm
让我试着重申你的要求;如有错误请指正。
所以 二进制堆 数据结构的时间复杂度为 logN 对应于 insertion。在max-heap中插入的过程如下,
所以对于你的问题,
你想要一个插入时间复杂度为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 进行比较。
【讨论】:
10 9 8 7 6 5 4 一样简单。唯一的要求是每个级别的所有节点都小于父级别的节点。一个简单的递减序列就可以满足这个要求。