作為程序員,如何向孩子解釋有關搜索中的原理,你該怎么向他們解釋?


解釋太難,孩子聽不懂,解釋太簡單,又把握不住簡單的維度。" />

国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

作為程序員,你該如何向孩子解釋“什么是搜索算法”!? 用Scratch編寫小游戲:超級瑪麗

極客小將2021-01-16-
如今審核如此便捷,遇到不懂的事情百度一下就知道了,部分小伙伴還可以Google,會出來很多關于搜索的信息和數據。


作為程序員,如何向孩子解釋有關搜索中的原理,你該怎么向他們解釋?


解釋太難,孩子聽不懂,解釋太簡單,又把握不住簡單的維度。

超級瑪麗scratch編程圖片素材包下載地址:

https://www.jikexiaojiang.cn/165.html

如今審核如此便捷,遇到不懂的事情百度一下就知道了,部分小伙伴還可以Google,會出來很多關于搜索的信息和數據。

作為程序員,如何向孩子解釋有關搜索中的原理,你該怎么向他們解釋?

解釋太難,孩子聽不懂,解釋太簡單,又把握不住簡單的維度。

不如試試下面這樣的解釋方式,以現在的少兒編程工具Scratch為例。

還不太了解Scratch?可能在成年人的世界里不太流行,但在學校和少兒編程中知名度很高。如果你已經很熟悉了,請跳過此步驟。

upload/article/images/2021-01-16/9f2cac72c512f1145a66431cca8f94b7.jpg

Scratch是麻省理工媒體實驗室終身幼兒園組開發的一套計算機程序開發平臺,旨在讓程序設計語言初學者不需先學習語言語法便能設計產品。開發者期望通過學習Scratch,啟發和激勵用戶在愉快的環境下經由操作(如設計交互故事)去學習程序設計、數學和計算知識,同時獲得創造性思考,邏輯編程和協同工作體驗。

在Scratch中,“角色”是通過名為“腳本”的程序來操縱的。我們來看一下讓角色邊動邊發出聲音的腳本吧。點擊綠旗圖標或者腳本本身,就可以看到角色隨著鼓動聲動起來。

upload/article/images/2021-01-16/8864667718f15e8ef1569d3d863ed509.jpg

腳本

upload/article/images/2021-01-16/c582f0f7342a66fec2943479f3d6ac94.jpg

角色

Scratch就是像上面這樣把這些有顏色的“模塊”排列起來制作腳本的。

如果仔細看這些模塊上寫的字,就可以知道程序向角色發出了什么指令。

這些模塊很像玩具積木,對吧!

upload/article/images/2021-01-16/240df53a95d62b2ef9f5fd43c09761f4.jpg

如上圖所示,搜索指的就是在數組中找出符合某個條件或性質的數據。它通過搜索算法來實現的,下面我們就介紹一下兩種最具有代表性的搜索算法:線性搜索和二分搜索。


小游戲:超級瑪麗


線性搜索

線性搜索是在給出的數組中,按順序逐個比較每一項,從而找到所需要數據。下面通過具體的實例(下列數據中搜索15)來逐步學習線性搜索。

upload/article/images/2021-01-16/4a14538fb0be037293775505fd66ebe1.jpg

該數組中有7個數據,首先與第一位數據17進行比較,與我們要搜索的數據15不同,因此移動到下一位。

upload/article/images/2021-01-16/baad9a8bed280ed499625950e2e7e17a.jpg

第二位數據是2,也與15不同,因此移動到下一位。

upload/article/images/2021-01-16/2444514b643861dd32cdd3ecdbb4a136.jpg

第三位數據是20,也與15不同,因此移動到下一位。

upload/article/images/2021-01-16/f7564d7bb6a547d12ac925d3cbe34ec7.jpg

第四位數據是15,正是我們要搜索的數據,因此搜索成功,操作結束。

upload/article/images/2021-01-16/1aed51c5ec591670aa456d09981bc42a.jpg

如果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。

upload/article/images/2021-01-16/a73ae4691c2ebd9232c404e9bee5aa6c.jpg

2、a不大于data的項目數(4),將key的值與第一位數據17進行比較,兩者不同,因此移動到下一位。

upload/article/images/2021-01-16/1c3cb09f7961238fbda8bb48a2b82ab5.jpg

3、將a的值加上1,a(=2)不大于data的項目數(=4),將key的值與第二位數據8進行比較,兩者不同,并移動到下一位。

upload/article/images/2021-01-16/6fd2676424314ce5fb4a40e89beb6d8a.jpg

4、將a的值加1,a(=3)不大于data的項目數(=4),將key的值與第三位數據20進行比較,兩者相同。輸出“搜索成功”并結束操作。

upload/article/images/2021-01-16/4f5bc57870a62afa10ca5dcb2341319b.jpg

編寫程序

理解了線性搜索的算法,我們怎么用編程來實現呢,下面就來用Scrach編寫程序。

1、建立列表name和age,刪除其全部項,并將7名學生的姓名和年齡分別添加到列表name和age中。

upload/article/images/2021-01-16/0617cc7d151f3e4db31a701ed5443ca4.jpg

2、建立變量key,并設為輸入的學生姓名。

upload/article/images/2021-01-16/acf5ca76a2348fa38c7fc970af676dad.jpg

