Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带区间的二进制搜索算法_Python_Algorithm_Search_Binary - Fatal编程技术网

Python 带区间的二进制搜索算法

Python 带区间的二进制搜索算法,python,algorithm,search,binary,Python,Algorithm,Search,Binary,我正在尝试更改代码,这样它就不会查找数组的特定值,而是会在找到时输出间隔值,例如60-70。感谢您的帮助 def binary (array, value): while len(array)!= 0: mid = len(array) // 2 if value == array[mid]: return value elif value > array[mid]:

我正在尝试更改代码,这样它就不会查找数组的特定值,而是会在找到时输出间隔值,例如60-70。感谢您的帮助

def binary (array, value):

    while len(array)!= 0:
        mid = len(array) // 2

        if value == array[mid]:           
            return value
        elif value > array[mid]:       
            array = array[mid+1:]
        elif value < array [mid]:          
            array = array[0:mid]

sequence = [1,2,5,9,13,42,69,123,256]

print( "found", binary(sequence,70) ) 
def二进制(数组,值):
而len(数组)!=0:
mid=len(数组)//2
如果值==数组[mid]:
返回值
elif值>数组[mid]:
数组=数组[mid+1:]
elif值<数组[mid]:
数组=数组[0:mid]
序列=[1,2,5,9,13,42,69123256]
打印(“找到”,二进制(序列,70))

到目前为止,我已经有了这个,并且希望它找到一个指定的间隔,所以如果我指定60-70,它将找到介于两者之间的内容

实际上这很简单:
在搜索区间
(下,上)
中的元素时,在数组
arr
上执行二进制搜索,以查找最小元素
arr[n]
的索引,从而
arr[n]>=下
和最大元素
arr[m]
,从而
arr[m]m:不存在解决方案

搜索超过某个阈值的值可以使用如下二进制搜索完成:

def lowestGreaterThan(arr, threshold):
    low = 0
    high = len(arr)

    while low < high:
        mid = math.floor((low + high) / 2)

        print("low = ", low, " mid = ", mid, " high = ", high)

        if arr[mid] == threshold:
            return mid
        elif arr[mid] < threshold and mid != low:
            low = mid
        elif arr[mid] > threshold and mid != high:
            high = mid
        else:
            # terminate with index pointing to the first element greater than low
            high = low = low + 1

    return low
def低于(arr,阈值):
低=0
高=长(arr)
低<高:
中间=数学楼层((低+高)/2)
打印(“低”,“低”,“中”,“中”,“高”,“高”)
如果arr[mid]==阈值:
中途返回
elif arr[mid]<阈值和mid!=低:
低=中
elif arr[mid]>阈值和mid!=高:
高=中
其他:
#终止时索引指向大于low的第一个元素
高=低=低+1
低回报

对于代码的外观很抱歉,我的python还远远不够完美。无论如何,这应该表明该方法背后的基本思想。该算法基本上搜索属性为
arr[ind]>=threshold的数组中第一个元素的索引
ind
binaryInterval
函数的作用是什么?它已定义,但从未调用。请更清楚地了解返回的时间间隔和格式。您的示例
60-70
在您的示例
序列中似乎没有意义。还是我的部分理解完全错了?你的意思是它应该定位在这个区间内的值,在这种情况下,
69
?是的,我正在尝试更改binaryInterval函数,以便它能够在间隔中定位值,因此是的,例如69我编辑了我所写的内容,希望它更容易理解。我理解你用上下两个字母所说的内容,但是我不知道如何应用它(很抱歉,我在学校学习编码只是为了学习)@PeterMikel好吧,二进制搜索不仅可以用于搜索数组中的特定值,还可以用于搜索超过某个阈值的值。我将用一个例子更新答案。@PeterMikel很高兴帮助你:)因为你似乎是新来的:它在这里很常用,如果答案解决了您的问题,则将其标记为已接受。描述如何执行此操作;)