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

孤街醉人 提交于 2020-01-08 23:30:08

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

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

N

二分查找(有序数组) lgN N lgN N/2
二叉树查找(二叉查找树) N N 1.39lgN 1.39lgN

 

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

 

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

 

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

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

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

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

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!