专题12 查找算法 学案(含解析)2025届高中信息技术.DOCXVIP

专题12 查找算法 学案(含解析)2025届高中信息技术.DOCX

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

专题12查找算法

学习目标

1.掌握对分查找核心算法思想,在一个[i,j]区间中,不断查找中间位置m,并不断更新查找区间(更新并画出左右端点),直到找到或区间不存在;

2.掌握利用退出语句、标志变量和循环条件不成立的结束循环两种方式;

3.掌握查找区间不存在时,根据查找键值来判断变量i、j、m的关系.

在一个区间为[i,j]的有序数据序列a中查找一个数据key,先确定区间的中间位置m,让key与a[m]比较,若两者相等,表示找到数据,结束查找;若中间位置的数a[m]不是要查找的数,把区间分为[i,m-1]和[m+1,j]两部分。若查找的数据在右半段,修改左边界i的值为m+1,继续往右查找;若查找的数据在左半段,修改右边界j的值为m-1,继续往左查找;修改边界后,若i大于j,则查找的区间为空,等式i=j+1肯定成立,则该数在序列中不存在。

(2024年1月浙江省选考)某算法的部分流程图如图所示,若n的值为7,key的值为78,数组元素a[0]至a[n-1]依次存放7,12,24,36,55,78,83,执行这部分流程后,输出c的值为()

A.0 B.1 C.2 D.3

重难点1二分查找的算法思想

若题目是要查找的数key已知,采用列表法比较快,用表格列出每次查找数组d的区间开始位置i、j和比较数的位置m及值a[m],模拟对分查找的过程。中间位置m的计算公式为m=(i+j)∥2和m=(i+j+1)∥2,当i+j为奇数时,两者没有区别;当i+j为偶数时,中间位置有两个,前者是中间偏左,后者是中间偏右。

例1在存储8个非降序元素的数组a中,查找key的代码如下,

key=int(input(″输入要查找的数据:″))

i=0;j=len(a)-1

f=[0]*len(a)

whilei=j:

m=(i+j)∥2

f[m]=1

ifkey==a[m]:

break

ifkeya[m]:

j=m-1

else:

i=m+1

print(f)

运行该程序,输出的结果可能是()

A.[1,1,0,1,0,0,0,0] B.[1,1,1,1,0,0,0,0]

C.[0,0,1,1,0,0,0,0] D.[0,0,0,1,1,0,1,0]

变式1有如下Python程序段:

importrandom

a=[A,#,B,C,D,E,#,F]

i=0

j=len(a)-1

x=random.choice(ABCDEF)#从字符串ABCDEF中随机选出一个字符

whilei=j:

mid=(i+j)∥2

ifa[mid]==x:

break

elifa[mid]==#ora[mid]x:

j=mid-1

else:

i=mid+1

print(a[mid])

则程序运行后,输出结果不可能为()

A.A B.B C.C D.D

例2运行如下Python程序段,若输入“B”,则变量cnt的值为()

a=[A,B,C,D,E,F,G]

ch=input(″输入A-G之间的字母:″)

cnt=0

forkeyina:

i,j=0,len(a)-1

whilei=j:

m=(i+j)∥2

ifa[m]==ch:

cnt+=1;break#终止while循环

ifa[m]==key:

break

elifa[m]key:

i=m+1

else:

j=m-1

A.1B.2C.3D.7

变式2有如下Python代码:

n=int(input(″请输入一个数:″))

a=[iforiinrange(n)]

c=0

foriinrange(1,n):

L=1;R=i-1

whileL=R:

m=(L+R)∥2

ifa[i]*a[m]==n:

c+=1

break

elifa[i]*a[m]n:

L=m+1

else:

R=m-1

print(c)

输入36,执行程序后,输出结果是()

A.1 B.2 C.3 D.4

重难点2极值查找

当一个非降序序列中存在多个连续相等的数据key时,若要查找最左边key,设置的查找条件为当a[m]==key时,还需移动j为m-1继续向左查找,当ij即i=j+1时,查找的区间不存在,此时j指向的就是第1个小于等于key的值;若要查找最右边的ke

您可能关注的文档

文档评论(0)

中小学教学资料 + 关注
实名认证
服务提供商

提供小学、初中、高中信息科技教案、试卷、课件等优质教学资源

1亿VIP精品文档

相关文档