在游戲中學習二分查找的算法思想
錢曉燕
摘要:本文的主要內容包括:二分查找的算法思想;講解中不易理解、掌握的原因;通過游戲理解算法。通過游戲中學習二分查找的算法思想教學過程,讓學生參與其中,體驗過程,分析原因,得出結論。 關鍵詞:二分查找游戲理解算法游戲
一、二分查找的算法思想 在已經排好序的數列中,首先找到中間的記錄,這時可能會出現三種情況之一(假設按升序排列)。 1)該記錄對應字段的值小于查找關鍵字,此時應在前半部分記錄中繼續查找。 2)該記錄對應字段的值大于查找關鍵字,此時應在后半部分記錄中繼續查找。 3)該記錄對應字段的值等于查找關鍵字,那么就已找到了查找目標,查找結束。 如果出現前兩種情況,則繼續在前半部分或后半部分內進行對半查找,直到出現第三種情況為止。如果沿指定方向測試完成所有記錄時仍未出現第三種情況,則表示未找到查找目標,查找也結束。 二、講解中不易理解、掌握的原因 單看這一串算法思想的解釋有些學生便有些沒有耐心了,更不用說去掌握應用了?;蛘哂行┤松驳赜涀×诉@些原理卻沒有真正地理解,寫程序時也會漏洞百出的。只有讓學親身體會了查找的過程,才能理解算法思想,才能想到編程時的條件設置及注意點。從而真正達到理解、應用的最終目標。 三、通過游戲理解算法 游戲過程如下: 第一步:把10名同學按身高從低到高排成一列,并依次排號為1到10號。并另找一位學生,稱為X,找一找10人中有無與X同樣身高的。若有則輸出他的號碼。 第二步:讓其它學生自己想方法去解決這個問題。討論之后學生得出了這樣一個結論:把X與這一列中1號到10號的每個人依次比較過去,便有結論出來了。教師總結:這種方法叫順序比較法,可以達到目的,但是程序的復雜度比較高,比如說有1000人或者有10000人或者更多的話,這種方法就體現不出優越性了。如何更快更簡便地得到結論呢?這時教師引入二分法的思想:從10個中找出中間位置的一位同學與X 進行比較。有三種結論:1、若相等則表示找到,停止程序。2、若比X高,那么與X等高的得在中間往后的這部分人中找。3、若比X低,那么與X等高的得在中間往前的這部分人中找。在2或3 中又重復同一過程。 第三步:游戲分進行3次 第一次游戲選擇一個學生X,其身高與九號學生剛好相同(假設不知道)游戲過程如下: 1號2號3號4號5號 6號7號8號9號10號 隊首:1號 隊尾:10號 找到中位置MID=(1+10)\2=5號 因為X>5號所以只能舍棄前半部分,在后半部分找,于是只剩下 6號7號8號9號10號 隊首:6號 隊尾:10號 找到中間位置: MID=(6+10)\2=8 號 因為X>8號所以只能舍棄前半部分,在后半部分找,于是只剩下 9號10號 隊首:9號 隊尾:10號 找到中間位置:MID=(9+10)\2=9號 因為X=9號,找到。停止尋找。 在這輪游戲中可以發現從第二次開始每次的隊首都是前一次求得的中間值加1得到的。也可理解為從中間一項往后開始下一次尋找。 第二次游戲:假設X的身高小于所有隊列中的同學 1號2號3號4號5號 6號7號8號9號10號 隊首:1號 隊尾:10號 找到中位置MID=(1+10)\2=5號 因為X<5號所以要舍棄中間往后的部分,在前半部分找,于是剩下: 1號2號3號4號 隊首:1號 隊尾:4號 找到中位置MID=(1+4)\2=2號 因為X<2號所以要舍棄中間往后的部分,在前半部分找,于是剩下: 1號 隊首:1號 隊尾:1號 找到中間位置:MID=(1+1)\2=1號