알고리즘
답변
기술적으로의 수를 알 수있는 algorithim이다, 그래, k <= i
는 불변하지만 매우 유용한 일이다. 우리가 불변량을 사용하는 이유는 루프 이후에 상태를 증명할 수 있기 때문입니다. invariant를 사용하면 루프 이후에 k <= n
이 있다는 것을 증명할 수 있습니다. 사실이지만 루프가 실제로 무엇을하는지 증명하려고하는 것은 도움이되지 않습니다.
그래서 어떤 불변량이 유용할까요? 우리는 k
이 a
과 b
에있는 요소의 수와 동일하다는 것을 증명하고 싶습니다. a
의 요소를 반복하므로 좋은 선택은 k
이고 a[i]
까지의 요소 수는 b
입니다.
이제이 불변성이 있음을 증명해야합니다. 나는 그것을 좀 더 개략적으로 유지할 것이므로 이것을 공식화하는 것은 당신에게 달려있다.
초기에 우리는 k = 0
이 a[1]
앞에있는 요소의 수이고 또한 b
인 것을 보여줄 필요가 있습니다. 해당 요소가 없기 때문에 k = 0
이 맞습니다.
이제는 까지의 요소 수가 b
이기 때문에에 대해 불변식이 성립한다는 것을 증명해야합니다. 두 가지 옵션이 있습니다. a[i+1]
은 b
에 있거나없는 것입니다.
- 는
b
에a[i+1]
경우b
에a[i + 1]
까지의 요소의 수는b
에a[i]
최대 요소의 수보다 하나 더 크다. 불변 식을 사용하면ki+1 = ki + 1
을 표시해야합니다. a[i+1]
하지b
에서 다음b
에a[i + 1]
최대 요소의 수가b
에a[i]
최대 요소의 수와 동일한 경우. 불변량을 사용하면ki+1 = ki
을 표시해야합니다.
나는 그 사실을 증명하기 위해 남겨 두겠습니다.
나는이 사실을 이해합니다. 이제 초기화, 유지 보수 및 종료를 통해 루프 불변성을 증명하려고합니다. 초기화에서 우리는 첫 번째 반복 k = 0 전에 말합니다. maintanance에서 내가 말하거나 증명해야하는 것은 무엇입니까? @ Vincent van der Weele –
증명 스케치에 대한 부분을 추가했습니다. 네가 거기에서 가져갈 수 있기를 바랍니다. –
나는 k> = i가 루프 전에, 그 동안, 그리고 그것이 @NickA –
으로 끝나는 것을 발견했다. 이미했던 모든 작업을 질문에 넣는 것이 더 도움이된다. 그들은 당신이 적어도 문제를 해결하려고 노력했다고 생각한다면. @Alexandra –
고맙습니다. @NickA, 도와 주실 수만 있다면 –