【发布时间】:2018-09-22 20:31:54
【问题描述】:
我正在通过数组 arr 编写二进制堆。
除了叶子节点之外的每个节点都有两个孩子。
根可以在arr[0] 或arr[1]。
Why in a heap implemented by array the index 0 is left unused? 接受的答案是 arr[1] 更快。
但该答案下方的一条评论说,大多数实现都将 root 设置为 arr[0]。
将根放在arr[0] 有什么好处?
【问题讨论】:
-
节省空间?坦率地说,您发布的链接表明任何性能差异都会很小,这似乎回答了您的问题。
-
呃。节省 1 个节点的空间以使每个操作都变慢一点?如果是这样的话,我想我会把根放在
arr[1]。 -
如果你想从
1开始索引,去FORTRAN写代码,如果你想写正确的C,数组索引从0开始。 -
@DavidC.Rankin 有趣的是,在那些从 1 开始的语言中,生成的代码是从 0 开始的。编译器会为你做索引偏移。
-
我想人类从
1, 2, ..给打孔卡编号比给它们编号0, 1, ...更容易,因此该语言的创建者也将其应用于索引。回想一下,自从工程师在衬衫口袋里装计算尺以来,FORTRAN 就已经存在了……