108課綱國中資訊科技人工智慧與演算法課程設計
更新時間:2021年4月12日
演算法基本介紹-搜尋
搜尋(search)
在一堆大量資料中找出特定條件的資料(目標資料)
牛刀小試1-樸克牌遊戲(抽鬼牌)
牛刀小試2-樸克牌遊戲(猜牌)
遊戲設計:林合彥老師
牛刀小試3-多啦ㄟ夢搜尋東西
思考問題:
想想看日常生活中有那些情況會用到搜尋呢?
搜尋(search) 演算法
看到3分20秒
搜尋演算法:就是在資料結構中,找到一個東西的所在位置。
在不同的資料結構上有各式各樣不同的搜尋演算法,在國中部分針對陣列( Array ) 做搜尋。高中大學部分則是應用在圖形 ( Graph )或樹 ( Tree ),討論的就是深度搜尋跟廣度搜尋。
搜尋演算法種類
常用的搜尋演算法
循序搜尋法(Sequential Search)或線性搜尋法(Linear Search)
如果今天我們想要搜尋的資料陣列是未經排序 ( Unsorted ) 的,那最簡單的做法就是採用循序搜尋法。
循序搜尋法又稱線性搜尋法 ,即依序一個元素(Element) 一個元素(Element) 查找,無一遺漏。
資料引用:https://jason-chen-1992.weebly.com/home/-array-search
Google 搜尋引擎演算法 — SEO相關 歷年重大更新整理
牛刀小試4-搜尋引擎演算法在人工智慧的應用
參考網站
總結
循序搜尋演算法的特色
1.不一定要排序
2.搜尋速度慢.但保證搜尋的到(當資料n 值很大的時候,例如一百萬筆資料,平均搜尋的就要50 萬次, 搜尋時間就相對較長)
二分搜尋法(Binary Search)
牛刀小試1-樸克牌遊戲
遊戲設計:林合彥老師
牛刀小試2-多啦ㄟ夢終極密碼遊戲
二分搜尋法原理
解說影片
http://10.231.114.1/luti/109-2-an/bsex.mp4
二元搜尋法將資料分成兩部份,再將我們要找的目標數字與中間值比較,如果相等則代表找到了,小於的話就再比前半段,大於的話則再比後半段。如此反覆,不停的分段比較至找到目標所在位置或者陣列中無匹配資料為止。
牛刀小試3- 名畫神偷(Art Thief )遊戲
牛刀小試4-海戰棋遊戲
解說
http://host16.tyjh.tyc.edu.tw/~eve/tree/teach/s-teach/steach-title.htm
https://sites.google.com/a/ntjh.ntct.edu.tw/105pljh/home/searchalgorithm
循序搜尋法(Sequential Search)與二分搜尋法(Binary Search)之比較
圖片引用:https://www.codingame.com/learn/binary-search
資料引用:108課綱康軒第二章
圖片引用:108課綱高中一年級高中資訊科技科友出版社
搜尋演算法評量
(1)學習單(Open Book)
(2)循序搜尋法(Sequential Search)程式實作1
圖片引用:108課綱高中一年級高中資訊科技科友出版社
(翰林版)程式執行結果
參考積木
自行設計版本程式執行結果
演算法分析
1.先建立一個清單data的資料內容,刪除清單data的所有項目
2.用隨機數(1-1000)去任意新增20個資料項目
3.建立兩個變數
4.在貓咪角色被點擊,首先要詢問使用者想要查詢的數字
5.接著透過迴圈把清單內每一個元素逐一比對,如果是想要找的數字與清單內索引值內的元素相等,就讓貓咪說出找到了,以及是在第幾個索引值(項目)中找到的,
6.將found這個變數設定為1。
7.最後在迴圈結束之後就可以比對found的內容,如果found是0的話,就要告訴使用者,清單內沒有你要找的數字(數字不在清單中.也就是找不到)。
思考問題
不過依照上面的方法,同學們在執行之後如果仔細觀察就會發現,因為它的迴圈次數是固定的,所以就算是在迴圈還沒結束之前就找到資料項目,它仍然會持續地執行剩下的尋找動作,這樣子的設計當然就非常沒有效率。
為了改善此種情形,可以使用另外一種迴圈的方式,也就是條件式迴圈。
演算法分析
1.它的重複次數是由每一次開始重複時的條件檢查動作來決定的,如果條件成立就不再重複,不成立時就繼續這一遍的執行
2.可以設立兩個結束的條件,其中之一是inde變數,也就是不要比較超過清單的長度(index>清單的長度),另外一個就是found變數,用來記錄是否在上一次執行時有找到想要的資料(found=1)。使用「或」,因此只要任一條件成立,此迴圈就不再重複執行。這樣的修改,就可以解決之前的多餘比較次數的問題了。
資料參考
http://usr.nkust.org/2018/06/12/scratch-sequential-search/