首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于零索引的Cormen最大堆算法

基于零索引的Cormen最大堆算法
EN

Stack Overflow用户
提问于 2011-06-23 02:16:55
回答 1查看 3.8K关注 0票数 2

我正在尝试实现算法书中给出的最大堆算法here书中的算法是

代码语言:javascript
复制
 MAX-HEAPIFY(A,i)
1   l<-LEFT(i)
2   r<-RIGHT(i)
3  if l<=heap-size[A] and A[l]>A[i]
4    then largest<--l
5    else largest<--i
6 if r<=heap-size[A] and A[r]>A[largest]
7    then largest <->r
8 if largest!=i
9    then exchange A[i]<->A[largest]
10        MAX-HEAPIFY(A,largest)

我的问题是,我的数组是从Zero.Where开始的,就像在书中一样,他们假设如果父代的索引是i,那么左子元素是2i,右子元素是2i+1,但这是当它们的索引从1开始时,在我的例子中,它是0,那么我应该如何计算左子元素和右子元素的索引?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-23 02:30:41

左边的孩子在2i+1,右边的孩子在2(i+1) = 2i+2。

您可以通过调用基于1的索引j,定义i=j-1并观察

代码语言:javascript
复制
j = i + 1
left + 1  = 2j = 2(i+1) = 2i+2
right + 1 = 2j+1 = 2(i+1) + 1

所以

代码语言:javascript
复制
left = 2i+1
right = 2(i+1)

(您还可以通过过度分配单个元素来省去一些麻烦。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6444547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档