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/