Я изучаю инварианты цикла в настоящий момент, и у меня возникают проблемы с моим выбором для инварианта для алгоритма линейного поиска.Правильность алгоритма
Inpput: A[1 ... n] of integers, k an integer value
Output: true if k belongs to A[1 ... n] false otherwise
LSearch(A,k)
i := 1
found := false
WHILE i<=n AND found=false DO
IF A[i] = k THEN
found := true
i:=i+1
return found
Утверждение, которое я выбираю это:
- найдено содержит истинным или ложным, если к присутствует среди [1] и A [I]
Перед тем, первая итерация выполняется, потому что в то время в A [1] находится один элемент и найденный инициализируется как false.
После цикла i может быть равным i: = 1 найдено: = falseto n и/или найдено может быть истинным (пока условие), поэтому утверждение остается неизменным с учетом i < = n.
Считаете ли вы, что это может быть правильно?
Почему бы не вернуть TRUE при обнаружении решения? –
Код находится в моем учебнике. По вашему мнению, инвариант был бы другим, я думаю. – Daved
Извините, не заметил «AND found = false» в условии while-loop –