几种查找方式的对比:
算法 | 最坏查找时间 | 最坏插入时间 | 平均查找时间 | 平均插入时间 | 内存使用 |
顺序查找 | N | N | N/2 | N | 48N |
二分查找 | lgN | N | lgN | N/2 | 16N |
二叉树查找 | N | N | 1.39lgN | 1.39lgN | 64N |
红黑树 | 2lgN | 2lgN | 1.00lgN | 1.00lgN | 64N |
拉链法 | <lgN | <lgN | N/(2M) | N/M | 48N+32M |
线性探测法 | clgN | clgN | <1.5 | <2.5 | 32N~128N |
各种实现的优缺点对比:
顺序查找:(链表)
优点:适用于小型问题
缺点:大型符号表很慢
二分查找:(有序数组)
优点:最优的查找效率和空间需求,能够进行有序性相关的操作
缺点:插入操作很慢
二叉查找树
优点:实现简单,能够进行有序性相关的操作
缺点:没有性能上界的保证,链接需要额外的空间
红黑树
优点:最优的插入和查找效率,能够进行有序性相关的操作
缺点:链接需要额外空间
散列表
优点:能够快速地查找和插入常见类型的数据
缺点:需要计算每种数据的散列,无法进行有序性相关的操作,链接和空结点需要额外空间
根据经验法则:大多数程序员,第一时间选择的是散列表,在其他因素更重要的时候才会选择红黑树,当然这仅限于所介绍的几种算法。
符号表之所以是算法技术为现代计算机基础设计的一大贡献,是因为在很多实际应用中他都能够节省大量的成本,使得各个领域许多无法解决的问题都能够解决,也就是说查找算法极为重要。