我对算法还很陌生,遇到了一个问题,我的方法无法正常使用。 这是前提:
系统会为您提供n对整数的列表L=[(a1,b1),…,(an,bn)]
。对于任意两对(ai,bi)∈L
和(aj,bj)∈L
使得1≤i≤j≤n,我们(至少)具有以下三种情况之一:
例如,列表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
答案 0 :(得分:3)
您总是选择一半,但是在某些情况下,您不知道要搜索哪一半。您可以执行以下操作对其进行修正:
window.addEventListener("beforeunload", function (e) {
var confirmationMessage = "\o/";
(e || window.event).returnValue = confirmationMessage; //Gecko + IE
return confirmationMessage; //Webkit, Safari, Chrome
});