Как видно из раздела «Введение в алгоритмы» (http://mitpress.mit.edu/algorithms), в упражнении говорится следующее:
Входные данные: массив A[1..n]
и значение v
Вывод: индекс i
, где A[i] = v
или NIL
, если v
не найдено в A
Напишите псевдокод для LINEAR-SEARCH, который сканирует последовательность в поисках v. Используя инвариант цикла, докажите, что ваш алгоритм верен. (Убедитесь, что ваш инвариант цикла удовлетворяет трем необходимым свойствам — инициализация, обслуживание, завершение.)
У меня нет проблем с созданием алгоритма, но чего я не понимаю, так это того, как я могу решить, каков мой инвариант цикла. Я думаю, что понял концепцию инварианта цикла, то есть условия, которое всегда истинно перед началом цикла, в конце/начале каждой итерации и остается истинным, когда цикл заканчивается. Обычно это и является целью, например, в сортировка вставками, перебирая j
, начиная с j = 2
, A[1..j-1]
элементов всегда сортируются. Это имеет смысл для меня. Но для линейного поиска? Я ничего не могу придумать, это звучит слишком просто, чтобы думать об инварианте цикла. Я что-то не так понял? Я могу думать только о чем-то очевидном, например (это либо NIL, либо между 0 и n). Заранее большое спасибо!