资源简介 (共39张PPT)3.3数据的查找高中信息技术/教科版/选择性必修1目录1.创设情境,导入新课2.体验探究,初始查找3.讨论探究,实现查找4.自主探究,二分查找5.递归实现二分查找6.课堂小结1.创设情境,导入新课在网上商城众多的商品数据中,如何快速地查找到所需商品的相关信息呢 本节围绕“网上商城查找商品”项目展开学习,通过项目活动体验计算机查找数据的过程,理解算法与数据结构的关系。本节主要包含“根据品牌查找商品”和“根据价格查找商品”两个任务。2.体验探究,初始查找任务一 根据品牌查找商品 活动1体验顺序查找过程表3.3.1所示是某网上商城的签字笔销售数据,如何在表中查询到品牌为“得利”的签字笔销售数据呢 品牌 销量/盒 价格/元 评论数/条博士 80 66 108英雄 188 78 86永辉 236 58 186晨辉 200 46 190得利 56 68 50梅花 185 26 92凌梅 68 32 65巧虎 221 72 198表3.3.1签字笔销售数据从表格的第1行数据开始,先比较第1行数据中的品牌与“得利”是否相等,如果相等则说明查找成功;如果不相等则继续与下一个数据进行比较,直到所有数据都比较完毕。任务一 根据品牌查找商品 活动1体验顺序查找过程第 1次比较:“博士”与“得利”不相等,继续与下一个数据比较第 2次比较:“英雄”与“得利”不相等,继续与下一个数据比较。请根据这个思路,继续完成后面几个数据的比对过程。第3次比较: 。第4次比较: 。第5次比较: 。从第1个数据开始,按顺序逐一进行比较,经过5次比较,找到品牌为“得利”的签字笔销售数据。填一填“永辉”与“得利”不相等,继续与下一个数据比较“晨辉”与“得利”不相等,继续与下一个数据比较“得利”与“得利”相等,结束比较通过刚才的查找体验,你能分别给查找和顺序查找下个定义吗?查找(searching)就是在数据表中确定一个与给定值相等的数据若存在这样的数据则表示查找成功,否则表示查找不成功。顺序查找(sequential search )是一种从头开始逐个数据进行比较的查找方法。从数据表中第1个数据开始,逐个与要查找的数据进行比较,如果与要查找的数据相等,则查找成功;如果直至最后个数据,与要查找的数据都不相等,则查找不成功。顺序查找的过程3.讨论探究,实现查找任务一 根据品牌查找商品 活动2建立数据结构创建一个线性表对象alist,存放表3.3.1所示的签字笔销售数据对象。请补全下面的代码。填一填01. from linearList import LinearList #导人线性表02.alist= #创建线性表对象03.alist.appendItem(pen("博士",80,66,108))#添加签字笔数据元素04.alist.appendItem(pen("英雄",188,78,86))#添加签字笔数据元素05.alist.appendItem(pen("永辉",236,58,186))#添加签字笔数据元素LinearList ( )任务一 任务一 根据品牌查找商品 活动2建立数据结构06. alist.appendItem(pen( ))#添加签字笔数据元素07. alist.appendItem(pen( ))#添加签字笔数据元素08. alist.appendItem(pen( ))#添加签字笔数据元素09. alist.appendItem(pen( ))#添加签字笔数据元素10. alist.appendItem(pen( ))#添加签字笔数据元素"晨辉",200,46,190"得利",56,68,50"梅花",185,26,92"凌美",68,32,65"巧虎",221,72,198任务一 根据品牌查找商品 活动3顺序查找算法的设计与实现假设有n个签字笔销售数据,实现顺序查找的算法描述如下。(1) 从线性表中的第1个数据开始,依次进行操作 (2)(2)将当前数据与要查找数据进行比较,如果相等,则查找成功,返回数据在表中的位置,查找结束。如果不相等,则继续查找。(3) 查找失败。请将上述顺序查找的算法过程转化为流程图。任务一 根据品牌查找商品 活动3顺序查找算法的设计与实现根据上述算法,定义sequentialSearch(alist,key,item)函数,参数alist表示存储数据的线性表,key表示查找的关键词,参数item表示要查找的数据。请补全下面的代码。11.#顺序查找算法12. def sequentialSearch(alist, key, item):13.i=0 #初始化循环变量14.while i15.#判断第i个位置上的数据与查找的数据是否相等16.if getattr( ,key)==item:17.return #返回查找到的数据在表中的位置18.else:19.i=i+l #进行下一个数据比较19.return -1 #返回查找失败alist.getItem(i)i任务一 根据品牌查找商品 活动3顺序查找算法的设计与实现以表3.3.1中的数据为例,利用顺序查找法查找品牌为“得利”的签字笔,并显示查找到的签字笔销售数据。请补全下面的代码。21. result=sequentialSearch(alist, , ) #调用顺序查找函数22.print(“顺序查找的结果是:“)23. if result==-1:24.print("查找失败")25.else:print(getattr(alist.getItem(result),'brand'), ,, )#显示查找结果‘brand’‘凌美’alist.getItem(result),'sales'alist.getItem(result),'price'alist.getItem(result),'comments'假设有n个数据,利用顺序查找法,整个查找过程需要进行k(1kn)次数据比较,可以利用循环语句实现。4.自主探究,二分查找任务二 根据价格查找商品 活动1体验二分查找过程在表3.3.1中如何快速查找到价格是68的签字笔销售数据呢 品牌 销量/盒 价格/元 评论数/条博士 80 66 108英雄 188 78 86永辉 236 58 186晨辉 200 46 190得利 56 68 50梅花 185 26 92凌梅 68 32 65巧虎 221 72 198表3.3.1 按价格升序排列后的签字笔销售数据把签字笔销售数据表按照价格进行升序排列,找到中间项 (位于表中间位置 ) 数据,如果查找项与中间项相等,则查找结束。如果查找项比中间项大,可以把数据表中较小的那部分 (包括中间项) 排除了,因为如果查找项在中,那它一定在较大的那一半中。接下来,可以在较大的一半中重这个过程。如果查找项比中间项小,可以把数据表中较大的那部分包括中间项) 排除了,因为如果查找项在表中,那它一定在较小的那一半中。接下来,在较小的一半中重复这个过程即可。任务二 根据价格查找商品 活动1体验二分查找过程品牌 销量/盒 价格/元 评论数/条梅花 185 26 92凌梅 68 32 65晨辉 200 46 190永辉 236 58 186博士 80 66 108得利 56 68 50巧虎 221 72 198英雄 188 78 86表3.3.2 按价格升序排列后的签字笔销售数据任务二 根据价格查找商品 活动1体验二分查找过程第1次查找:确定数据表的中间项是价格为58的签字笔,如图所示。将查找项与中间项进行比较,68>58,排除较小的那部分和中间项。梅花26凌梅32晨辉46永辉58博士66得利68巧虎72英雄78中间项第1次查找任务二 根据价格查找商品 活动1体验二分查找过程第2次查找:在数据表较大的部分中继续查找,确定数据表较大部分的中间项是68,如图所示。将查找项与中间项进行比较,68=68,查找成功。博士66得利68巧虎72英雄78中间项第2次查找请根据这个思路,写出查找价格是46的签字笔销售数据的过程。任务二 根据价格查找商品 活动1体验二分查找过程第1次查找:确定数据表的中间项是价格为 58 的签字笔,将查找项与中间项进行比较,46<58,排除较大的那部分和中间项。梅花26凌梅32晨辉46永辉58博士66得利68巧虎72英雄78中间项第 2次查找:确定数据表的中间项是价格为 32 的签字笔,将查找项与中间项进行比较,46>32,排除较小的那部分和中间项。梅花26凌梅32晨辉46中间项第1次查找第2次查找第 3次查找:确定数据表的中间项是价格为46 的签字笔,46=46,查找成功。对于有序表的查找,从表的中间项开始比对,如果表的中间项匹配查找项,则查找结束。如果不匹配,就有两种情况: 表的中间项比查找项大,那么查找项只可能出现在前半部分;表的中间项比查找项小,那么查找项只可能出现在后半部分。重复上述查找过程,每次都会将比对范围缩小一半,直到查找结束。这种查找的方法,称为二分查找。二分查找概念任务二 根据价格查找商品 活动2二分查找算法的设计与实现假设有n种商品,实现二分查找的算法描述如下:(1)确定查找范围,每次查找如步骤 (2)和(3),如果没有完成则继续操作。第1次查找的范围是n个数据。(2) 取得查找范围的中间位置,将查找数据与中间位置的数据进行比对,如果二者相等则查找成功,返回数据在表中的位置。(3) 如果查找数据小于中间位置的数据则缩小查找范围至前半部分,如果大于中间位置的数据则缩小查找范围至后半部分。二分查找的算法步骤任务二 根据价格查找商品 活动2二分查找算法的设计与实现根据上述算法,定义binarySearch(alist,key,item)函数,参数alist表示按关键字key排序后的线性表,参数key表示查找的关键字,参数item表示要查找的数据。请补全下面的代码。填一填11.#二分找算法12. def binarySearch(alist, key, item):13.first=0 #标记查找范围起始位置14.last=alist.size()-1 #标记查找范围终点位置15.while first<=last:16.mid=( )//2 #取得查找范围的中间位置first+last任务二 根据价格查找商品 活动2二分查找算法的设计与实现填一填17.#判断中间项是否等于查找项18. if getattr(alist.getItem(mid),key)==item:19.#返回查找到的商品在线性表中的位置20. return mid21. else:22.#判断查找项是否小于中间项23.if item24.last=mid-1 #缩小查找范围至前半部分25.else:26.first= .27.return -1 #返回查找失败alist.getItem(mid),keymid+1任务二 根据价格查找商品 活动2二分查找算法的设计与实现以表3.3.1中的数据为例,利用二分查找法查找价格为68的签字笔销售数据,并显示查找到的签字笔销售数据。请补全下面的代码。28.bubbleSort(alist,'price') #调用冒泡排序函数29.result=binarySearch(alist, , #调用二分查找函数30.print("二分查找法查找的结果是:“)31.if result==-1:32. print("查找失败")33.else:34. print(getattr(alist.getItem(result),'brand'), ,35. , )‘price’68getattr(alist.getItem(result),'price')getattr(alist.getItem(result),'sales')getattr(alist.getItem(result),'comments')5.递归实现二分查找任务二 根据价格查找商品 活动3利用递归法实现二分查找利用递归法实现二分查找,定义recursionSearch(alist,key,item,first,last)函数,参数alist表示按关键字key排序后的线性表对象,参数key表示查找的关键字,参数item表示要查找的数据,参数first表示查找范围的起始位置,参数last表示查找范围的结束位置。利用Pvthon编写的代码如下,请补全下面的代码。01.#利用递归方法实现二分查找算法02. def recursionSearch(alist,key,item,first,last):03.if first<=last:04.mid=(first+last)//2 #取得中间项位置05.else:06.return -1 #返回查找失败任务二 根据价格查找商品 活动3利用递归法实现二分查找以表3.3.1中的数据为例,利用递归二分查找法查找商品价格为32的商品,并显示该商品的相关信息。请补全下面的代码。18.bubbleSort(alist,'price') #调用冒泡排序函数19.#调用递归二分查找函数20.result=recursionSearch(alist, , , , )21.print(“递归二分查找法查找的结果是:“)22.if result==-1:23.print("查找失败")24.else:25.#显示查找结果26.print(getattr( ,‘brand'), ,‘price’32alist.size( )0alist.getItem(result)getattr(alist.getItem(result),‘sales'任务二 根据价格查找商品 活动3利用递归法实现二分查找07.#中间项与查找项比较08.if getattr(alist.getItem(mid), key)==item:09.return mid #返回查找到的商品在线性表中的位置10.else:11.#判断查找项是否小于中间项12.if item13.#递归调用14.return recursionSearch(alist,key,item,first, )15.else:16.#递归调用17.return recursionSearch(alist,key,item, ,last)alist.getItem(mid)mid-1填一填mid+1当对一个有序表执行二分查找时,首先确定中间项。如果查找项比中间项小,可以在原来表的前半部分执行二分查找;如果查找项比中间项大,可以在后半部分执行二分查找。分析二分查找算法的过程可以发现它是把一个问题分解成更小规模的问题,先用一些方法解决这些更小规模的问题,然后重组整个问题来得到结果。6.课堂小结本节我们学习了查找的基本概念、顺序查找算法的基本思想和实现方法、二分查找算法的基本思想和实现方法、递归方法实现二分查找算法的基本思路。请同学们认真完成教材中的拓展练习哦!下节课见! 展开更多...... 收起↑ 资源预览