假设我们有一个包含n个元素的二进制堆,并希望插入更多元素(不一定是一个接一个)。这需要的总时间是多少?
我认为这是theta(n logn),因为一次插入需要登录。
答案 0 :(得分:5)
给定:n个元素的堆和n个要插入的元素。所以最后会有2 * n个元素。因为堆可以用2种方式创建1.连续插入和2.构建堆方法。这些构建堆方法需要花费O(n)时间来构造堆,这将在下面解释 How can building a heap be O(n) time complexity?。因此所需的总时间为O(2 * n),与O(n)
相同答案 1 :(得分:3)
假设我们得到了:
我们有以下插入属性:
因此对于每个案例,我们都有
WorstCase是什么时候,我们插入新的最小值,所以up-heap必须遍历整个分支。
BestCase就是这样,对于最小堆(顶部最小的堆),我们插入BIG(更新分支上最大)值(所以up-heap立即停止)。
您已经询问过包含n个元素的堆上的n个操作系列, 它的大小会增长
from n to 2*n
什么渐近是...
n=Θ(n)
2*n=Θ(n)
简化了我们的方程式。 (我们不必担心 n 的增长,因为它的增长是恒定的因素。)
因此,我们有“n次插入”操作:
P.S。要显示ThetaΘ,OmegaΩ符号,您需要安装/兼容UTF-8。
答案 2 :(得分:0)
它不是theeta(nlogn)...它的顺序(nlogn),因为一些插入可能需要少于精确的logn时间...因此对于n次插入,它将花费时间< = nlogn
<强> =&GT;时间复杂度= O(nlogn)