查找算法+思维导图

1.总体架构
在这里插入图片描述
查找算法+思维导图_第1张图片

2.线性查找
查找算法+思维导图_第2张图片

  • 顺序查找:
    适用范围:顺序表数组、链表
    查找过程:从表的一段开始,向另一端逐个按给定值kx与关键码进行比较。若找到,查找成功,并给出数据元素在表中的位置;若整个表检索完之后,仍未找到与kx相同的关键码,则查找失败。

  • 折半查找(二分查找):
    使用范围:查找表为顺序存储结构且表中的元素按关键码有序
    查找过程:取查找表中间的元素作为比较对象,若给定值与中间元素的关键码相等,则查找成功;若给定值小于中间元素的关键码,则在中间元素的左半区(不包括中间元素)查找;否则,在右半区查找;重复上述查找过程,直到查找成功,或当要检索的区域没有任何元素时查找失败。

  • 分块查找(按索引顺序查找)
    使用范围:关键码按块有序、附带索引表的顺序存储结构(类似字典)
    查找过程:分块查找将查找表按有序块分为若干子表,对每个子表建立一个索引项,再将索引项顺序存储组成索引表。索引表每一项包含对应子表中的最大关键码和对应块的起始地址。查找时,第一步根据给定值kx在索引表中进行顺序查找或折半查找确定在哪一块;第二步在块内进行顺序查找。

平均查找长度分析
算法 平均查找长度 时间复杂度
顺序查找 ASL=(n+1)/2 n
折半查找 ASL=(n+1)(log₂(n+1)-1)≈log₂(n+)-1 log₂(N)
分块查找 ASL=索引ASL+子表ASL=½(m+1)+½(n/m+1)
n是总表长,m是子表个数,当m=根号n是查找长度最小

3.散列表查找

查找算法+思维导图_第3张图片

  • 散列表查找

    算法描述:散列(哈希)查找是一存储策略,基本思想是确定一个散列函数F,计算

    F(关键码key)=site干关键码数组存放位置

    所以,只要知道key就可以根据F算出所在位置
    算法的实现有两个问题:

  • 散列函数要求:应该尽可能简单,转换速率高;转换后的散列地址大致均匀分布以减少控件浪费
    常见的散列函数:直接定址法F(key)=akey+b;除留余数法:F(key)=key%p;乘余取整法F(key)=B(A*key%1)后取整数

  • 冲突:进过散列转换后,不同的关键法码对应相同的地址。
    解决冲突的方法
    开放定址法:当关键码对应地址已有其他关键码时(冲突发生),按照一个新的函数去找下一个空的地址单元。
    拉链法:多个冲突的关键码对应的地址衍延伸出一些指针,用于存放多出来的关键码。
    公共溢出区:类似拉链法,只是将一个地址衍生出的链表改为一个数组存放冲突关键码。

4.树表查找

  • 二叉排序树
    算法描述:二叉排序树,左孩子小于父节点,右孩子大于父节点。
    查找过程:类似折半查找,给定kx和当前层节点的关键码比较,相等结束;大于关键码,去右支树;小于关键码,去左支树。若进入下一层则继续和当前层比较。
    二叉排序树的插入和删除操作需要按一定策略进行以保证二叉排序树的结构。
    详细信息:|二叉排序树定义、生成、增删改
    平均查找长度:因二叉排序树的形态不同而不同。
    单支树ASL(最坏情况):与顺序查找相同,(n+1)/2
    形态均匀的二叉树(最好情况):与折半查找相同,log₂(n)
  • 平衡二叉树
    定义:是对二叉排序树的更严格定义,设定一个平衡因子,树中所有field叶子节点的左右支树高度不能相差大于该平衡因子值。
    原因:避免出现二叉排序树平均查找长度的最坏情况。
  • B树
    定义:多个分支的树。
    假设父节点有K1,K2,K3三个关键码,则其拥有4个支树。一支树上所有关键码K3。
    第一层节点要有2以上的支树;
    其余层非叶子有m/2以上的支树;m是B树的阶数。

B树的扩展(B- B+ B*):其区别和联系

你可能感兴趣的:(C#,算法)