关闭

【算法系列-7】堆

193人阅读 评论(0) 收藏 举报
分类:

声明:

本节内容主要来自啊哈磊《啊哈!算法》

正文:

以前吧总搞不明白堆是个什么样的对象,总觉得是个高大上的存在。最近看了啊哈算法一书,感觉有点了解了,所以特别记录一下。

1.

首先来一颗树


树和图有什么区别?

答:树不包含回路。



2.

用一个一维数组就可以存储完全二叉树


如果完全二叉树的一个父节点编号为k,那么它左儿子的编号就是2*k,右儿子的编号就是2*k+1。

如果已知儿子(左儿子或右儿子)的编号是x,那么他父节点的编号就是x/2(取余)。

如果一颗完全二叉树有N个节点,那么这个完全二叉树的高度为log2N,简写logN。


举个例子:



3.

堆-神奇的优先队列

定义:

堆是一种特殊的完全二叉树



所有父节点都比子节点小的完全二叉树,我们成为最小堆(小根堆),反之称之为最大堆(大根堆)。

4.

堆排序

时间复杂度O(NlogN)

5.

【一道思考题的优化思路】

有一个字符序列,已知其中有一个数出现的次数超过了50%,请你找出这个字母;比如a、b、1、2、a、a、a,出现次数超过50%的字符是a。

6.

推荐

人民邮电出版社 《思考的乐趣》 && 《数学之美》


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:214158次
    • 积分:2799
    • 等级:
    • 排名:第12843名
    • 原创:31篇
    • 转载:181篇
    • 译文:0篇
    • 评论:40条
    文章分类
    最新评论