繁体   English   中英

找到与用户输入的两个值最接近的两个值的最有效搜索算法是什么?

[英]What is the most efficient searching algorithm to find the two values that are closest to the two values inputted by the user?

#用户输入的经度和纬度分别由变量“lon”和“lat”表示。 我想搜索“mintemparr”以找到离输入最近的位置。 我当前的算法遍历数组中的每个值以找到经度和纬度的最小差异,这需要很长时间,因为数组非常大。 有没有更有效的算法来做到这一点?

#一行“mintemparr”的格式为[经度,纬度,温度]。 我试图找到距离输入最近位置的温度。 我当前的算法遍历这个数组的每一行。

def match (lon, lat):
    min=10000
    minindex=-1

    for x in range (len (mintemparr)):
        if (abs ((float (lon))-float (mintemparr [x][0])))+(abs ((float 
       (lat))-float (mintemparr [x][1])))<min:

              min=(abs ((float (lon))-float (mintemparr [x][0])))+(abs 
              ((float (lat))-float (mintemparr [x][1])))
              minindex=x

    result=mintemparr [minindex][2]
    print ("The Temperature is: ")
    print (result)

longitude=input ("Enter Longitude: ")
latitude=input ("Enter Latitude: ")
match (longitude, latitude)

#样本输入:

Enter Longitude: -140
Enter Latitude: 40

#输出:

The Temperature is -6.3244445

#输出正确; 只是需要很长时间。

#mintemparr 排序后,经度从 -180 增加到 180,而纬度保持不变。 一旦到达 180 度,纬度就会增加并且模式继续。

#mintemparr的部分:

-179.979166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.9375 89.9791666666666714 -3.39999995214436425e+38
-179.895833333333343 89.9791666666666714 -3.39999995214436425e+38
-179.854166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.8125 89.9791666666666714 -3.39999995214436425e+38
-179.770833333333343 89.9791666666666714 -3.39999995214436425e+38

您可以将值附加到列表中,对其进行排序,然后取其左侧和右侧的值。 下面是一个例子:

lons=[float(i[0]) for i in mintemparr]

#check for nearest longtitude for lon:

lons.append(lon)
lons.sort()
mylon=lons[lons.index(lon)-1] if lon-lons[lons.index(lon)-1]< lons[lons.index(lon)+1]-lon else lons[lons.index(lon)+1]

背阔肌也一样:

mintemparr_temp=[i for i in mintemparr if i[0]==mylon]
lats=[float(i[1]) for i in mintemparr_temp]

#check for nearest longtitude for lon:

lats.append(lat)
lats.sort()
mylat=lats[lats.index(lat)-1] if lat-lats[lats.index(lat)-1]< lats[lats.index(lat)+1]-lat else lats[lats.index(lat)+1]

最后:

mytemp=[i for i in mintemparr if i[0]==mylon anf i[1]==mylat]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM