各种数据结构的复杂度
2015-10-19 09:52
253 查看
1.二叉搜索树
定义:
1)搜索(与根元素比较大小,然后再决定左子树还是右子树,后面的找最大元素和找最小元素是一样的)、插入(像find一样找到合适的位置,进行插入)、删除、找最大元素、找最小元素的复杂度等于树高,期望
,最坏
(数列有序,树退化成线性表)。
删除怎么删除呢?
分为三种情形:
a.要删除的节点是叶子节点,则直接删除。
b.有一个孩子节点,则该节点可以在其父节点调整指针绕过该节点后被删除。如下所示:
c.如果被删除的节点,有两个儿子呢?则如下图所示:这点非常重要。切记,切记!!
2)构建二叉树:最差时间复杂度为
。例如,若该组数值是有序的(从小到大),则建造出来的二叉查找树的所有节点,都没有左子树。自平衡二叉查找树可以克服上述缺点,其时间复杂度为O(nlog n)
关于树或二叉树的一些结构上的定理:
a.一棵树由N个节点,N-1条边组成。
b.关于树的深度和高度的定义见下:
备注:高度是从下往上累加的,深度是从上往下累加的,从0还是从1开始累加看题目。对同一个树而言,树的高度和深度是相同的概念,但对于结点而言是不同的概念,其深度和高度是不同的,计算的话就严格按照定义来!
c.
d.
2.二叉堆
二叉堆是完全二叉树!!!
a.二叉堆的性质,对于位置i上的元素,左儿子在位置2i上,右儿子在2i+1上,父亲在i/2上。
b.插入操作,单次插入最坏为O(logN),平均来看为O(1)。
记住,插入操作,使用上滤策略!!!
c.DeleteMin操作
记住,用下滤操作。!!!
平均和最坏时间复杂度都为O(logN)
d.BuildHeap
构建堆的时间复杂度为O(N).
定义:
1)搜索(与根元素比较大小,然后再决定左子树还是右子树,后面的找最大元素和找最小元素是一样的)、插入(像find一样找到合适的位置,进行插入)、删除、找最大元素、找最小元素的复杂度等于树高,期望
,最坏
(数列有序,树退化成线性表)。
删除怎么删除呢?
分为三种情形:
a.要删除的节点是叶子节点,则直接删除。
b.有一个孩子节点,则该节点可以在其父节点调整指针绕过该节点后被删除。如下所示:
c.如果被删除的节点,有两个儿子呢?则如下图所示:这点非常重要。切记,切记!!
2)构建二叉树:最差时间复杂度为
。例如,若该组数值是有序的(从小到大),则建造出来的二叉查找树的所有节点,都没有左子树。自平衡二叉查找树可以克服上述缺点,其时间复杂度为O(nlog n)
关于树或二叉树的一些结构上的定理:
a.一棵树由N个节点,N-1条边组成。
b.关于树的深度和高度的定义见下:
备注:高度是从下往上累加的,深度是从上往下累加的,从0还是从1开始累加看题目。对同一个树而言,树的高度和深度是相同的概念,但对于结点而言是不同的概念,其深度和高度是不同的,计算的话就严格按照定义来!
c.
d.
2.二叉堆
二叉堆是完全二叉树!!!
a.二叉堆的性质,对于位置i上的元素,左儿子在位置2i上,右儿子在2i+1上,父亲在i/2上。
b.插入操作,单次插入最坏为O(logN),平均来看为O(1)。
记住,插入操作,使用上滤策略!!!
c.DeleteMin操作
记住,用下滤操作。!!!
平均和最坏时间复杂度都为O(logN)
d.BuildHeap
构建堆的时间复杂度为O(N).
相关文章推荐
- 数据结构 (五)c++函数和参数传递 按值传递 按引用传递
- 数据结构:字典树的基本使用
- 数据结构:字典树的基本使用
- Hadoop集群管理 Namenode的目录数据结构
- 数据结构之顺序表
- [题解+总结]20151017数据结构
- 数据结构与算法80道
- 第六周--数据结构之自建算法库之迷宫问题(用队列)
- 数据结构之图
- 第六周--数据结构之自建算法库之迷宫问题(用栈结构)
- 数据结构基本概念
- 中国大学MOOC-陈越、何钦铭-数据结构 列出连通集
- 第六周--数据结构之自建算法库之表达式求值(用栈结构)
- 【ShancoLove】带你看数据结构——第八课:二叉树概念
- 第六周--数据结构之自建算法库之链式队列
- 第六周--数据结构 项目之顺序环形队列
- 第六周--数据结构【线性表(二)链表】项目之链栈
- 数据结构——排序 (二)
- 第六周--数据结构【线性表(二)链表】项目之顺序栈
- 数据结构与算法之栈