对分查找算法及程序实现

合集下载

对分查找算法及程序实现

对分查找算法及程序实现

对分查找算法及程序实现一、设计思想对分查找是计算机科学中的一个基础算法。

对于一个基础算法的学习,同样可以让学生在一定的情境下,经历分析问题、确定算法、编程求解等用计算机解决问题的基本过程。

本堂课以一个游戏暖场,同时激活学生的思维,引导学生去探索游戏或生活背后的科学原理。

为了让学生在教师的引导下能自我解析算法的形成过程,本课分解了问题动作,找出问题的全部可能情况,在对全部可能情况总结归纳的情况下,得出对分查找的基础算法,最后在程序中得到实现,从而使学生建立起对分查找算法形成的科学逻辑结构。

二、教材分析本课的课程标准内容:(一)计算机解决问题的基本过程(1)结合实例,经历分析问题、确定算法、编程求解等用计算机解决问题的基本过程,认识算法和程序设计在其中的地位和作用。

(三)算法与问题解决例举 C 查找、排序与问题解决(2)通过实例,掌握使用数据查找算法设计程序解决问题的方法。

本课的《学科教学指导意见》内容:基本要求:1.初步掌握对分查找算法。

2.初步掌握对分查找算法的程序实现。

教材内容:第二章算法实例2.4.3对分查找和第五章5.4查找算法的程序实现,课题定为对分查找算法及程序实现,安排两个课时,第一课时着重是对分查找算法的形成和初步程序实现,第二课时利用对分查找算法解决一些实际问题的程序实现,本教学设计为第一课时。

从《课程标准》和《学科教学指导意见》对本课教学内容的要求来看,要求学生能从问题出发,通过相应的科学步骤形成对分查找的算法。

对学生来说,要求通过这一课时的学习能初步掌握或了解对分查找的前提条件、解决问题的对象,明确对分查找算法结构和对分查找的意义。

三、学情分析学生应该已经掌握程序设计的基本思想,掌握赋值语句、选择语句、循环语句的基本用法和VB基本操作,这节课学生可能会遇到的最大问题是:如何归纳总结对分查找解决不同情况问题的一般规律,鉴于此,在教学中要积极引导学生采取分解动作、比较迁移等学习策略。

对分查找

对分查找

28
35
46
58
60
i
mid
j
Key>d(mid) i=mid+1
Mid=(i+j)\2
若用一个数组d(1)到d(11)来存放升序的 元素序列,查找键Key为12
1 2 3 4 5 6 7 8 9 10 11
6
12
15
18
22
25
28
35
46
58
60
j i
mid Key=d(mid) 输出:Mid=2 Mid=(i+j)\2
若用一个数组d(1)到d(11)来存放升序的 元素序列,查找键Key为12
1 2 3 4 5 6 7 8 9 10 11
6
12
15
18
22
25
28
35
46
58
60
i
mid Key<d(mid)
j
j=mid-1
Mid=(i+j)\2
若用一个数组d(1)到d(11)来存放升序的 元素序列,查找键Key为12
对分查找(有序数组)
• 对分查找的基本思想:首先将查找键与有序数 组内处于中间位置的元素进行比较,如果中间 位置上的元素数值与查找键相同,表示找到, 否则根据数组元素的有序性,就可确定应该在 数组的前半部分还是后半部分继续进行查找。 在新确定的范围内,继续按上述方法进行查找, 直到获得最终结果。
• 对分查找是一种效率很高的查找方法,但被查 找的数据必须是有序的。
若用一个数组d(1)到d(11)来存放升序的 元素序列,查找键Key为12
1 2 3 4 5 6 7 8 9 10
11
6

对分查找算法及程序实现

对分查找算法及程序实现

