


摘要:折半查找算法是《數據結構》課程的一個重要算法,講授時通過引入“猜價格”游戲以及形象、直觀的動畫演示來調動學生學習的興趣點和積極性,營造良好的學習氛圍。對學生學習滿意度的調查結果表明,游戲融入折半查找算法教學具有事半功倍的效果。
關鍵詞:折半查找算法;游戲;動畫
中圖分類號:TP3" " " " " 文獻標識碼:A
文章編號:1009-3044(2022)33-0177-04
隨著計算機應用領域的不斷擴大,人們對數據結構的重視程度空前高漲。《數據結構》課程中的排序、查找算法是經典的、重點的算法。然而非常枯燥,教師難講,學生課程也缺乏興趣[1]。如果將教學與游戲巧妙地結合,對折半查找算法的教學將會是一個不錯的教學思路。
1游戲對折半查找算法教學的適用性分析
1.1 游戲融入教學可以模擬實際的場景,使學生對知識的理解更深入
通過游戲可以將復雜、枯燥的知識通過形象的模擬來進行展示,使學生對折半查找算法的印象更深刻、理解更深入,進而為后續的算法實現環節打下良好的基礎。
1.2 開拓學生的創新思維
在計算機發展日新月異的今天,為了滿足 IT 企業的需求,適應市場需要,計算機專業必須開拓學生的創新思維。游戲的引入,可以使整個教學過程趣味性十足,學生發揮的想象力可以得到充分地發揮,進而可以開拓學生的創新思維[2]。
2折半查找算法的教學設計
2.1折半查找算法的基本思想
對已按關鍵字排序的序列,首先用待查找數據與數列中間元素比較,如果相等,則查找成功;如果不相等,則根據比較結果,來確定后續查找在哪半邊進行,以此類推,直到查找成功,或者找不到待查找數據為止[3]。
2.1.1折半查找算法的基本思路
單純文字描述算法思想不夠直觀,我們舉例如下:已知如下 11 個數據元素的數組(6, 13, 19, 23, 37, 58, 64, 75, 82, 88, 92),現要查找關鍵字data為 23 和 85的元素。Low:查找區間的下界, high:查找區間的上界,mid:查找區間的中間位置,mid=(low+high)/2。
(1) k=23 的折半查找過程,如下所示:
① [1,11],mid=6,23lt;58, high=mid-1;
② [1,5],mid=3,23gt;19,low=mid+1;
③ [4,5], mid=4,23=23,查找成功;
(2) k=85 的折半查找過程,如下所示:
① [1,11],mid=6,58lt;85,low=mid+1;
② [7,11],mid=9,82lt;85,low=mid+1;
③ [10,11],mid=10,88gt;85,high=mid-1;
④ [10,9]lowgt;high,查找失敗;
2.1.2折半查找算法的實現
算法描述:
1)輸入:待查找關鍵字data;
2)輸出:若匹配成功,輸出滿足條件的數據元素下標;否則;輸出“查找失敗”;
3)運算過程:
a)計算中間值
mid=(low+high)/2;
b)移動操作:若 datalt;array[mid],high 指向 mid 前一個元素,即high=mid-1;若datagt;array[mid],low=mid+1;
c)循環條件:lowlt;=high;
d)結束條件:data=arrray[mid]或lowgt;high;
根據以上算法的關鍵點分析,通過C 語言程序實現折半查找算法:
#includelt;stdio.hgt;
int main()
{
int array[11]={5,13,19,21,37,56,64,75,80,88,92},low,high,mid,data;
printf(\"請輸入待查找的數:\");
scanf(\"%d\",amp;data);
low=0;
high=10;
while(lowlt;=high)
{
mid=(low+high)/2;
if(data==array[mid])
{
printf(\"查找成功!%d在第%d個位置\n\",data,mid+1);
break;
}
else if(datalt;array[mid])
high=mid-1;
else
low=mid+1;
}
if(lowgt;high)
printf(\"查找失敗!\n\");
return 0;
}
2.1.3折半查找算法實現過程中常見問題分析
在算法實現過程中,移動操作環節是關鍵;若 datalt;array[mid],high 指向 mid 前一個元素,即high=mid-1;若datagt;array[mid],low=mid+1;可是有些同學容易遺漏移動操作,編寫出如下的程序 [5]:
#includelt;stdio.hgt;
int main()
{
int array[11]={5,13,19,21,37,56,64,75,80,88,92},low,high,mid,data;
printf(\"請輸入待查找的數:\");
scanf(\"%d\",amp;data);
low=0;
high=10;
while(lowlt;=high)
{
mid=(low+high)/2;
if(data==array[mid])
{
printf(\"查找成功!%d在第%d個位置\n\",data,mid+1);
break;
}
else if(datalt;array[mid])
high=mid;
else
low=mid;
}
if(lowgt;high)
printf(\"查找失敗!\n\");
return 0;
}
若按上面程序執行,會產生兩個問題:一是當待查找關鍵字 data 不存在時,lowlt;=high 永遠成立,查找過程將永不停歇;其二是若查找關鍵字 data=6或者data=92,查找過程則陷入死循環,又無法找到正確的位置,這就需要教師們在教學過程中反復強調移動操作的重要性。
2.2 教學目標
知識目標:掌握可以實現折半查找的兩個前提以及折半查找的基本思想;
能力目標:具備一定的邏輯思維能力和從具體問題中提煉出算法的能力;
操作性目標: 能通過計算機語言編寫程序實現折半查找算法;
情感目標: 提升學生參與意識,培養學生自主探索問題的能力,讓學生在自主探究的過程中深刻感受算法思想在解決實際問題時的重要性和魅力,以激發學生的學習熱情。
2.3教材分析
教學重點:折半查找算法的基本思想;
教學難點:由折半查找算法思想到程序代碼的轉換。
2.4學情分析
學習對象是計算機科學與技術學院大一新生,同學們對數組的相關知識和順序查找算法已經有一定的認識。但由于剛接觸編程,對編程積極性不夠高,基礎相對欠缺,加上折半查找算法邏輯性比較強。所以在教學過程中應盡量想辦法調動學生學習的興趣點和積極性。
2.5教學策略
首先,寓教于樂,通過精心設計的“猜價格”游戲來調動學生的學習積極性和興趣點,啟發學生去探索游戲背后的科學原理;另外,通過算法動畫的展示,將游戲環節中的猜價格方法進一步提升到算法原理中,可以激發學生學習編程的熱情,也可以為后續的算法實現環節打下良好的基礎。
2.6教學方法
本課采用游戲體驗法、動畫直觀演示法和啟發式教學法三種方法相結合的方式來完成。
2.7教學過程設計
首先,通過對前一節順序查找內容的回顧,總結出順序查找的優缺點;然后,通過一個“猜價格”游戲暖場,引導學生去探索游戲背后的科學原理,進而導入新課;接下來結合一個具體的案例,配合動畫詳細講解折半查找的基本原理。然后,提煉出折半查找算法,繪制出折半查找算法的流程圖,并設計出動畫效果,使流程圖當中的每一步都有與之對應的代碼同步出現。相信,通過這種方法來完成算法實現這一環節的講解,可以讓同學們更清晰、更透徹地理解算法代碼,并且可以激發學生對編程的熱情和信心。隨后,對本節課的內容進行總結,提醒學生本節課應該注意的關鍵點。再通過一道思考題,讓學生更深刻地去感受折半查找在實際生活的用途和高效性,最后,布置作業讓學生對本節課的知識進行鞏固。
2.8多媒體課件設計的重要性
老師們進行教學設計時,往往都會對知識導入、教學目標(包含知識目標、能力目標、情感目標、操作目標等)、教學重點與難點、教學策略等方面耗費大量的時間與精力,卻忽略多媒體課件的設計,然而課件的色彩搭配、動畫效果、視頻等往往會給學生帶來一場非常震撼的視覺盛宴,進而吸引學生的注意力,使教學效果事半功倍。
2.9 《折半查找算法》教學設計的依據
由于學生的基礎不同,理解問題的能力也參差不齊,《數據結構》課程內容又非常枯燥,要想提高學生學習的積極性與主動性,就必須改變過去以教師為中心“滿堂灌”的教學模式。針對《數據結構》課程的特點,考慮到學習對象是大一新生,缺乏足夠的編程熱情、好奇心強、活潑、愛玩等實際情況,結合折半查找算法的教學目標,決定采用游戲體驗法、動畫直觀演示法和啟發式教學法三種方法相結合的方式來完成折半查找算法的教學。首先,通過游戲暖場可以讓學生積極參與到課堂中來,以最大限度地激發學生的學習熱情。接著,運用啟發式教學引入本節課的主題——折半查找。然后,結合一個具體的實例配合形象、直觀的動畫展示出折半查找算法的基本思想及其實現的詳細過程,將游戲環節中的“猜價格”方法進一步融合到折半查找算法原理中,一定可以激發學生學習的熱情和信心。
2.10 教學效果調查
2.10.1 調查問卷和測試
為了調查此教學設計的效果,老師通過在問卷星上發布問卷,讓學生填寫自己對這一節課的感受和各項教學目標達成度,并對老師的教學方法提出相應的意見和建議。 通過問卷星平臺反饋結果可以看出,90% 以上的學生認為本次課堂注意力高度集中,學習興趣濃厚,對用折半查找算法實現課后作業非常有信心。隨后,對學生進行折半查找算法知識的測試。結果證實, 85%以上的學生成績達到優秀。調查結果表明,游戲融入本節課的教學,收到了良好的教學效果。
2.10.2訪談
問卷調查和測試完成后,選取成績相對較好和成績相對較差的學生進行訪談,以更好地改進教學。調查結果出乎意料,好多同學把沒布置的課后習題也編程實現了,還有相當一部分學生已經開始迫不及待地學習其他查找、排序算法。充分說明引入游戲來講授折半查找算法能充分調動學生的學習興趣和編程熱情,能提高學生的學習主動性。
3總結與展望
3.1 總結
游戲教學要求任課教師要時刻牢記游戲不以玩樂為目的,游戲規則的設計要緊緊圍繞教學目標和內容,規則要能精準地傳達給學生。教學設計往往都會包含知識回顧與導入、教學目標(包含知識目標、能力目標、情感目標、操作目標等)、教學重點與難點、教學策略、板書、教態、課件、作業等方面[1]。 優秀的教學設計可以讓學生體會到學習的快樂,能激發學生學習的熱情,進而能夠取得良好的教學效果。
3.2 展望
本次教學設計僅選擇了《數據結構》課程中的折半查找算法,并且僅僅是針對計算機軟件工程專業大一新生進行實驗教學,課程內容和學習對象都不夠全面。以后的教學中,力爭早日讓游戲教學貫穿到《數據結構》課程各個章節中,并且盡可能多地在其他學習對象中開展,讓研究結果更有普遍性意義。
在以后的教學設計中,還要盡可能多地融合課程思政元素,在培養學生專業能力的同時,關注學生身心健康發展,實現育人的理想效果。另外,還要采用線上線下混合式教學模式,讓學生真正變為學習的主體,融合傳統課堂教學與在線學習的優勢,以獲得最佳的教學效果和學習效果[6]。
參考文獻:
[1] 王曉燕,李亞.游戲在教學中的應用——《停止等待協議》的教學設計[J].南陽師范學院學報,2015,14(12):69-72.
[2] 李明,馬平.游戲設計在人機工程學課堂教學中的應用[J].黑龍江科技信息,2012(29):172,69.
[3] 嚴蔚敏,李冬梅,吳偉民.數據結構:C語言版[M].2版.北京:人民郵電出版社,2022.
[4] 何麗莉,白洪濤.折半查找算法實例教學及問題分析[J].教育現代化,2016,3(16):68-70.
[5] 呂國光,張燕.關于游戲教學的若干研究[J].韶關學院學報,2011,32(3):130-134.
[6] 胡鈺,耿植林,普運偉,等.以問題為導引的線上線下混合式教學模式探究[J].計算機教育,2022(2):73-78.
【通聯編輯:朱寶貴】