Python 通过字符串进行二进制搜索
我对python(3.3)比较陌生,我只是尝试通过一个单词列表进行二进制搜索,当涉及到循环索引时,我不知道如何修复我的操作数类型。。。我继续得到类型错误。我想不出有什么办法Python 通过字符串进行二进制搜索,python,binary-search,Python,Binary Search,我对python(3.3)比较陌生,我只是尝试通过一个单词列表进行二进制搜索,当涉及到循环索引时,我不知道如何修复我的操作数类型。。。我继续得到类型错误。我想不出有什么办法 def find(L, target): start = 0 end = len(L) - 1 while start <= end: middle = (start + end)// 2 midpoint = L[middle] if mi
def find(L, target):
start = 0
end = len(L) - 1
while start <= end:
middle = (start + end)// 2
midpoint = L[middle]
if midpoint > target:
end = midpoint - 1
elif midpoint < target:
start = midpoint + 1
else:
return midpoint
def查找(L,目标):
开始=0
结束=长度(L)-1
启动目标时:
结束=中点-1
elif中点<目标:
起点=中点+1
其他:
返回中点
我这样调用函数:
L=[“布莱恩”、“梅格”、“彼得”、“乔”、“斯图”、“露易丝”]
查找(L,“Joe”)除了输入和递增和递减中点而不是中点的错误之外,您的逻辑似乎很好
def find(L, target):
start = 0
end = len(L) - 1
while start <= end:
middle = (start + end)/ 2
midpoint = L[middle]
if midpoint > target:
end = middle - 1
elif midpoint < target:
start = middle + 1
else:
return midpoint
L = ["Brian", "Joe", "Lois", "Meg", "Peter", "Stewie"] # Needs to be sorted.
print find(L, "Peter")
def查找(L,目标):
开始=0
结束=长度(L)-1
启动目标时:
结束=中间-1
elif中点<目标:
开始=中间+1
其他:
返回中点
L=[“布赖恩”、“乔”、“露易丝”、“梅格”、“彼得”、“斯图”需要排序。
打印查找(L,“Peter”)
def查找(L,目标):
开始=0
结束=长度(L)-1
启动目标时:
结束=中间-1
elif中点<目标:
开始=中间+1
其他:
返回中点
L=[“布赖恩”、“乔”、“露易丝”、“梅格”、“彼得”、“斯图薇”]
L=已排序(L)
打印(查找(L,“意向书”))
正如其他人所指出的,使用中点而不是中点
要优化使用二进制搜索,请首先对列表进行排序def binarySearchOnString(arr,x):
def binarySearchOnString(arr, x):
l = 0
r = len(arr) - 1
while (l <= r):
m = (l + r) // 2
if (arr[m] == x):
return m
elif (arr[m] < x):
l = m + 1
else:
r = m - 1
return -1 # If element is not found then it will return -1
l=0
r=len(arr)-1
虽然(l二进制搜索只适用于排序列表middpoint
是一个字符串。middpoint-1
应该做什么?@FernandoMatsumoto可能是一个打字错误。我想他的意思是middle-1
,middle+1
。要对数组进行成功的二进制搜索,数组中的数据必须按排序顺序进行。除了Brian a之外的所有条目都是We's out position-序列应该是Brian、Joe、Lois、Meg、Peter、Stewie。@jianweichuah我认为Fernando指出了错误。如果你试图找到一个不存在的字符串怎么办?返回了什么?@cricket\u 007 None。不确定OP的用例是排序的(L)
返回包含L
元素的新排序列表。使用L=sorted(L)
或L.sort()
。
def binarySearchOnString(arr, x):
l = 0
r = len(arr) - 1
while (l <= r):
m = (l + r) // 2
if (arr[m] == x):
return m
elif (arr[m] < x):
l = m + 1
else:
r = m - 1
return -1 # If element is not found then it will return -1