【发布时间】:2013-04-01 23:20:49
【问题描述】:
有人可以为以下简单算法提供一个可能的循环不变量:
输入:A[0,...,n-1] 和 B[0,...,m-1],每个都可能包含重复的元素
输出:第一对 (i,j) 使得A[i] == B[j]。
算法:
for i <- 0 to n-1
for j <- 0 to m-1
if A[i] = B[j] then
return (i,j)
endif
endfor
endfor
return null
到目前为止,我只有一种可能有效也可能无效的解决方案:
S = {(i,j) | A[0,...,i-1] and B[0,...,j-1] has no common elements}
【问题讨论】:
-
数组排序了吗?
-
什么是“第一对...”——最小的
i?最小的j?最小的i+j?有多个可能的对的顺序,因此您必须先指定这意味着什么才能获得答案...例如,如果A[0] == B[m-1],那将是A[1] == B[1]的“第一”吗? -
@twalberg 上述算法的循环不变量。我认为使用指定的算法,第一对应该很清楚:)