Algorithm 什么';寻找堆的父级和子级的方程式背后的直觉是什么?

Algorithm 什么';寻找堆的父级和子级的方程式背后的直觉是什么?,algorithm,Algorithm,查找堆的父级和子级的算法有: 家长:i/2 左子女:2i 右子女:2i+1 我试着在纸上画出数组表示,但我不确定我是否完全直观地理解了它。关键是元素是以广度优先的方式枚举的,索引是基于1的(它们从1开始,而不是0) 以3为例 2*3 = 6 left child 2*3+1 = 7 right child 将6和7除以2得到3,至少在进行整数除法的语言中是这样 继续以这种方式编号,你的直觉就会生效。通常,乘以2将始终给出左子级的索引。右子女是左子女的继承人(+1)。整数除以2也是出于

查找堆的父级和子级的算法有:

家长:i/2

左子女:2i

右子女:2i+1


我试着在纸上画出数组表示,但我不确定我是否完全直观地理解了它。

关键是元素是以广度优先的方式枚举的,索引是基于1的(它们从1开始,而不是0)

以3为例

2*3   = 6   left child
2*3+1 = 7  right child
将6和7除以2得到3,至少在进行整数除法的语言中是这样


继续以这种方式编号,你的直觉就会生效。通常,乘以2将始终给出左子级的索引。右子女是左子女的继承人(+1)。整数除以2也是出于同样的原因(它“丢弃”了余数。)

关键在于元素是以广度优先的方式枚举的,索引是基于1的(它们从1开始,而不是0)

以3为例

2*3   = 6   left child
2*3+1 = 7  right child
将6和7除以2得到3,至少在进行整数除法的语言中是这样

继续以这种方式编号,你的直觉就会生效。通常,乘以2将始终给出左子级的索引。右子女是左子女的继承人(+1)。整数除以2也是出于同样的原因(它“丢弃”了余数。)