Python 同时使用两个中间(两个指针)进行二进制搜索
我只是想把数组分成三个子数组,而不是两个子数组 首先,这样做合乎逻辑吗?请帮我理解这个算法并写下来Python 同时使用两个中间(两个指针)进行二进制搜索,python,algorithm,binary-search,Python,Algorithm,Binary Search,我只是想把数组分成三个子数组,而不是两个子数组 首先,这样做合乎逻辑吗?请帮我理解这个算法并写下来 def contains(elements, value): left, right = 0, len(elements) - 1 if left <= right: middle = (left + right) // 2 if elements[middle] == value: return True if elements[middle]
def contains(elements, value):
left, right = 0, len(elements) - 1
if left <= right:
middle = (left + right) // 2
if elements[middle] == value:
return True
if elements[middle] < value:
return contains(elements[middle + 1:], value)
elif elements[middle] > value:
return contains(elements[:middle], value)
return False
def包含(元素、值):
左,右=0,len(元素)-1
如果为左值:
返回包含(元素[:中间],值)
返回错误
您确实可以调整二进制搜索,将数组拆分为多个部分,而不仅仅是两个部分。更一般地说,以下是k元搜索背后的想法:
- 将数组拆分为大小大致相等的k个部分。(对于二进制搜索,这是两半。对于您的搜索,这将是三分之三)
- 选择第一个(k-1)部分的最后一个元素作为关键点。(对于二进制搜索,您选择前半部分的最后一个元素,即中间元素。对于搜索,这将是数组中1/3和2/3点处的元素。)
- 根据您的元素与键的比较情况,(1)停止搜索,因为您找到了要查找的内容,或者(2)递归地浏览相应的部分。(在二进制搜索中,您可以向左分支,停止,因为中间的元素是您想要的元素,或者向右分支。在搜索中,您可以(1)发现您的元素是您选择要查看的两个元素之一,或者(2)将下降到包含您的元素的三分之一。)
希望这有帮助 如果将其拆分为三个,则根据定义,它不再是二进制搜索。:)也许你想要三元搜索。但这里似乎真的没有必要。旁白:最后一个
elif
可以更改为else
(elements[middle]>值
此时必须为真)。