摘要:
算法描述:功能:将一段数据转换为max-heap.(父节点不小于子节点的完全二叉树。)基本步骤:从某一子树开始进行下溯操作。开始的子树:Distance parent = (len - 2)/2; 最后的叶节点不必执行下溯。该子树执行完下溯后parent—;下溯:将空洞节点(这里是parent,即开始执行下溯的节点)与较大子节点对调,并持续下放,直到叶节点为止。SGI STL实现:// 以下這組 make_heap() 不允許指定「大小比較標準」。template <class RandomAccessIterator, class T, class Distance>void _ 阅读全文
摘要:
pop_heap和sort_heap操作的对象是max-heap,即父节点比子节点大的heap结构。 push_heap是将使插入新元素后仍满足max-heap结构(原来也是max-heap结构)。 make_heap是讲一段数据转化为max-heap. 因为每次pop_heap可获得heap中键值最大的元素,所以可持续对整个heap做pop_heap操作,每次将操作范围从后向前缩减一个元素,便... 阅读全文
摘要:
算法描述 置根节点于容器尾部,并调整heap结构使其满足max-heap. 算法的核心是根节点为空洞后heap结构的调整,而不是取最大值(最大值就是根节点)! 根节点为空洞后,为了满足max-heap结构,要割舍最下层最右边的叶节点,重新安插它的位置,即调整heap结构。 注:根节点即最大元素只是被置放于底部容器的最尾端,尚未被取走,可通过back()操作取其值,可通过pop_back()... 阅读全文
摘要:
算法描述 完全二叉树,父节点值比子节点大。(不保证左节点值大于右节点值。) 新元素插入时要满足的条件 为了满足完全二叉树的条件,新加入的元素一定要放在最下一层作为叶节点,并填补在由左至右的第一个空格,也就是把新元素插入在底层vector的end()处。 用到的技巧 这里有一个小技巧,如果用array存储所有节点,并且将array的#0位置的元素保留(即下标从1开始),那么当完全二叉树的某个节点... 阅读全文