Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找两个嵌套while循环的循环不变量_Java_Nested Loops_Invariants_Loop Invariant - Fatal编程技术网

Java 查找两个嵌套while循环的循环不变量

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

我对不变量有点熟悉,我或多或少能在一个小循环中找到它。 在为下面的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 <- 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你也能帮我吗?这让我很困惑