Java 增加所有叶元素值的两种解决方案
我想增加所有叶元素的值。所有索引均大于*楼层[n/2] 1) 为每个叶元素调用HEAP-INCREASE-KEY(A,i,KEY) 2) 将每个叶元素的键增加到新值,然后调用BUILD-MAX-HEAP(A) 哪种方式更有效?为什么 再加上一点额外的信息,每个对Max Heapify的调用都会花费O(lgn)个时间,而Build Max heap会进行O(n)个这样的调用。因此,运行时间为O(nlgn)。堆增加键的运行时间为O(lgn) 堆增加键(A,i,键) 如果你想知道max heapify是什么 MAX-HEAPIFY(A,i)Java 增加所有叶元素值的两种解决方案,java,algorithm,big-o,heapsort,Java,Algorithm,Big O,Heapsort,我想增加所有叶元素的值。所有索引均大于*楼层[n/2] 1) 为每个叶元素调用HEAP-INCREASE-KEY(A,i,KEY) 2) 将每个叶元素的键增加到新值,然后调用BUILD-MAX-HEAP(A) 哪种方式更有效?为什么 再加上一点额外的信息,每个对Max Heapify的调用都会花费O(lgn)个时间,而Build Max heap会进行O(n)个这样的调用。因此,运行时间为O(nlgn)。堆增加键的运行时间为O(lgn) 堆增加键(A,i,键) 如果你想知道max heapify
l=左(i)
r=右(i)
如果l A[i]
最大=l
其他最大的=i
如果r A[最大]
最大=r
如果最大不等于i
与[最大的]交换A[i]
MAX-HEAPIFY(A.最大)
第二个更有效
1) 为每个叶元素调用HEAP-INCREASE-KEY(A,i,KEY)
叶元素的数量为O(n)
。HEAP-INCREASE-KEY(A,i,KEY)
的时间是O(lgn)
。因此,第一个解决方案的时间复杂度是O(nlgn)
2) 将每个叶元素的键增加到新值,然后调用
BUILD-MAX-HEAP(A)
从头开始构建堆只需要线性时间。因此,第二种解决方案的时间复杂度是O(n)
一点额外的信息,每次打给Max Heapify的费用为0(lgn)
时间,而Build max heap进行O(n)个这样的调用。因此,运行时间
是O(nlgn)
如果你的家庭作业中提供了这一陈述,那么两种解决方案的时间复杂性是相同的。但是,您可以在
O(nlgn)
时间内构建最大堆。第二个堆效率更高
1) 为每个叶元素调用HEAP-INCREASE-KEY(A,i,KEY)
叶元素的数量为O(n)
。HEAP-INCREASE-KEY(A,i,KEY)
的时间是O(lgn)
。因此,第一个解决方案的时间复杂度是O(nlgn)
2) 将每个叶元素的键增加到新值,然后调用
BUILD-MAX-HEAP(A)
从头开始构建堆只需要线性时间。因此,第二种解决方案的时间复杂度是O(n)
一点额外的信息,每次打给Max Heapify的费用为0(lgn)
时间,而Build max heap进行O(n)个这样的调用。因此,运行时间
是O(nlgn)
如果你的家庭作业中提供了这一陈述,那么两种解决方案的时间复杂性是相同的。但是,您可以在时间而不是
O(nlgn)
time中构建一个最大堆。这本书中提供了该语句。因此,如果它们的索引都大于*floor[n/2],这不会影响任何内容?@GiBiT09我认为该条件适用于任何叶元素。@GiBiT09没有问题。稍后让我知道你的教授的想法:)@GiBiT09顺便说一句,最好添加语言标签,这样你的问题就可以得到更多的关注。这句话在书中提供了。因此,如果它们的索引都大于*floor[n/2],这对任何事情都没有影响?@GiBiT09我认为这个条件适用于任何叶元素。@GiBiT09没问题。稍后让我知道你的教授的想法:)@GiBiT09顺便说一句,最好添加语言标签,这样你的问题可以得到更多的关注。
if key<A[i]
error "new key is smaller than current key.
A[i]
while i>1 and A[Parent(i)]<A[i]
exchange A[i] with A[Parent(i)]
i=Parent()
A.heap-size = A.length
for i = *floor[A.length/2] downto 1
MAX-HEAPIFY(A,i)
l=Left(i)
r=Right(i)
if l<=A.heap-size and A[l] > A[i]
largest = l
else largest = i
if r<=A.heap-size and A[r] > A[largest]
largest = r
if largest not equal i
exchange A[i] with A[largest]
MAX-HEAPIFY (A.largest)