数据结构查找算法

平均查找长度:

一次查找的长度:需要比较的关键字次数
平均查找长度ASL:所有查找过程中进行关键字的比较次数的平均值

顺序查找

一般线性表的顺序查找

缺点:当n较大时,平均查找长度较大,效率低
优点:顺序存储和链式存储都可以
ASL成功=(n+1)/2
ASL失败=n+1

有序表的顺序查找

ASL成功=(n+1)/2
ASL失败=n/2+n/(n+1)

有序表的顺序查找,查找成功的平均查找长度和一般线性表的顺序查找一样
每个元素查找成功的比较次数只与其位置有关,与其是否有序无关

折半查找

仅适用于有序的顺序表

折半查找可以用判定树描述,判定树是一颗平衡二叉树

每次把一个数组从中间节点分割,总是把数组分为节点数相差最多不超过1的两个子数组

  • 查找成功时的平均长度:从根节点到目的节点的路径上的节点数
  • 查找失败:从根节点到对应失败节点的父节点路径上的节点数

每个节点值均大于其左子节点值,且均小于右子节点值;
n个元素,n个非叶节点,n+1个叶节点

折半查找法查找到给定值的比较次数最多不会超过树的高度
ASL成功=(1/n)(11+2+2+…+h+2^(h-1))=log2(n+1)-1
h=log2(n+1)向上取整

时间复杂度O(log2n),比顺序查找效率高
仅适合顺序存储结构,不适合链式(需要方便的定位查找区域,要求线性表具有随机存取的特性)

分块查找

块内元素可以无序,块之间是有序的
计算的ASL看书p275

王道做题总结

7.2.4

  • 折半查找大部分情况下比顺序查找快,某些特殊情况(查找含1000个元素的有序表的第一个元素,顺序查找比较次数为1,折半查找比较次数将近10次)
  • 折半查找和二叉排序树的时间性能:有时不相同

二叉排序树的查找性能与数据的输入顺序有关,最好情况下的平均查找长度和折半查找相同,最坏情况是形成单支数,查找长度O(n)

  • 采用折半查找法查找不存在的元素,求最多最少的比较次数
    法1:
    画出查找过程中构成的判定树,最小的分支高度对于最少的比较次数,最大的分支高度对应最多的比较次数。(若出现长度为15的顺序表,判定树刚好是一棵满树,最多比较次数和最少比较次数相同)
    法2:
    公式,最大分支高度h=log2*(n+1)向上取整,由于判定树不是一颗满树,因此最小分支高度h-1
  • 折半查找查找成功或失败的平均查找长度
    画出判定树
  • 【题型】给二叉树,可能成为折半查找判定树的是
    方法:折半查找判定树实际上是一棵二叉排序树,他的中序序列是一个有序序列,可以在树节点上依次填上相应的元素,符合折半查找规则的树即为所求。
  • 分块查找中,索引项和索引块内部都采用折半查找,则查找效率最高
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构中的查找算法是用于在给定数据集合中查找指定元素的算法。以下是几种常见的数据结构查找算法及其代码示例: 1. 线性查找算法(Linear Search): 线性查找算法是最简单的一种查找算法,它逐个比较数据集合中的元素,直到找到目标元素或遍历完整个集合。 代码示例: ```python def linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 # 如果未找到目标元素,返回-1 # 示例用法 arr = [5, 2, 9, 1, 7] target = 9 result = linear_search(arr, target) print("目标元素在数组中的索引为:", result) ``` 2. 二分查找算法(Binary Search): 二分查找算法是一种高效的查找算法,要求数据集合必须是有序的。它通过将目标元素与数据集合的中间元素进行比较,并根据比较结果缩小查找范围,直到找到目标元素或确定不存在。 代码示例: ```python def binary_search(arr, target): low = 0 high = len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 # 如果未找到目标元素,返回-1 # 示例用法 arr = [1, 2, 5, 7, 9] target = 9 result = binary_search(arr, target) print("目标元素在数组中的索引为:", result) ``` 3. 哈希查找算法(Hash Search): 哈希查找算法利用哈希函数将数据映射到哈希表中的位置,通过查询哈希表来快速定位目标元素。 代码示例: ```python def hash_search(hash_table, key): hash_value = hash(key) % len(hash_table) if hash_table[hash_value] == key: return hash_value else: return -1 # 如果未找到目标元素,返回-1 # 示例用法 hash_table = [None] * 10 hash_table[3] = "apple" hash_table[7] = "banana" key = "banana" result = hash_search(hash_table, key) print("目标元素在哈希表中的位置为:", result) `

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值