Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СборкаМЛ_05_2008.doc
Скачиваний:
10
Добавлен:
01.04.2025
Размер:
1.37 Mб
Скачать

5.4 Начальное математическое обеспечение.

Приведем несколько программ, которым дадим обозначения и которые в дальнейшем используем для построения более сложных программ. Они будут составлять начальное математическое обеспечение программирования.

В таблице 4 приведены их схемы в предположении, что алфавит А состоит из символов a1, a2, a3, ….at; а символ # обозначен через a0. Кроме того считаем, что X, Y – произвольные псевдослова над алфавитом А; u1u2, …, un, u – слова в алфавите А. a – произвольный символ из A{#}; u-1 – слово, полученное из слова u изменением порядка символов на противоположный; n = 1, 2,…. Программы R, L, описанные в первых двух строчках таблицы, используются в последующих строчках.

Таблица 4.

Обозначение

Программы

Назначение

программы

Входное и выходное псевдослова, программа.

            1. L

Сдвиг головки влево, до пробела

            1. R

Сдвиг головки вправо до пробела

Kn

Копирование n-го вимвола

            1. S

Удаление буквы со сдвигом

Zn

Циклический сдвиг n слов

Λn

Удаление n-го слова

            1. I

Запись слова в обратном порядке

5.5 Методика доказательства правильности алгоритмов с помощью индуктивных утверждений.

Рассматриваемая методика предназначена для доказательства правильности алгоритмов, представленных в виде графов, вершинам которого поставлены в соответствие элементарные операторы над памятью, а дугам – переходы от оператора к оператору. Одну из вершин назовем входной, ей соответствует оператор, с которого начинается выполнение алгоритма, а выходных вершин может быть несколько. Считаем, что входная и выходная вершины помечены, соответственно, входящее и выходящей стрелками. Такие представления алгоритмов называют блок схемами.

Доказать правильность алгоритма это значит доказать утверждение вида:

“Если входные данные удовлетворяют входному условию, то алгоритм через конченое число шагов завершает работу и выходные данные удовлетворяют требуемому выходному условию.”

На практике такое утверждение часто разбивают на два.

(1) “Если входные данные удовлетворяют входному условию и алгоритм через конечное число шагов завершает работу, то выходные данные удовлетворяют требуемому выходному условию.”

(2) “Если входные данные удовлетворяют входному условию, то алгоритм через конечное число шагов завершает работу.”

Алгоритм, для которого доказано утверждение (1) называется частично правильным или частично корректным. Если же доказаны утверждения (1) и (2) то алгоритм называется правильным или корректным.

Заметим, что когда доказательство утверждения (2) представляет непреодолимые трудности, то ограничиваются доказательством утверждения (1). Таковы, например, итерационные алгоритмы, для которых неизвестна область сходимости. В таком случае, если алгоритм в приемлемое время завершает свою работу, то правильность ответа гарантируется.

Остановимся на доказательстве частичной корректности. Методика заключается в следующем.

  1. Для контроля за ходом вычислений выбираются, так называемые, контрольныедуги. К числу контрольных обязательно относят входную дугу и все выходные дуги, а также некоторое количество других дуг так, чтобы в блок-схеме алгоритма оказались “разрезанными” все циклы.

  2. Для каждой контрольной дуги формулируется индуктивное условие, которомупредположительно должно удовлетворять содержимое памяти алгоритма при каждом его прохождении через рассматриваемую дугу. Считаем, что все контрольные дуги (в дальнейшем будем их называть контрольными точками) и соответствующие им индуктивные утверждения пронумерованы.

  3. Для каждой пары i, j контрольных точек, для которых в блок-схеме имеется путь из i в j, минующий другие контрольные точки, выбираются все такие пути и для каждого выбранного пути доказывается следующее утверждение (индуктивный шаг): “Если при очередном проходе через точку i выполнялось индуктивное предположение Pi и если реализуется рассматриваемый путь, то при достижении точки j будет выполняться условие Pj”.

Если все эти шаги доказаны, то, используя принцип математической индукции, можно утверждать частичную корректность алгоритма.