在无序数组中查找
总结词
适用范围有限、准确度低
详细描述
在无序数组中查找是对分查找算法的一种变 种。由于数组是无序的,我们无法利用中间 元素将数组分成两部分。因此,在无序数组 中查找时,我们需要先对数组进行排序,然 后再使用对分查找算法。然而,排序操作的 时间复杂度为O(n log n),这使得整体时间复 杂度不再是O(log n)。此外,由于数组是无 序的,我们无法保证找到的目标元素是唯一 的或准确的。因此,在无序数组中查找的准
查找最接近的元素
总结词
在对分查找算法中,可以修改比较逻辑以查找最接近的元素。
详细描述
在对分查找算法中,可以通过修改比较逻辑来查找最接近的元素。具体来说,在 每次比较后,可以根据需要查找的元素与中间元素的差值来调整搜索范围,以尽 快找到最接近的元素。这样可以避免在数组中盲目搜索,提高查找效率。
查找是否存在某个元素
03
对分查找算法的Python实现
单个元素的查找
总结词
高效、快速
详细描述
对分查找算法是一种在有序数组中查找特定元素的搜索算法。通过将数组分成两半,然 后根据目标元素与中间元素的比较结果,排除一半的元素,从而缩小搜索范围,最终找 到目标元素。单个元素的查找是对分查找算法的基本应用之一,其时间复杂度为O(log
对分查找算法的原理
选取中间元素
在对分查找中,首先选取数组中间的元素,如果中间元素正好是要查找的元素,则搜索过程结 束;如果目标元素与中间元素不匹配,则根据目标元素与中间元素的比较结果,将搜索范围缩 小为数组的一半。
递归查找
在每次递归调用中,都选取剩余部分的中间元素,重复上述比较和缩减搜索范围的过程,直到 找到目标元素或搜索范围为空。

对分查找算法的程序实现教学设计(高中信息技术精品)

对分查找算法的程序实现教学设计(高中信息技术精品)

《对分查找算法的程序实现》一、案例主题:浙江教育出版社《算法与程序设计》(选修),《对分查找算法的程序实现》二、背景材料:(一)教学内容分析:1.对分查找算法是《算法与程序设计》(选修)《5.4节查找算法的程序实现》中的内容,是结合流程图实现程序的课型。

本课内容是选修教材中对所学语句结构和代码理解的一个总结性应用,具有很强的实用性。

2.本课内容应用性较强,具有一定的难度,体现在对流程图理解和代码实现的过程中,但应用丰富,拓展性强,有很高的研究价值。

(二)学生分析:通过前面一个月算法的学习,学生已经逐步熟悉visual basic6.0的编程环境,掌握了顺序结构、分支结构、循环语句的用法,在前期教学中学生已经初步了解算法基础及算法表示,抽象思维相对较好。

对分查找的算法对学生来说比较抽象,学生能否清晰的想象比较关键,所以学习难度比较大,需要教师合理的引导帮助其来解决问题。

本课中学生可能会出现的情况:1.掌握三种基本结构,但是在综合思想算法上缺乏一定的掌握度。

解决策略:先介绍对分查找思想,然后再引入流程图和程序。

2.刚学过顺序查找,给他们的感觉是实现简单,容易思想上放松。

解决策略:要让学生从根本上区别顺序查找,以免混淆算法。

3.因为对分查找比较抽象,如果直接以代码的形式出现,学生会难以理解和接受。

解决策略:以生动形象的例子进行导入然后再进行教学,提高课堂效率。

三、教学设计:(一)教学设计思想:对分查找在整个选修教材中是一个重点和难点,本课以生动的实例做为课堂导入,强调教学重点,以动态的指针演示,让算法思路更具体化,并且逐个击破难点并得以程序实现,以半成品加工策略提高课堂效率。

本课主要通过“思维导图”的形式和任务驱动等教学方式引导学生自主探究探索、解决问题,通过小组同学的探讨实现对本课知识的掌握,教师通过合理的引导帮助学生理解,创设学生自主和互助学习的良好气氛,以达到理解对分查找算法和实现相应程序的目标。

查找算法——顺序、对分查找

查找算法——顺序、对分查找

查找算法——顺序、对分查找在到学习、工作和生活中我们经常需要在一系列数据中查找出是否有某个特定数据,如在图书馆按书目查找某本书,在运动会上查寻某运动员的比赛成绩,在网上搜索信息、使用QQ查找好友等,这时就会用到查找算法了。

•问题提出一、采用何种方法进行查找?1.顺序查找顺序查找是最容易想到,也是最容易实现的一种查找算法,方法是将要找的数据与数组中的每个数据从第一个开始逐一进行比较,直到找到或者全部找完。

(1)顺序查找算法流程图(3)编写程序代码。

Dim d(1 To 8) As Integer ‘有8个数据Private Sub Command6_Click() '顺序查找Dim i As Integer, key As Integerkey = Val( _______ ) '获取查找的数据For i = 1 To _______ '依次查找If __________ Then '找到了数据Label5.Caption = "在数组的第" + Str(i) + "个位置"Exit For ‘中断当前For循环End IfNextIf i =_______ ThenLabel5.Caption = "在数组中没有找到数据" + Str(key)End Sub如果数组中有n个元素,那么顺序查找的平均查找次数是(n+1)/2次,有没有效率更高的查找算法呢?对分查找2.对分查找算法:首先将查找键与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素内的数值与查找键不同,根据数组元素的有序性,就可确定应该在数组的前半部分还是后半部分继续进行查找;在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。

对分查找的前提条件数组中的数据是已经排序的。

对分查找算法流程图(3)编写程序代码。

Private Sub Command4_Click() '对分查找Dim i As Integer, j As Integer, key As Integer, m As Integer Dim nc,flag As Integerflag=0 ‘flag 用于标志是否找到 key = Val(Text2.Text) '输入查找的数据 i = 1 j = 18nc = 0 '查找次数nc Do While i <= j '对分查找 nc =—————— '查找次数增加1m = __________ ‘求中间下标,若有小数,只保留整数 If __________Then ‘找到了 Label6.Caption = "在数组的第" + Str(m) + "个位置,共查找了" + Str(___) + "次"flag=_____Exit do ‘强制退出循环’End IfIf key < d(m) Then '未找到,继续查找 j=__________ Elsei = __________ End IfLoopIf flag==____ thenLabel6.Caption = "在数组中没有找到数据" + Str(key) + ",共查找了" + Str(nc) + "次"EndifEnd Sub使用对分查找,每次都把规模缩小一半,效率比顺序查找要高,但在进行对分查找前,需要将它排好序。

对分查找算法及程序实现27页PPT

对分查找算法及程序实现27页PPT

36、自己的鞋子,自己知道紧在哪里。——西班牙
37、我们唯一不会改正的缺点是软弱。——拉罗什福科
xiexie! 38、我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯
39、勿问成功的秘诀为何,且尽全力做你应该做的事吧。——美华纳
40、学而不思则罔,思而不学则殆。——孔子
对分查找算法及程序实现
46、法律有权打破平静。——马·格林 47、在一千磅法律里,没有一盎司仁 爱。— —英国
48、法律一多,公正就少。——托·富 勒 49、犯罪总是以惩罚相补偿;只有处 罚才能 使犯罪 得到偿 还。— —达雷 尔
50、弱者比强者更能得到法律的保护 。——

对分查找算法

对分查找算法
为个性化教学所做的调整:在浙教版选修教材《算法与程序设计》中,本节内容是在两节课中,第一节课只讲理论,后一节课再讲算法实现,这中间又隔了很多节课,这样对学生学习本节课很不利,于是我对本节课做了整合,将两部分内容放在一起,这样,有了对分查找算法理论后,接着就开始对分查找算法的实现,顺应了学生认知规律。整个课堂按照一条主线:导入、小试牛刀、合作探究、拓展提升、大显身手,采用一系列环环相扣的任务将各知识点紧密节课,并提供微视频、自制小程序、ppt自主学习课件、在线程序调试等手段供学生自主学习时候使用,学生在学习时,需要则用,不需要则继续学习下一部分,满足每位学生的学习需求。
教学设计
教学主题
对分查找算法
一、教材分析
本节内容主要讲述对分查找算法的思路以及实现对分查找算法,最后用对分查找算法去解决问题。本节是高中信息技术选修模块《算法与程序设计》第二章算法实例和第五章算法实例的程序实现涉及到对分查找算法的内容的整合,重点是对分查找思路的理解,在程序实现部分要求不高,只需要掌握关键语句即可。采用的教材是浙江教育出版社的《算法与程序设计》。
指导组小组内同学完成对分查找的核心代码
自主探究,小组合作
网站提交
学生成果展示
教师分析代码
学生听讲、分析,然后修改自己代码
极域电子教室“广播功能”;网站提交
四、大显身手:在教学网站上网页上调试程序对分查找实现
指导学生网页上调试程序对分查找实现,并根据学生提交运行情况,进行反馈
自主探究,小组合作
网站提交
教与学方式的创新:新课程改革要以学生为主体,教师为主导。在设计这节课《对分查找算法》的时候,我的思路就是让学生去做学生是课堂的主角,让学生在自主探究中去学习,而教师是在学生体验过程中的“导演”,在课堂上为学生提供微课、自主学习课件等丰富的学习资源,通过环环相扣的任务去让学生去体验,这样让每一名学生去快乐地去学习!

对分查找算法及程序实现

对分查找算法及程序实现
这样,除了出现情况(2),在通过一次比较后,新的查找范围 将不超过上次查找范围的一半。
元素 下标
1 10
(1)过程:
2 15 3 17
4 18
5 22
6 27
Key=52
7 35
数组d(i ):8 9Fra bibliotek45 48
10 52
11 65
12 67
13 72
14 85
15 97
16 98
i=1 我们用变量 I和J记录所 要查找范围的起始和终止 位置
(1)若key<d(m),查找键小于中点d(m)处的数据。由数组d中的 数据的递增性,可以确定:在(m,j)内不可能存在值为key的数据 ,必须在新的范围(i,m-1)中继续查找;
(2)key=d(m),找到了需要的数据; (3)key>d(m),查找键大于中点d(m)处的数据。由数组d中的数 据的递减性,可以确定:在(i , m)内不可能存在值为key的数据,必 须在新的范围(m+1,j)中继续查找。
数组d( ): Key=52
我们用变量 I和J记录所 要查找范围的起始和终止 位置
下标 元素
1 10
2 15
3 17
4 18
5 22 6 27 7 35 8 45 9 48 10 52 11 65 12 67 13 72 14 85 15 97 16 98
第2次比较后:
Key<d(m)
查找范围应该
Private Sub Command1_Click() i = 1: j = n Do While i <= j m = (i + j) \ 2 If d(m) = Key Then '输出结果,退出查找(代码略)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例题:对分查找
1、首先在通用声明事件里定义数组d变量为全局变量。 Dim d(1 To 10) As Integer
2、程序一运行,生成10个3位整数,显示在标签1中。 Private Sub Form_Load() Label1.Caption = "" Randomize For i = 1 To 10 d(i) = Int(Rnd * 101 + 100) Label1.Caption = Label1.Caption & d(i) & " " Next i End Sub
数组d( ): Key=52
下标
元素
1 2 3
10 15 17
4
我们用变量 I和J记录所 要查找范围的起始和终止 位置
18
22 27 35 45
5 6 7 8 9 10
48
52 65 67 72
i=9
第2次比较后: Key<d(m) 查找范围应该 变成d(9)~d(11)
11
12 13 14 15 16
对分查找程序的基本框架: Private Sub Command1_Click() i = 1: j = n Do While i <= j m = (i + j) \ 2 If d(m) = Key Then '输出结果,退出查找(代码略) ElseIf Key < d(m) Then j=m-1 Else i=m+1 End If Loop End Sub
设置第一数和第n数 求中间数
1.下列有关查找的说法,正确的是 A.顺序查找时,被查找的数据必须有序 B.对分查找时,被查找的数据不一定有序 C.顺序查找总能找到要查找的关键字 D.一般情况下,对分查找的效率较高
( D )
2.某网站报名参加免费三亚游的会员序列号有:101、135、 238、342、450、558、633、708、846、910。采用对分查 找,查找到序列号为846号网友信息的过程中,依次被查 找的序列号是 ( A ) A.450、708、846 B.450、708、910、846 C.558、708、846 D.558、708、910、846
12 13 14 15 16
3.对分查找算法的表示 使用对分查找在数组变量d中查找key,用自然语言描述的算 法如下: (1)(确定初始查找范围)i←1,j←n。 (2)(是否能继续查找?)如果i≤j,那么转到(4)。 (3)(找不到)输入出结果0,算法结束。 (4)(计算中点位置)m←(i+j)\2。 (5)(相等?)如果d(m)=key,那么转到(7)。 (6)(修改查找范围)如果key<d(m),那么j←m-1;如果 key>d(m),那么i←m+1,转到(2)。 (7)(找到)输出结果m,算法结束。
7.使用对分查找在已排序的数组d(数组元素d(l)≤d(2) ≤…≤d(n))中查找key的算法流程图如下。其中①、②框中的 内容分别是 ( C )
A.①j←m+1 ②i←m+1 B.①j←m—1 ②i←m-1 C.①j←m-1 ②i←m+1 D.①j←m + 1 ②i←m-1
8.有两组数据: ①54、31、43、12、8、73、56、34、89、60、23、67 ②87、83、75、70、63、59、55、37、33、21、17、7 下列有关查找方法描述不正确的是 ( C) A.①可以直接使用顺序查找 B.②可以直接使用对分查找 C.①可以直接使用对分查找 D.②可以直接使用顺序查找 9.某查找算法的部分VB程序代码如下: t = False i=0 Do While i < 7 And t = False i=i+1 If d(i) = Key Then t = True Loop If t = False Then i = 0 数组元素d(1)到d(7)的数据依次为“8、9、5、8、4、7、 8”,当变量key的值为8时,运用该算法处理后,变量i的 值是 ( A ) A.1 B.2 C.4 D.7
m=fix((i+j)/2)
=12
85
97 9815 17
Key=52
3
4
5 6 7 8 9 10
18
22 27 35 45 48 52 65 67 72 85 97 98
第3次比较后: Key=d(m) 找到了 i=9 m=fix((i+j)/2) j=11 =10
11
这样,除了出现情况(2),在通过一次比较后,新的查找范围 将不超过上次查找范围的一半。
下标
元素
1
10 15 17
i=1
(1)过程:
2 3 4 5 6 7 8
我们用变量 I和J记录所 要查找范围的起始和终止 位置
18
22 27 35 45 48 52 65 67
Key=52 数组d(i ):
9
10 11 12 13 14 15
4、在文本框1中输入要找的数,单击“对分查找”按钮,在文本框2中 显示找到的结果。 Private Sub Command2_Click() Dim key As Integer, m As Integer, i As Integer, j As Integer key = Val(Text1.Text) i = 1: j = 10 Do While i <= j m = (i + j) \ 2 If d(m) = key Then Text2.Text = "找到了,是第" & m & "个" Exit Sub End If If d(m) < key Then i=m+1 Else j=m-1 End If Loop Text2.Text = "找不到" End Sub
3.某电子图书馆网站有10万本图书记录(已索引排序),假设 从中取出一条记录并与待查找项进行比较所花时间为10毫 秒,则用对分法在该系统中查找任意一本指定图书最多花 费的时间约为 ( D ) A.100万毫秒 B.50万毫秒 C.10毫秒 D.170毫秒 4.某数组有7个元素,依次为158、234、369、478、552、 697、748。若采用对分查找法在该数组中查找数据748, 需要查找的次数是 ( C ) A.1 B.2 C.3 D.4
相应的查找部分程序段如下:
Dim a(1 To n) As Long Dim b(1 To n) As Single Private Sub Command1_Click() Dim x As Long, i As Long, j As Long, m As Long, f As Boolean x = Val(Text1.Text) i = 1: j = n: f = False ' 设账号总数为n Do While (i <= j) And Not f ① If x = a(m) Then f = True ElseIf x < a(m) Then j=m-1 Else ② End If Loop If f Then Label2.Caption = “此账号余额为” + Str(b(m)) + “元” Else Label2.Caption = “找不到此账号,请重新输入” End If End Sub Private Sub Form_Load() ' 此过程用于对数组a和数组b进行初始赋值,代码略 End Sub
m= (i+j)\2 或m=fix((i+j)/2)
=8 =8
72
85 97 98
第1次比较后: Key>d(m) 查找范围应该 变成d(9)~d(16)
16
j=16
Int、Fix 函数:
返回数字的整数部分。
Int函数和 Fix 函数都删除 number 参数的小数部分并 返回以整数表示的结果。 Int 和 Fix 函数的区别在于如果 number 参数为负数时, Int 函数返回小于或等于 number 的第一个负整数,而 Fix 函数返回大于或等于 number 参数的第一个负整数。 例如,Int 将 -8.9 转换为 -9,而 Fix 函数将 -8.9 转换 为 -8。
3、单击“升序排序”按钮,按从小到大进行排序,并将结果 显示在标签2中。 Private Sub Command1_Click() For i = 1 To 9 Min = d(i) For j = i + 1 To 10 If d(j) < Min Then Min = d(j) t = d(i): d(i) = d(j): d(j) = t End If Next j Next i Label2.Caption = "" For i = 1 To 10 Label2.Caption = Label2.Caption & d(i) & " " Next i End Sub
5.在有序单词序列:As、Book、Door、English、Floyd、 Good、Hello、Sun中,用对分查找法找到单词“Good”所 需要的查找次数是 ) B ( A.1 B.2 C.3 D.4 6.某8位男生的肺活量数据放在数组元素a(l)到a(8)中,其数 据依次为“3205、3408、3471、3498、3621、3829、4233 、4540”。使用对分查找,设定查找键key,若第一个被访 问到的数据是3498,小于key值,则第二个被访问到的数据 是 ( B ) A.3408 B.3829 C.4233 D.4540
对分查找算法
及程序实现
1.对分查找的概念
对分查找又称二分查找,是一种高效的查找方法。对分 查找的前提是,被查找的数据序列是有序的(升序或降序)。 对分查找的基本思想是在有序的数列中,首先将要查找 的数据与有序数列内处于中间位置的数据进行比较,如果两 者相等,则查找成功;否则就根据数据的有序性,再确定该 数据的范围应该在数列的前半部分还是后半部分;在新确定 的缩少范围内,继续按上述方法进行查找,直到找到要查找 的数据,即查找成功,如果要查找的数据不存在,即查找不 成功。 注:变量定义描述:假设将查找的那个数定义为一个变量key, 数组d(有n个数据)的中间位置定义为变量m,变量i记录查找范 围内的第一个元素的下标,变量i的初值为1,变量j记录查找 范围内最后一个数组元素的下标,变量j的初值为n.
相关文档
最新文档