算法——几种查找算法的比较和应用

几种基础查找方法的性能比较

算法(数据结构)查找(最坏)插入(最坏)查找命中(平均)插入(平均)插入(平均)是否支持有序性相关操作
顺序查询(无序联播)NNN/2

N

二分查找(有序数组)lgNNlgNN/2
二叉树查找(二叉查找树)NN1.39lgN1.39lgN

 

2-3树查找(红黑树)   2lgN         2lgN         1.00lgN         1.00lgN         是         
拉链法(链表数组)<lgN<lgNN/(2M)N/M
线性探测法(并行数组)clgNclgN<1.5<2.5

 

顺序查找:在表中查找一个不存在的键时,我们会将表中每个键和给定的键比较(N)。因为不允许出现重复的键,每次插入操作之前我们都需要这样查找一遍。

 

                推论: 向一个空表中插入N个不同的键需要~N²/2次比较。

二分查找:在N个键的有序数组中进行二分查找最多需要(lgN+1)次比较(无论是否成功)。插入一个新的元素在最坏情况下要访问~2N次数组。

                 推论: 向一个空表中插入N个不同的键需要~N²/2次比较。

二叉树查找:使用二叉查找树的算法运行时间取决于树的形状。最好的情况下含有N个节点的树是完全平衡的,每条空链和根节点的距离都为~lgN;最坏情况下,搜索路径上可能有N个节点(此时相当于顺序查找)。

相对于二叉查找树,散列表的优点在于代码更简单,且查找时间最优。

二叉查找树相对于散列表的优点在于抽象结构更简单(不需要设计散列函数),红黑树可以保证最坏情况下的性能且他能够支持的操作更多(如排名,选择,排序和范围查找)。

根据经验法则,大多数程序员的第一选择都是散列表,在其他因素更重要时才会选择红黑树。

    原文作者:红黑树
    原文地址: https://my.oschina.net/u/3786691/blog/1631514
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