【问题标题】:What is the possible loop invariant什么是可能的循环不变量
【发布时间】: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 上述算法的循环不变量。我认为使用指定的算法,第一对应该很清楚:)

标签: algorithm loop-invariant


【解决方案1】:

在第一个循环的pth 迭代内的第二个循环的qth 迭代开始时,A[i] != B[j] 对所有i = 0...p - 1, j = 0...q - 1

【讨论】:

  • 基本上,您的解决方案与我在问题中包含的解决方案相同。实际上,这是我唯一解决的问题。理论上,应该找到无限数......
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2011-06-05
相关资源
最近更新 更多