- 0
- 0
- 约5千字
- 约 23页
- 2023-07-06 发布于广东
- 举报
项目九 实现查找指定商品 — 查找算法的应用及数据结构的选择
010203掌握有序或无序商品序列可以分别使用什么算法进行查找,并了解查找的速度与数据结构的选择是否相关。了解顺序查找法、二分查找法、索引查找法等的特点。学习目标理解用迭代法如何实现有序商品序列的二分查找以及用递归法如何实现有序商品序列的二分查找,并能区分两者。
01情景导入
导入通常网络购物平台中出售的商品非常多,要在众多商品信息中查找某一商品,若依次翻页比对,可能要花相当长的时间。因此,平台一般都会提供查找功能,如图 5-6 所示。程序员在编程实现查找功能时,要依靠好的算法和合适的数据结构以提高查找效率。
1. 采用顺序查找法查找商品图中所示的是从数组最后往前依次比较,当 i 为 7 时查找成功,此时共比较了 5 次。为编程方便,将待查元素 64 放在数组的 0 号空间,若序列中没有 64,那 i 会移到 0,查找失败。把 0 号空间称为监视哨,即 i 不可能越过 0 为负数。假设某店铺出售的某品种商品有 11 种不同的价格:15,83,19,88,37,96,64,5,80,18,92,要在其中查找价格为 64 的商品,最简单、最基本的方法是将商品价格序列存放在数组中,将待查元素 64 依次与数组中的每个元素一一比较,这种方法称为顺序查找法,如图 5-7 所示。
假设该店铺出售的另一品种商品有 11 种价格,按从小到大排序,价格为 5,13,19,21, 37,56,64,75,80,88,92。现要查找价格为 21 的商品在商品序列中的位置,可采用以下方法。(1) 使用迭代法。首先确定待查价格所在区间,先将整个区间一分为二,如图 5-8 所示。2. 体验使用二分查找法查找商品
用 low(序列的下界)指向第一个商品, high(上界) 指向最后一个商品, mid(中间位置)指向中间价格对应的商品,待查价格为 21,首先将 21 与 mid 指的中间位置的价格 56 比较,因 2156,则 21 必然在 56 之前的区间中,那么就在{5,13,19,21,37}中用同样的方法查找,如图 5-9 所示。继续将 21 与前半段{5,13,19,21,37}的中间元素比较,因 2119,则在 19 的后半段{21,37}中查找,如图 5-10所示。待查元素 21 与中间元素 21 比较相等,即找到了,查找结束,得到 21 在序列中的位置为 4。
二分查找中每次查找的区间是不同的,在不断缩小, 但查找方法是一样的,所以也可以用递归(recursion)来实现。假设有这样一种函数 BinSearch(r, low, high, k),其中 r代表存储数据元素的数组,low 代表区间最左边的数据元素的数组下标,high 代表区间最右边的数据元素的数组下标。k代表待查关键字。(2) 使用递归法。
针对图 5-11 所示价格有序商品序列,可以使用 BinSearch(r,1,11,21)调用上述函数,因为 21 小于当前区间中点第6 位置上的价格 56,所以取前半段, 即要去调用BinSearch(r,1,5,21),因为 21 大于当前区间中点第 3 位置上的价格19,所以取后半段,即要去调用 BinSearch(r,4,5,21)。此时中点第 4 位置上的价格等于待查商品价格 21,查找完成,但函数执行并未完成,位于最上层的 BinSearch(r, 1, 11, 21)并未获得结果。所以要一层一层返回 21 的位置(数组下标)4,直至函数 BinSearch(r,1,11,21)的值为 4 结束,如图5-12 所示。
1.假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:(1)画出描述折半查找过程的判定树;(2)若查找元素54,需依次与哪些元素比较?(3)若查找元素90,耐依次与哪些元素比较?练习题答案:
3. 采用索引查找法查找商品假设要在大量价格无序的商品中,查找价格为 22 的商品。可以通过建立索引表的方式查找,如图 5-13 所示。
其中,索引表由索引项组成。索引表中的每一个索引项都包含两项内容,一项是子表的特征值(索引值),另一项是地址(子表在主表中的开始位置)。例如,索引项(21 0)表示小于等于 21 的序列(子表 1)在数据表中的开始位置是 0,索引项(40 5)表示小于等于 40 大于 21 的序列(子表 2)在查找表中的开始位置是 5,以此类推。查找 22 时,先在索引表中查找到索引项(40 5),再在查找表中的子表 2 中从第一个位置开始查找,直到找到 22。查找时,总共比较 5 次。4. 分析查找算法与数据结构的关系使用不同查找法查找一个数据元素的比较次数是不同的,我们可以用平均查找
您可能关注的文档
- 细胞膜的结构与功能【知识精讲+拓展提升】 高考生物一轮复习 (全国通用).pptx
- Unit+1+Teenage+life+Reading+and+Thinking+课件【知识精讲+拓展提升】 高一英语人教版(2019)必修第一册.pptx
- Unit+1+Listening+and+Speaking+课件【知识精讲+拓展提升】 高中英语人教版(2019)必修第一册.pptx
- 光合作用的影响因素及应用课件【知识精讲+拓展提升】高一上学期生物人教版必修1.pptx
- Unit+5+The+value+of+money+Vocabulary+课件【知识精讲+拓展提升】 高中英语人教版(2019)+必修第三册.pptx
- Unit+6+Writing+workshop+课件【知识精讲+拓展提升】 高中英语北师大版(2019)选择性必修第二册.pptx
- 高三生物一轮复习课件【知识精讲+拓展提升】主要细胞器的结构和功能.pptx
- Unit+1+Listening+and+speaking【知识精讲+拓展提升】 高中英语人教版(2019)必修第二册.pptx
- 蛋白质工程的原理和应用课件【知识精讲+拓展提升】高二下学期生物人教版选择性必修3.pptx
- 高三生物一轮复习课件【知识精讲+拓展提升】 群落及其演替.pptx
原创力文档

文档评论(0)