您的位置:首页 > 理论基础 > 数据结构算法

各种数据结构的复杂度

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).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: