Data structures 将k个元素插入包含n个元素的二进制堆的时间复杂性
在已经包含n个元素的二进制堆中插入k个新元素的时间复杂度是多少?我有一个约束,我需要插入复杂度为0(k+logn)的k个元素Data structures 将k个元素插入包含n个元素的二进制堆的时间复杂性,data-structures,binary-heap,Data Structures,Binary Heap,在已经包含n个元素的二进制堆中插入k个新元素的时间复杂度是多少?我有一个约束,我需要插入复杂度为0(k+logn)的k个元素 提示:使用与堆构造类似的自下而上方法。这个问题没有简单的答案 二进制堆插入的平均复杂度为O(1),最坏情况为O(logn)。无论k,复杂性都将保持在该范围内,但完成操作所需的实际时间(不是时间复杂性;我相信您可能会混淆术语)将取决于实现、平台和风向 就时间而言,最接近一个具体答案的是插入k元素所用的时间充其量与k成线性比例,充其量与log(x)从N集成到k+N成线性比例。
提示:使用与堆构造类似的自下而上方法。这个问题没有简单的答案 二进制堆插入的平均复杂度为
O(1)
,最坏情况为O(logn)
。无论k
,复杂性都将保持在该范围内,但完成操作所需的实际时间(不是时间复杂性;我相信您可能会混淆术语)将取决于实现、平台和风向
就时间而言,最接近一个具体答案的是插入k
元素所用的时间充其量与k
成线性比例,充其量与log(x)
从N
集成到k+N
成线性比例。对于N
显著大于k
的情况,我们可以近似计算与k log N
成比例所需的时间
有关更多信息,请参见:那么为什么答案比简单的答案更复杂:O(k)表示平均值,O(k log(n))表示最坏情况?因为
k log(n)
与第一次插入所用的时间乘以k
,这是k OK的一个很好的近似值,所以我们有O(k log(n+k))@这比最坏的情况还要糟糕……你怎么知道插入的平均复杂度是O(1)
?看来这是最好的时机。最坏的情况确实是O(logn)
。要插入1个元素,需要logn时间。所以要插入k个元素,它应该是O(k logn)。