基於二分查找(折半查找)的時間範圍匹配
阿新 • • 發佈:2017-08-31
計算 div 一行 例如 tro 最小 數據 再計算 效率
需求介紹
1.有dateLeft和dateRight兩個txt文件
dateLeft.txt dateRight.txt
左邊的表時間比較緊湊,每秒都有;右邊的表時間比較分散,間隔都是幾分鐘
2.需要從Left表中取出一行,匹配屬於Right表中屬於哪一行的時間範圍
例如 2017-08-21 11:44:40.838 人為觀察是更接近Right表的第二行-11:44:44:154等
寫出程序從左邊找出右邊所屬時間的行,然後獲取它的run=?
3.算法實現
1.通過兩層循環遍歷匹配,算出每次匹配的時間戳之差,獲取最小的作為匹配目標
缺點:效率緩慢,到了後期,右表前面的數據本應該不需要再計算差值,這加大了程序的執行時間
整個程序跑完用時30分鐘
2.通過折半查找去匹配時間戳之差最小的值,執行效率非常快,總用時0.3秒
以下是二分(折半)查找用例
a=[1, 2, 3, 4, 5, 6, 8, 20, 24, 31, 35] #-----------------遞歸二分查找------------------ b=10 def binarySearch(array,n,left,right): mid=left+(right-left)/2 if(left>right):print ‘find failed‘ return -1 else: if(array[mid]>n): return binarySearch(array, n, left, mid-1) elif(array[mid]<n): return binarySearch(array, n, mid+1, right) else: print ‘find it‘ return midprint binarySearch(a, b, 0, len(a)-1
基於二分查找(折半查找)的時間範圍匹配