資訊內(nèi)容
作為程序員,你該如何向孩子解釋“什么是搜索算法”!? 用Scratch編寫小游戲:超級(jí)瑪麗
作為程序員,如何向孩子解釋有關(guān)搜索中的原理,你該怎么向他們解釋?
解釋太難,孩子聽不懂,解釋太簡(jiǎn)單,又把握不住簡(jiǎn)單的維度。
超級(jí)瑪麗scratch編程圖片素材包下載地址:
https://www.jikexiaojiang.cn/165.html
如今審核如此便捷,遇到不懂的事情百度一下就知道了,部分小伙伴還可以Google,會(huì)出來很多關(guān)于搜索的信息和數(shù)據(jù)。
作為程序員,如何向孩子解釋有關(guān)搜索中的原理,你該怎么向他們解釋?
解釋太難,孩子聽不懂,解釋太簡(jiǎn)單,又把握不住簡(jiǎn)單的維度。
不如試試下面這樣的解釋方式,以現(xiàn)在的少兒編程工具Scratch為例。
還不太了解Scratch?可能在成年人的世界里不太流行,但在學(xué)校和少兒編程中知名度很高。如果你已經(jīng)很熟悉了,請(qǐng)?zhí)^此步驟。
Scratch是麻省理工媒體實(shí)驗(yàn)室終身幼兒園組開發(fā)的一套計(jì)算機(jī)程序開發(fā)平臺(tái),旨在讓程序設(shè)計(jì)語(yǔ)言初學(xué)者不需先學(xué)習(xí)語(yǔ)言語(yǔ)法便能設(shè)計(jì)產(chǎn)品。開發(fā)者期望通過學(xué)習(xí)Scratch,啟發(fā)和激勵(lì)用戶在愉快的環(huán)境下經(jīng)由操作(如設(shè)計(jì)交互故事)去學(xué)習(xí)程序設(shè)計(jì)、數(shù)學(xué)和計(jì)算知識(shí),同時(shí)獲得創(chuàng)造性思考,邏輯編程和協(xié)同工作體驗(yàn)。
在Scratch中,“角色”是通過名為“腳本”的程序來操縱的。我們來看一下讓角色邊動(dòng)邊發(fā)出聲音的腳本吧。點(diǎn)擊綠旗圖標(biāo)或者腳本本身,就可以看到角色隨著鼓動(dòng)聲動(dòng)起來。
腳本
角色
Scratch就是像上面這樣把這些有顏色的“模塊”排列起來制作腳本的。
如果仔細(xì)看這些模塊上寫的字,就可以知道程序向角色發(fā)出了什么指令。
這些模塊很像玩具積木,對(duì)吧!
如上圖所示,搜索指的就是在數(shù)組中找出符合某個(gè)條件或性質(zhì)的數(shù)據(jù)。它通過搜索算法來實(shí)現(xiàn)的,下面我們就介紹一下兩種最具有代表性的搜索算法:線性搜索和二分搜索。
小游戲:超級(jí)瑪麗
線性搜索
線性搜索是在給出的數(shù)組中,按順序逐個(gè)比較每一項(xiàng),從而找到所需要數(shù)據(jù)。下面通過具體的實(shí)例(下列數(shù)據(jù)中搜索15)來逐步學(xué)習(xí)線性搜索。
該數(shù)組中有7個(gè)數(shù)據(jù),首先與第一位數(shù)據(jù)17進(jìn)行比較,與我們要搜索的數(shù)據(jù)15不同,因此移動(dòng)到下一位。
第二位數(shù)據(jù)是2,也與15不同,因此移動(dòng)到下一位。
第三位數(shù)據(jù)是20,也與15不同,因此移動(dòng)到下一位。
第四位數(shù)據(jù)是15,正是我們要搜索的數(shù)據(jù),因此搜索成功,操作結(jié)束。
如果7個(gè)數(shù)據(jù)全部比較完畢也沒有找到需要的數(shù)據(jù),則表示搜索失敗。
線性搜索算法:
建立列表data,并設(shè)任意數(shù)值。
建立變量key,代表要搜索的數(shù)據(jù)。
建立變量a,并設(shè)為1。
如果a>data的項(xiàng)目數(shù),則移動(dòng)到步驟7。
如果key與data的第a項(xiàng)相同,則輸出“搜索成功”并結(jié)束操作。
將a加1,并移動(dòng)步驟4。
輸出“搜索失敗”并完成操作。
下面我們通過在17,8,20,15這個(gè)數(shù)組中搜索20,來進(jìn)一步了解算法的運(yùn)行過程。
1、將列表data設(shè)置為17,8,20,15。將變量key設(shè)置為20。將變量a設(shè)置為1。
2、a不大于data的項(xiàng)目數(shù)(4),將key的值與第一位數(shù)據(jù)17進(jìn)行比較,兩者不同,因此移動(dòng)到下一位。
3、將a的值加上1,a(=2)不大于data的項(xiàng)目數(shù)(=4),將key的值與第二位數(shù)據(jù)8進(jìn)行比較,兩者不同,并移動(dòng)到下一位。
4、將a的值加1,a(=3)不大于data的項(xiàng)目數(shù)(=4),將key的值與第三位數(shù)據(jù)20進(jìn)行比較,兩者相同。輸出“搜索成功”并結(jié)束操作。
編寫程序
理解了線性搜索的算法,我們?cè)趺从镁幊虂韺?shí)現(xiàn)呢,下面就來用Scrach編寫程序。
1、建立列表name和age,刪除其全部項(xiàng),并將7名學(xué)生的姓名和年齡分別添加到列表name和age中。
2、建立變量key,并設(shè)為輸入的學(xué)生姓名。
3、建立變量a,設(shè)置為1。添加
4、如果在列表name中找到key,則由Scratch小貓說出相應(yīng)的學(xué)生姓名和年齡,并終止程序。那么綠框1處應(yīng)該填寫什么內(nèi)容呢?
5、將a的值加上1,并繼續(xù)重復(fù)執(zhí)行。
6、如果在列表name中沒能找到key,則由Scratch小貓說出“沒有”。程序創(chuàng)建完成。
7、此程序運(yùn)行結(jié)果
二分搜索
二分搜索是指在一個(gè)有序列表中,通過逐漸縮小搜索范圍進(jìn)行搜索。下面通過具體的實(shí)例來解釋。
在下面的升序排列數(shù)據(jù)中,使用二分搜索找到數(shù)據(jù)15,。
1、該數(shù)組共有7個(gè)數(shù)據(jù),將首項(xiàng)和末項(xiàng)的位置數(shù)(即1和7)分別設(shè)置low和high。
2、還需要計(jì)算數(shù)組的中間位數(shù)。使用下面的數(shù)式可以計(jì)算出中間位數(shù)為4,將其設(shè)置為mid。
mid位,即第4位的數(shù)據(jù)是11,將其與15進(jìn)行比較。
3、15>11,因此mid位右側(cè)的數(shù)據(jù)成為新的搜索范圍。計(jì)算可知,新范圍中的low位(即mid+1)是第5位。
4、再次計(jì)算mid位是第6位。因此將第mid位數(shù)據(jù)(=17)與15進(jìn)行比較。
5、15<17,因此將當(dāng)前mid位左側(cè)的數(shù)據(jù)重新設(shè)為新的搜索范圍。需要重新計(jì)算新的范圍中的high位,即mid-1=5。新的high位就是第5位。
6、再次計(jì)算mid位是第5位。因此將第mid位的數(shù)據(jù)(=15)與15進(jìn)行比較。兩者相同,搜索結(jié)束。
如果low>high,則不能找到所求數(shù)據(jù),搜索失敗。
二分搜索算法
建立列表data,并將有序排列的任意數(shù)據(jù)添加到該列表。
建立變量key,設(shè)為要搜索的數(shù)據(jù)。
建立變量low,設(shè)置為1;變量high,設(shè)為列表data的項(xiàng)目數(shù)。
如果low>high,則移動(dòng)到步驟8。
建立變量mid,設(shè)為(low+high)/2。
如果key與列表data的第mid項(xiàng)目,則輸出“搜索成功”,操作完成。
如果key< p="">
輸出“搜索失敗”,操作完成。
下面在數(shù)組 8、10、13、15、20 中搜索 15,借此實(shí)例了解算法的運(yùn)行過程。
1. 將 8、10、13、15、20 添加到列表 data。 將變量 key 設(shè)為 15。分別將變量 low和 high 設(shè)為 1 和 5,low 不大于 high,因此移動(dòng)到下一步。
2. 將變量 mid 設(shè)為(low+high)/2(=3)。
3. key 大于列表 data 的第 mid 項(xiàng)(=13),因此將 low 設(shè)為 mid+1(=4),low(=4)不大于 high,因此移動(dòng)到下一步。
4. 將變量 mid 設(shè)為(low+high)/2(=4)(設(shè)為向下取整)。
5. key 與列表 data 的第 mid 項(xiàng)(=15)相同,因此輸出“搜索成功”,完成操作。
編寫程序
1. 建立列表 name 和 age,刪除其全部項(xiàng),并將 7 名學(xué)生的姓名(按部首筆畫遞增排序)和相應(yīng)年齡分別添加到列表 name 和 age。
2. 建立變量 key,設(shè)為要搜索的數(shù)據(jù)。建立變量 low,設(shè)為 1;建立變量 high,設(shè)為列表 name 的項(xiàng)目數(shù)。
3. 添加
4. 如果 key 與列表 name 的第 mid 項(xiàng)相同,則說出相應(yīng)學(xué)生的姓名和年齡,程序停止。
6. 如果 key 與列表 name 的第 mid 項(xiàng)不同,則變更 low 或者 high 的值,繼續(xù)重復(fù)執(zhí)行。那么綠框 2 處應(yīng)該填寫什么內(nèi)容?
7. 如果直到low>high時(shí)依然沒有找到 key,則說出“沒有”。程序創(chuàng)建完成。
8.此程序運(yùn)行結(jié)果如下。
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時(shí)和我們聯(lián)系刪除

- 上一篇
少兒創(chuàng)意編程scratch初級(jí)游戲--打地鼠
可愛的小朋友們,今天我們來編一個(gè)打地鼠的經(jīng)典小游戲吧。 游戲介紹:玩家通過操控錘子擊打洞里冒出來的地鼠來得分。 打地鼠 效果圖 玩家
- 下一篇
Scratch之父告訴你:scratch的10大令人信服的好處!
Scratch是一款由麻省理工學(xué)院(MIT) 設(shè)計(jì)開發(fā)的少兒編程工具。 其特點(diǎn)是:使用者可以不認(rèn)識(shí)英文單詞,也可以不使用鍵盤,就可以進(jìn)行編程。隨著科技的發(fā)展,創(chuàng)新能力也顯得越來越重要,很多家長(zhǎng)也會(huì)讓孩子學(xué)習(xí)編程,那么如何給孩子營(yíng)造一