2017-02-12 8 views
0
k :=0 
for i ←1 to n 
    c←a[i] 
      k←k+1 

이에 변화가 나던 것은이 요소알고리즘

+0

나는 k> = i가 루프 전에, 그 동안, 그리고 그것이 @NickA –

+0

으로 끝나는 것을 발견했다. 이미했던 모든 작업을 질문에 넣는 것이 더 도움이된다. 그들은 당신이 적어도 문제를 해결하려고 노력했다고 생각한다면. @Alexandra –

+0

고맙습니다. @NickA, 도와 주실 수만 있다면 –

답변

0

기술적으로의 수를 알 수있는 algorithim이다, 그래, k <= i는 불변하지만 매우 유용한 일이다. 우리가 불변량을 사용하는 이유는 루프 이후에 상태를 증명할 수 있기 때문입니다. invariant를 사용하면 루프 이후에 k <= n이 있다는 것을 증명할 수 있습니다. 사실이지만 루프가 실제로 무엇을하는지 증명하려고하는 것은 도움이되지 않습니다.

그래서 어떤 불변량이 유용할까요? 우리는 kab에있는 요소의 수와 동일하다는 것을 증명하고 싶습니다. a의 요소를 반복하므로 좋은 선택은 k이고 a[i]까지의 요소 수는 b입니다.


이제이 불변성이 있음을 증명해야합니다. 나는 그것을 좀 더 개략적으로 유지할 것이므로 이것을 공식화하는 것은 당신에게 달려있다.

초기에 우리는 k = 0a[1] 앞에있는 요소의 수이고 또한 b 인 것을 보여줄 필요가 있습니다. 해당 요소가 없기 때문에 k = 0이 맞습니다.

이제는 까지의 요소 수가 b이기 때문에에 대해 불변식이 성립한다는 것을 증명해야합니다. 두 가지 옵션이 있습니다. a[i+1]b에 있거나없는 것입니다.

  • ba[i+1] 경우 ba[i + 1]까지의 요소의 수는 ba[i] 최대 요소의 수보다 하나 더 크다. 불변 식을 사용하면 ki+1 = ki + 1을 표시해야합니다.
  • a[i+1]하지 b에서 다음 ba[i + 1] 최대 요소의 수가 ba[i] 최대 요소의 수와 동일한 경우. 불변량을 사용하면 ki+1 = ki을 표시해야합니다.

나는 그 사실을 증명하기 위해 남겨 두겠습니다.

+0

나는이 사실을 이해합니다. 이제 초기화, 유지 보수 및 종료를 통해 루프 불변성을 증명하려고합니다. 초기화에서 우리는 첫 번째 반복 k = 0 전에 말합니다. maintanance에서 내가 말하거나 증명해야하는 것은 무엇입니까? @ Vincent van der Weele –

+0

증명 스케치에 대한 부분을 추가했습니다. 네가 거기에서 가져갈 수 있기를 바랍니다. –