2 (** A simple programming exercise: find out the most frequent value in an array
4 Using an external table (e.g. a hash table), we can easily do it
5 in linear time and space.
7 However, if the array is sorted, we can do it in linear time and
10 Author: Jean-Christophe FilliĆ¢tre (CNRS)
18 let most_frequent (a: array int) : int
19 requires { length a > 0 }
20 requires { forall i j. 0 <= i <= j < length a -> a[i] <= a[j] }
21 ensures { numof a result 0 (length a) > 0 }
22 ensures { forall x. numof a x 0 (length a) <= numof a result 0 (length a) }
26 for i = 1 to length a - 1 do
27 invariant { c = numof a a[i-1] 0 i }
28 invariant { m = numof a r 0 i }
29 invariant { forall x. numof a x 0 i <= m }
30 if a[i] = a[i-1] then begin
32 if c > m then begin m <- c; r <- a[i] end