我试图主要理解在堆中插入新元素的大o和omega背后的推理。我知道我可以在网上找到答案,但我真的很想有一个彻底的理解,而不是在网上找到答案,只是盲目记忆。插入堆的时间复杂度
所以,举例来说,如果我们有如下的堆(数组形式表示)
[8,6,7,3,5,3,4,1,2]
如果我们决定要插入一个新的元素“4”我们的阵列看起来像现在这样
[8,6,7,3,5,3,4,1,2,4]
它将被放置在索引9中,因为这是一个基于第0个索引的数组,它的父元素将是索引4,它是元素5.在这种情况下,我们不需要做任何事情,因为4是< 5并且它不违反二进制堆属性。所以最好的情况是OMEGA(1)。
但是,如果我们插入的新元素是100,那么我们将不得不调用运行时间为O(Log n)的max-heapify函数,因此在最坏的情况下在堆中插入新元素需要O(Log n) 。
有人可以纠正我,如果我错了,因为我不知道如果我的理解或推理是100%?
是的,你是对的。但是你知道为什么插入堆O(log n),这是什么意思? – libik 2015-03-02 21:04:53
这将有助于,如果你能解释,我可能没有正确的理解...... – user1010101 2015-03-03 00:23:36