作者LPH66 (ha(ruhi|yate)ism)
看板CSSE
标题Re: [问题] heap tree
时间Sat May 26 05:28:26 2007
※ 引述《akdsy (我很想你)》之铭言:
: 不知道在这里问对不对!
: 关於 max-heap !
: 要是给定一个数列,
: 求max-heap
: 法一) (根据我学过的方法)
: 先建完一个almost complete binary tree 之後,
: (就是由root向下把数列里的值,按顺序一个一个填进去 binary tree里)
: 再由最下面的以bottom-up的方式,
: 把大的摆上去,
: 小的放下来,
: 最终每个父节点都大於其子孙,(这样讲前辈懂我的意思吗?)
: 法二) (.....听说是参考答案)
: 每建一个node就以bottom-up的方式作heap,
: (跟法一最大的不同,就是他边建树边heap.....)
: 等到所有node都建完之後,
: 也就是答案。
: 以上!
: 请问哪一个方法是对的呢?
: 因为其结果不同,
: 所以让我困惑很久!
: 感谢您的解惑!
都对
法一较适用於将一个已经有值的阵列建成heap
法二较适用於一个一个加入的建立
你的问题关键点在相同的元素排成的heap也会有所不同
例如1~7 可以有这些种max heap:
7 7 7
/ \ / \ / \
5 6 3 6 6 5 等等
/ \ / \ / \ / \ / \ / \
1 2 3 4 1 2 4 5 3 2 4 1
每一个都是正确的max heap 尽管排法有所不同
--
"LPH" is for "Let Program Heal us"....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 192.192.197.115
1F:推 akdsy:这样说的话,要是题目给定一个数列,那法一是较好的作法呢? 05/26 09:27
2F:→ akdsy:感谢您的热情相助!!! 05/26 09:29
3F:推 AppleFox:通常都是用第一个方法吧 BTW 从n/2开始建heap就好了 05/29 23:09
4F:推 akalashnikov:这是 Binary Heap 的做法,还有 Binomial, Fibonacci 05/31 09:28