1. 程式人生 > >基於二分查找(折半查找)的時間範圍匹配

基於二分查找(折半查找)的時間範圍匹配

計算 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 mid
print binarySearch(a, b, 0, len(a)-1

基於二分查找(折半查找)的時間範圍匹配