Python 包含2个已排序部分的列表中的二进制搜索
我知道二进制搜索只能在排序列表中工作 我想搜索(O(logn))并能够在包含2个排序部分的列表中找到一个项目 例:[20,30,1,2,3,4,5] O(logn)二进制搜索是唯一的选项吗Python 包含2个已排序部分的列表中的二进制搜索,python,binary-search,Python,Binary Search,我知道二进制搜索只能在排序列表中工作 我想搜索(O(logn))并能够在包含2个排序部分的列表中找到一个项目 例:[20,30,1,2,3,4,5] O(logn)二进制搜索是唯一的选项吗 我想在顺序丢失的地方拆分列表,但是,随着列表大小的变化,它将不再是我想要的复杂程度?对于这个特定问题,有多种方法,可以为您提供O(log n)解决方案- 正如@joran所提到的,您可以首先在O(logn)中搜索列表中的拆分点,然后在两个列表上再次进行二进制搜索,从而导致O(logn)的总体复杂性 您可以在一
我想在顺序丢失的地方拆分列表,但是,随着列表大小的变化,它将不再是我想要的复杂程度?对于这个特定问题,有多种方法,可以为您提供O(log n)解决方案-
# Search an element in sorted and rotated array using
# single pass of Binary Search
# Returns index of key in arr[l..h] if key is present,
# otherwise returns -1
def search(arr, l, h, key):
if l > h:
return -1
mid = (l + h) // 2
if arr[mid] == key:
return mid
# If arr[l...mid] is sorted
if arr[l] <= arr[mid]:
# As this subarray is sorted, we can quickly
# check if key lies in half or other half
if key >= arr[l] and key <= arr[mid]:
return search(arr, l, mid - 1, key)
return search(arr, mid + 1, h, key)
# If arr[l..mid] is not sorted, then arr[mid... r]
# must be sorted
if key >= arr[mid] and key <= arr[h]:
return search(a, mid + 1, h, key)
return search(arr, l, mid - 1, key)
# Driver program
arr = [4, 5, 6, 7, 8, 9, 1, 2, 3]
key = 6
i = search(arr, 0, len(arr) - 1, key)
if i != -1:
print ("Index: %d" % i)
else:
print ("Key not found")
#使用
#单遍二进制搜索
#返回arr[l..h]中键的索引(如果存在键),
#否则返回-1
def搜索(arr、l、h、键):
如果l>h:
返回-1
mid=(l+h)//2
如果arr[mid]==键:
中途返回
#如果arr[l…mid]已排序
如果arr[l]=arr[l]和key=arr[mid]和key,我认为您应该使用二进制搜索来查找拆分的O(log(n))
,那么您可以对每一半O(log(n))*2
=>O(3log(n))=>O(log(n))
。。。我想至少