Author: Stan Eisenstat
Subject: Re: [Cs223] Loop Invariants
Date: Monday, 02 Mar 2020, 07:59:13
c: Bcc: bcc > Message Posted By: Unknown > > How do you pick a good loop invariant? and should it tell us anything > about the algorithm? The exams will not require loop invariants. A loop invariant must: * be true before entering the loop; * be true at the end of the body of the loop if it is true at the beginning; and * imply the property that you want satisfied when the loop exits. The choice of a good loop invariant is often more art than science. ===== > You mentioned in class that loop invariants can be used to check if the > output of an algorithm is correct. Does that mean the loop invariant must > somehow relate the input with the output? Yes, as described above. ===== > Let's say we have the following loop: > > sum = 0; > for (int i=0; i<5; i++) { > sum +=i; > } > > Can the loop invariant be something like i<=sum? Would it be a good loop > invariant? If so, would it tell us anything significant? Rewrite the loop as sum = 0; int i = 0; while (i<5) { sum +=i; i++; } to better separate the different pieces of a for loop. If your goal is to prove that when the loop ends sum is equal to the sum of the integers between 0 (inclusive) and 5 (exclusive), then then a loop invariant would be sum = "sum of all integers j satisfying 0 <= j < i" Clearly it satisfies the properties above. --Stan-PREV INDEX NEXT