3、建立變量a,設置為1。添加upload/article/images/2021-01-16/298aed5e21db6030c1687c4dd05a4f31.jpgupload/article/images/2021-01-16/58f70d561d4dd592d0d16b6be8cd5e15.jpg

4、如果在列表name中找到key,則由Scratch小貓說出相應的學生姓名和年齡,并終止程序。那么綠框1處應該填寫什么內容呢?

upload/article/images/2021-01-16/c6ee27fcb2e31f8612b4e33e9bf5a393.jpg

5、將a的值加上1,并繼續重復執行。

upload/article/images/2021-01-16/4472c786b4c38469658ece6090c51921.jpg

6、如果在列表name中沒能找到key,則由Scratch小貓說出“沒有”。程序創建完成。

upload/article/images/2021-01-16/43a451868ce1a6d04202b1687b455dbe.jpg

7、此程序運行結果

upload/article/images/2021-01-16/ee99b1e88289d69f7cc9c8281334dd5a.jpg


二分搜索

二分搜索是指在一個有序列表中,通過逐漸縮小搜索范圍進行搜索。下面通過具體的實例來解釋。

在下面的升序排列數據中,使用二分搜索找到數據15,。

https://cdn.china-scratch.com/timg/190729/132631A94-21.jpg

1、該數組共有7個數據,將首項和末項的位置數(即1和7)分別設置low和high。

https://cdn.china-scratch.com/timg/190729/1326311511-22.jpg

2、還需要計算數組的中間位數。使用下面的數式可以計算出中間位數為4,將其設置為mid。

https://cdn.china-scratch.com/timg/190729/132631HL-23.jpg

mid位,即第4位的數據是11,將其與15進行比較。

https://cdn.china-scratch.com/timg/190729/1326324B2-24.jpg

3、15>11,因此mid位右側的數據成為新的搜索范圍。計算可知,新范圍中的low位(即mid+1)是第5位。

https://cdn.china-scratch.com/timg/190729/1326325J1-25.jpg

4、再次計算mid位是第6位。因此將第mid位數據(=17)與15進行比較。

https://cdn.china-scratch.com/timg/190729/1326324H0-26.jpg

5、15<17,因此將當前mid位左側的數據重新設為新的搜索范圍。需要重新計算新的范圍中的high位,即mid-1=5。新的high位就是第5位。

https://cdn.china-scratch.com/timg/190729/1326322558-27.jpg

6、再次計算mid位是第5位。因此將第mid位的數據(=15)與15進行比較。兩者相同,搜索結束。

https://cdn.china-scratch.com/timg/190729/1326334012-28.jpg

如果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,因此移動到下一步。

https://cdn.china-scratch.com/timg/190729/1326332J4-29.jpg

2. 將變量 mid 設為(low+high)/2(=3)。

https://cdn.china-scratch.com/timg/190729/1326334a0-30.jpg

3. key 大于列表 data 的第 mid 項(=13),因此將 low 設為 mid+1(=4),low(=4)不大于  high,因此移動到下一步。

https://cdn.china-scratch.com/timg/190729/1326333K7-31.jpg

4. 將變量 mid 設為(low+high)/2(=4)(設為向下取整)。

https://cdn.china-scratch.com/timg/190729/1326331N0-32.jpg

5. key 與列表 data 的第 mid 項(=15)相同,因此輸出“搜索成功”,完成操作。

https://cdn.china-scratch.com/timg/190729/1326334F1-33.jpg

編寫程序

1. 建立列表 name 和 age,刪除其全部項,并將 7 名學生的姓名(按部首筆畫遞增排序)和相應年齡分別添加到列表 name  和 age。

https://cdn.china-scratch.com/timg/190729/1326344S5-34.jpg

2. 建立變量 key,設為要搜索的數據。建立變量 low,設為 1;建立變量 high,設為列表 name 的項目數。

https://cdn.china-scratch.com/timg/190729/13263425Q-35.jpg

3. 添加

https://cdn.china-scratch.com/timg/190729/1326346335-36.jpg

https://cdn.china-scratch.com/timg/190729/1326342041-37.jpg

4. 如果 key 與列表 name 的第 mid 項相同,則說出相應學生的姓名和年齡,程序停止。

https://cdn.china-scratch.com/timg/190729/1326345632-38.jpg

6. 如果 key 與列表 name 的第 mid 項不同,則變更 low 或者 high 的值,繼續重復執行。那么綠框 2  處應該填寫什么內容?

https://cdn.china-scratch.com/timg/190729/132634G43-39.jpg

7. 如果直到low>high時依然沒有找到 key,則說出“沒有”。程序創建完成。

https://cdn.china-scratch.com/timg/190729/1326353a3-40.jpg

8.此程序運行結果如下。

聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

主站蜘蛛池模板: 荔浦县| 庆阳市| 贡觉县| 中江县| 贺兰县| 剑阁县| 古田县| 孟津县| 绵竹市| 饶阳县| 县级市| 定襄县| 北票市| 双流县| 图们市| 淮南市| 福清市| 晋州市| 什邡市| 大厂| 潍坊市| 博湖县| 海阳市| 绵阳市| 宜君县| 苗栗县| 无极县| 桑植县| 龙门县| 九龙坡区| 神池县| 伊春市| 曲松县| 隆安县| 郯城县| 垣曲县| 临潭县| 黄浦区| 绵阳市| 阿拉尔市| 年辖:市辖区|