已排序完的1D陣列資料LabVIEW已有很好的搜尋元件可用,用Search 1D Array元件可快速搜尋到資料索引位置,10萬筆資料的搜尋瞬間完成

20080117-03  

 

20080117-04  

 

 

但這次題目要求是不使用這類搜尋元件,用其他方式去搜尋這10萬筆資料


原先完成的做法是用順序搜尋法,從陣列資料的第1筆資料開始搜尋,直到找到目標或搜尋完整個陣列為止


這樣做有個問題,資料位在陣列的尾端時要搜尋很久,若沒有符合的資料時更要把10萬筆資料全搜尋過才會停止,以搜尋程式來說很沒有效率

20080117-01  

 

20080117-02  

 

 

這時想到的是以前寫VB程式用的二叉式搜尋法,再來是如何用LabVIEW來完成同樣的程式


首先用迴圈定出要搜尋索引值的上下限範圍,初始值上限是陣列最後一筆資料的索引值,下限是第一筆也就是索引值為0的資料


再來就是算出中間索引值的號碼,公式是(上限減下限除以2再加上下限),以算出的索引值從資料來源陣列中取出值和搜尋值比對,若資料相同則表示已搜尋到目標,直接停止迴圈完成搜尋


若上限減下限除以2之後的商數為0,則表示已搜尋完全部陣列,此時也停止迴圈完成搜尋

20080117-05  

 

若搜尋值大於比對值,則把上一步算出的中間索引值改為下限,只搜尋陣列資料的後半段

20080117-06  

 

若搜尋值小於比對值,則把上一步算出的中間索引值改為上限,只搜尋陣列資料的前半段

20080117-07  

 

最後完成的程式不管是否有符合的資料,最多只要搜尋17次即可完成10萬筆資料的搜尋,和順序搜尋法相比是很有效率的程式

20080117-08  

    

未出師的小工程師 發表在 痞客邦 PIXNET 留言(0) 人氣()