静态查找
静态查找是指在一个不会频繁改变的数据集中查找目标元素的操作。在静态查找中,数据集的内容在查找过程中不会被修改。
顺序查找
也被称为线性查找,是一种简单直接的查找算法,用于在一个数据集中按顺序逐个比较元素,以找到目标元素的位置或确定其是否存在。时间复杂度也接近于 O(n)。
折半查找
也称为二分查找(Binary Search),是一种高效的查找算法,适用于已排序的数据集。它通过不断将查找范围缩小一半来快速地定位目标元素,因此其时间复杂度为 O(log n),其中 n 是数据集的大小。
其他查找(次优查找)
动态查找
指在一个数据集中进行查找操作,其中数据集可能会频繁地插入、删除或修改元素。
二叉排序树
二叉排序树(Binary Search Tree,简称BST)是一种特殊类型的二叉树,它具有以下性质:
- 每个节点都包含一个键值。
- 左子树上的节点的键值都小于根节点的键值。
- 右子树上的节点的键值都大于根节点的键值。
- 左子树和右子树也都是二叉排序树。
时间复杂化度为O(log n)。
二叉平衡树
这些树在插入和删除操作时会自动进行平衡调整,以保持树的平衡性,从而确保查找操作的高效性。在平衡二叉树中,任何节点的左子树和右子树的高度差(平衡因子)不会超过一个特定的阈值(-1,0,1)。
时间复杂度为O(log n)。
哈希表
哈希表用于实现键-值对的存储和快速查找。它通过将键映射到一个固定大小的数组(或桶)中的索引位置,从而实现高效的查找操作。哈希表的核心思想是通过哈希函数将键转换为索引,以快速定位值。
哈希函数
哈希函数接受一个键作为输入,然后生成一个整数索引,用于定位值在数组中的位置。好的哈希函数应该能够将键均匀地映射到不同的索引位置,减少冲突(多个键映射到同一索引)的可能性
主要函数方法:直接定址法,数字分析法,平方取值法,折叠法,除留余数法。
冲突处理法
由于哈希函数可能将不同的键映射到相同的索引位置,可能会导致冲突。冲突解决是处理这种情况的方法
开放地址法
寻找下一个可用的索引位置来解决冲突(线性探测法,二次线性探测法,)
链地址法
将相同地址的记录用链表链接起来
再哈希法
算法和效率
影响效率的三大因素:哈希函数是否均匀,冲突处理方法是否合理,哈希表的装填因子(填入表中元素的个数/哈希表的长度)。