“查找”学习提纲(三)——总结
前言
“查找”学习提纲(三)——总结
系列文章
代码模板
查找方式的选择因素
- 目的:静态查找或动态查找
- 次序:无序或有序
- 数据结构:顺序存储或链式存储;线性结构或非线性结构
- 性能:低效或高效
线性查找
名称 | 适用 | 时间复杂度 | 空间复杂度 |
---|---|---|---|
顺序查找 | 线性表 | O(n) | O(1) |
折半查找 | 有序顺序表 | O(logn) | O(1) |
插值查找 | 有序顺序表 | O(logn) | O(1) |
斐波那契查找 | 有序顺序表 | O(logn) | O(m) |
稠密索引查找 | - | - | - |
分块查找 | 线性表 | O(logn)~O(n) | O(m) |
倒排索引查找 | - | - | - |
折半查找、插值查找和斐波那契查找
- 过程相似,分隔值的选择策略不同,可能影响性能:折半查找为加法和除法运算,插值查找为加、减、乘和除法运算,斐波那契查找为加法和减法运算
- 若数据规模大,关键字分布均匀,则性能:插值查找优于折半查找
- 平均性能:斐波那契查找优于折半查找
树型查找
名称 | 适用 | 时间复杂度 | 空间复杂度 |
---|---|---|---|
二叉排序树查找 | 动态表->二叉排序树 | O(logn)~O(n) | O(n) |
平衡二叉排序树查找 | 动态表->平衡二叉排序树 | O(logn) | O(n) |
红黑二叉排序树查找 | 动态表->红黑二叉排序树 | O(logn) | O(n) |
B树查找 | 动态表->B树 | O(logn) | O(n) |
B+树查找 | 动态表->B+树 | O(logn) | O(mlogn) | O(logmlogn) | O(n) |
折半查找和二叉排序树查找
- 过程相似
折半查找:
- 适用有序顺序表
- 二叉判定树唯一
- 插入和删除的时间复杂度:O(n)。n为数据规模
二叉排序树查找:
- 适用动态表
- 二叉排序树不唯一(关键字相同,插入顺序不同)
- 插入和删除的时间复杂度:O(logn)。n为数据规模(平均情况)
二叉排序树查找、平衡二叉排序树查找和红黑二叉排序树查找
- 一般性能:平衡二叉排序树查找和红黑二叉排序树查找优于二叉排序树查找
- 若插入和删除操作相对少,查找操作相对多,适用平衡二叉排序树查找
- 若插入和删除操作相对多,查找操作相对少,适用红黑二叉排序树查找
散列查找
名称 | 适用 | 时间复杂度 | 空间复杂度 |
---|---|---|---|
散列查找 | 查找性能要求高,记录关系无要求 | O(1) | O(m) |
总表
名称 | 适用 | 时间复杂度 | 空间复杂度 |
---|---|---|---|
顺序查找 | 线性表 | O(n) | O(1) |
折半查找 | 有序顺序表 | O(logn) | O(1) |
插值查找 | 有序顺序表 | O(logn) | O(1) |
斐波那契查找 | 有序顺序表 | O(logn) | O(m) |
稠密索引查找 | - | - | - |
分块查找 | 线性表 | O(logn)~O(n) | O(m) |
倒排索引查找 | - | - | - |
二叉排序树查找 | 动态表->二叉排序树 | O(logn)~O(n) | O(n) |
平衡二叉排序树查找 | 动态表->平衡二叉排序树 | O(logn) | O(n) |
红黑二叉排序树查找 | 动态表->红黑二叉排序树 | O(logn) | O(n) |
B树查找 | 动态表->B树 | O(logn) | O(n) |
B+树查找 | 动态表->B+树 | O(logn) | O(mlogn) | O(logmlogn) | O(n) |
散列查找 | 查找性能要求高,记录关系无要求 | O(1) | O(m) |
作者的话
- 感谢参考资料的作者/博主
- 作者:夜悊
- 版权所有,转载请注明出处,谢谢~
- 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
- 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
- 文章在认识上有错误的地方, 敬请批评指正
- 望读者们都能有所收获
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 夜悊的技术小宅!