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