Java 查找两个嵌套while循环的循环不变量
我对不变量有点熟悉,我或多或少能在一个小循环中找到它。 在为下面的java伪代码求解不变量时,我感到非常困惑。 有人能帮忙吗Java 查找两个嵌套while循环的循环不变量,java,nested-loops,invariants,loop-invariant,Java,Nested Loops,Invariants,Loop Invariant,我对不变量有点熟悉,我或多或少能在一个小循环中找到它。 在为下面的java伪代码求解不变量时,我感到非常困惑。 有人能帮忙吗 Input: an array A i <- length(A) # outer invariant while i != 0 do k <- i j <- i - 1 # inner invariant while j != 0 do if A[j] > A[k] then k <- j j &l
Input: an array A
i <- length(A)
# outer invariant
while i != 0 do
k <- i
j <- i - 1
# inner invariant
while j != 0 do
if A[j] > A[k] then
k <- j
j <- j - 1
# inner invariant
swap(A, i, k)
i <- i - 1
# outer invariant
输入:数组A
i您应该从内部循环开始计算嵌套循环的不变量:
while (j != 0) {
if (A[j] > A[k]) {
k = j;
}
j--;
}
你可以观察到
A[k] >= A[x], for any (j < x) && (x <= i)
这是另一种说法,A[k]
是MAX(A[0:i])
现在,您可以继续执行外部循环:由于i
从A.length
开始向下移动到零,因此不变量将为
A[y] < A[x], for any (y >= i) for any (y < x <= Length(A))
您应该从内部循环开始计算嵌套循环的不变量:
while (j != 0) {
if (A[j] > A[k]) {
k = j;
}
j--;
}
你可以观察到
A[k] >= A[x], for any (j < x) && (x <= i)
这是另一种说法,A[k]
是MAX(A[0:i])
现在,您可以继续执行外部循环:由于i
从A.length
开始向下移动到零,因此不变量将为
A[y] < A[x], for any (y >= i) for any (y < x <= Length(A))
您的代码片段可以按如下方式缩减和格式化(您是否习惯C语言语法?)
根据上述片段,传递到Sigma符号不会太麻烦:
您的代码片段可以按如下方式缩减和格式化(您是否习惯C语言语法?)
根据上述片段,传递到Sigma符号不会太麻烦:
@dasblinkenlight你也能帮我吗?这令人困惑me@dasblinkenlight你也能帮我吗?这让我很困惑