【发布时间】:2019-02-11 08:07:33
【问题描述】:
我对算法很陌生,我遇到了一个问题,我的方法不能正常工作。 这是前提条件:
给你一个包含 n 对整数的列表L=[(a1,b1),…,(an,bn)]。对于任意两对 (ai,bi)∈L 和 (aj,bj)∈L 使得 1≤i≤j≤n ,我们有(至少)三种情况之一:
- ai=aj 和 bi=bj
- ai
- bi
例如,L=[(1,2),(1,1)] 列表无效。一个有效列表的例子是:
L = [(0,1), (1, 0), (0, 1), (1, 1), (1, 2), (3, 1), (3, 1), (2, 2), (2, 3), (3, 2), (2, 3), (4, 3), (3, 4), (4, 4), (4, 5), (5, 5)]
问题是:编写一个递归函数,应用分而治之的范式来搜索给定的值对 (x, y) 是否在 L 中。
以下是我的 python 代码,它不能按预期工作:
def pair_search(l, p):
found = False
calls = 1
if len(l) == 0:
return found, calls
if len(l) == 1:
if l[0] == p:
found = True
return found, calls
mid = len(l) // 2
if p == l[mid]:
found = True
return found, calls
elif (l[mid][0] == p[0] and l[mid][1] == p[1]) or l[mid][0] < p[0] or l[mid][1] < p[1]:
f, c = pair_search(l[mid + 1:], p)
else:
f, c = pair_search(l[:mid], p)
found = f or found
calls += c
return found, calls
【问题讨论】:
-
如果你尝试应用二分搜索,你首先应该对
L进行排序。
标签: python algorithm list divide-and-conquer