1
我有这个功能f(n) = x
使用二分查找来找出x可能不存在的。问题是,f(n)
区分偶数和奇数,f(x) < f(x+2)
有保证,但f(x) < f(x+1)
不是。二进制搜索功能,取决于偶数和奇数输入
例用有限列表:
x = [0,1,1,2,3,5,4,7,6,8,13]
x[5] < x[7] but f[5] > f[6]
目前我做两个不同的binarySearches,一个为偶数,一个用于上:
def binarySearch(n, lower, upper, even):
mid = (upper+lower)//2
if even:
if mid % 2 != 0:
mid += 1
else:
if mid % 2 != 1:
mid += 1
...
但确保mid
是偶数或奇数给我停止的问题和我产生StackOverflows。我在哪里以及如何确保这不会发生?
奖励:如何解决这个问题,而不使用两个单独的binarySearches?
'x [5] x [6]',当然。 –
2014-12-06 13:56:24
'(mid // 2)* 2'怎么样? – Wolph 2014-12-06 14:03:07