查找算法的时间复杂度

平均情况下的运行时间增长数量级:

算法 查找 插入
顺序查找 N/2 N
二分查找 lgN N/2
二叉查找树 1.39lgN 1.39lgN
红黑树 1.00lgN 1.00lgN
B树
Hash查找(拉链法) N/2M N/M
Hash查找(线性探测) <1.5 <2.5

分析插入的运行时间:

  • 顺序查找:插入新元素前,需要对比所有元素,所以是N

  • 二分查找:插入新元素前,会将所有较大的元素向后移动一格(实际上应该是lgN+N/2,lgN是查找的时间)。对于静态表(不允许插入)来说,二分查找很有优势。

  • 二叉查找树:插入操作和查找未命中平均比查找命中需要一次额外的比较。

  • 红黑树:除了递归调用后的三条if语句,红黑树中插入的递归实现和二叉查找树相同。红黑树中根节点到任意节点的平均路径长度为1.00lgN。

    • PS:为什么提出红黑树?
    • 由于树的形状影响二叉查找树的效率,所以为了得到分布均匀的树,保持二叉查找树的平衡性,提出2-3树的数据结构,(为什么2-3树能在插入元素后继续保持平衡?由下向上生长,所有空链接到根节点的距离相等)但2-3树实现复杂,我们用红黑二叉查找树的简单数据结构来表达并实现它。基本思想是用标准的二叉查找树(完全由2-节点构成)和一些额外的信息(红链接将两个2-节点构成一个3-节点)来表示2-3树。定义是含有红黑链接并满足下列条件的二叉查找树:1.红链接均为左链接2.没有任何一个节点同时和两条红链接相连 3.该树是完美黑色平衡的。
  • Hash查找(拉链法):M条链表,每条平均长度为N/M。

  • Hash查找(线性探测法):在一张大小为N并含有M=a*N个键的基于线性探测的散列表中,命中和未命中的查找所需的探测次数分别为: 0.5+0.5/(1a)0.5+0.5/(1a)2 。我们用动态数组保证a<0.5。

你可能感兴趣的:(数据结构与算法)