나는 루프 불변에 대해 다음과 같은 문제를 주어진했습니다올바른 루프 불변성을 선택하고 설정하는 방법은 무엇입니까?
이
x=4; for(i=5;i<k;i++) { a=a+x+i; x=x*2; }
가와 X 용 폐쇄 공식을 이용하는 appropiate 루프 불변의 정의를 생각해 보자.
자, 여기에 올바른 루프 불변성이 있음을 어떻게 알 수 있습니까? 나는 당신이 loop invariant를 다음과 같이 설정할 수 있음을 의미합니다 : "j 번째 반복에서 'x'는 올바른 'closed'공식을 사용하지 않고 'a'보다 작습니까?
루프가 끝났을 때 명령문 (루프 불변 값)을 사용하여 "a"의 값을 결정할 수 있습니까? 내가 본 모든 예제는 루프 불변 식과 그식이 닫힌 수식으로 사용되지 않는다는 것을 나타냅니다.
아이디어가 있으십니까?
도움 주셔서 감사합니다. 밀폐 식으로
안녕하세요, 저는 실제로이 같은 재귀 관계를 설정했지만 실제로 제대로 작동하는지는 알지 못했습니다. 글쎄, (j + 1)에서 우리는 (0) = 0은 (0) = 0 + 4 + 0 + 5 = 9를 우리에게 준다는 것을 안다. 닫힌 폼 수식은 j와 관련하여 재귀 관계가없는 j로 표현됩니까? 심지어 x (j)를 사용하지 않습니까? 표현식은 다음과 같습니다. a (j) = a (j-1) + x (j-1) + (j-1) +5 – pcp
수정 : a (1) = 0 + 4 + 0 + 5 = 0 – pcp
@pcp이므로 재귀 관계가 있습니다. a (k)는 5-1의 k에 대한 합계 (즉, 4 배의 j)와 k의 k에 대한 합계입니다. j times j + 1)에 k의 합을 4 배 (2 ** j + 4의 4 배) 씩 합친 것입니다. 그래서, (k)를 k의 함수로 표현할 수 있습니까? 그것은 "닫힌 양식"입니다. 쉬운 by-by-1을 쉽게 만들 수 있지만 수식과 약간의 반복 계산을 쉽게 비교할 수 있습니다. 그러면 invariant는 본질적으로 i의 함수로서 a의 값에 대한 설명이 될 것입니다. –