各种数据结构的复杂度

来源:互联网 发布:盗墓笔记坐骑进阶数据 编辑:程序博客网 时间:2024/05/29 16:09

1.二叉搜索树

定义:



1)搜索(与根元素比较大小,然后再决定左子树还是右子树,后面的找最大元素和找最小元素是一样的)、插入(像find一样找到合适的位置,进行插入)、删除、找最大元素、找最小元素的复杂度等于树高,期望O(\log n),最坏O(n)(数列有序,树退化成线性表)。

删除怎么删除呢?

分为三种情形:

a.要删除的节点是叶子节点,则直接删除。

b.有一个孩子节点,则该节点可以在其父节点调整指针绕过该节点后被删除。如下所示:


c.如果被删除的节点,有两个儿子呢?则如下图所示:这点非常重要。切记,切记!!


2)构建二叉树:最差时间复杂度为O(n^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).


0 0