普林斯顿算法part1--堆--笔记 2018年4月20到4月27

Posted 喵喵喵喵?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普林斯顿算法part1--堆--笔记 2018年4月20到4月27相关的知识,希望对你有一定的参考价值。

这周学习了优先队列,最重要的操作是删除最大元素和插入元素。类包括创建优先队列的构造函数、向优先队列中插入一个元素、返回最大元素、删除最大元素、判断队列是否为空、返回优先队列中的元素个数。当二叉树的每个结点都大于等于它的两个子结点时为堆有序,那么根结点是堆有序的二叉树中的最大结点。使用二叉堆就可以用数组代替指针。

 

实现: 无序数组:用选择排序内循环删除最大元素,但使其有序会使后续删除更高效,但有序后,插入所需要的时间在最坏情况下为N。有序数组:类似栈的pop()操作。

 

关于堆的算法:如果堆的有序状态因为某个结点变得比它的父节点更大而被打破,那么就交换它和它的父节点,类推。如果堆的有序状态因为某个结点变得比它的两个子结点的一个或全部更小,就将它和它子结点中的较大的结点交换。如果要插入新的元素,可以插入到根结点后向下沉,。如果要删除根结点,就用最后一个元素代替根结点的位置,然后下沉

以上是关于普林斯顿算法part1--堆--笔记 2018年4月20到4月27的主要内容,如果未能解决你的问题,请参考以下文章

算法课笔记系列——近似算法(Part1)

手撕 part1

manacher算法笔记

2018年全国多校算法寒假训练营练习比赛(第三场) 小牛再战(博弈)

2018年8月7日 堆排序及机器学习

《C语言基础学习笔记》—— 黑马程序员 <Part1-4>