【发布时间】:2017-01-07 14:14:51
【问题描述】:
我正在阅读堆,它描述了您可以执行访问左孩子,RIGHT/LEFT孩子和PARENT的操作strong> 带有位移操作。虽然 Left 和 Parent 似乎微不足道,但我不确定正确的。我只需要添加一个吗?
这是本书的摘录:MIT 算法简介:
“类似地,RIGHT 过程可以通过将 i 的二进制表示左移一位然后添加 1 作为低位来快速计算 2i + 1”。
访问操作:
左:2*i
i<<1
右:2*i+1
(i<<1)+1
父母:i/2
i>>1
【问题讨论】:
-
怎么了?节点#3 的右子节点是节点#7,即
(3 << 1) + 1(注意<< 1,因为<< 2将N 乘以4) -
添加一个 1 作为书中的低位对我来说听起来比仅仅做一个 +1
-
这个问题对我来说仍然有点不清楚,但我试图解释
N*2和N*2 + 1背后的逻辑。如果您需要更多详细信息或解释,请告诉我 -
很明显......我只是没有对位移做太多,我想知道我的操作是否正确。
-
更新了答案,附有关于位移操作的注释