Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MLTA_shpory2.doc
Скачиваний:
102
Добавлен:
23.12.2018
Размер:
2.34 Mб
Скачать

62.Алгоритмические логики. Принципы построения алгоритмической логики. Алгоритмическая логика Хоара.

В начале 70-х годов XX века возникли алгоритмические логики. Цель — описание семантики языков программирования. Алгоритмические логики включают высказывания вида {} S {}, читающиеся как «если до выполнения оператора S было выполнено , то после него будет ». Эти логические языки практически одновременно изобретены Р.У.Флойдом (1967), К.Хоаром (1969) и представителями польской логической школы (А.Сальвиницкий и др. (1970)). Принципы построения алгоритмической логики L0. Память в L0 разделена на ячейки. Каждая ячейка имеет идентификатор, представляющий собой слово из латинских букв и цифр и начинающийся с буквы. Ячейки содержат натуральные числа. Программа в L0 состоит из операторов. Исходный оператор — присваивание: х := е, где х — идентификатор, а е — выражение, составленное из идентификаторов и натуральных чисел. Пусть состояние памяти после присваивания удовлетворяет условию А(х), где А — формула формальной арифметики. Тогда состояние, которое было до присваивания, опишем формулой А(х|е). (К примеру, если А(х) — это х < 2 и х := х + 1, то А(х | х + 1) — это х + 1 < 2. Следовательно, чтобы после присваивания х := х + 1 стало истинным х < 2, требуется, чтобы до присваивания выполнялось неравенство х + 1 < 2, т.е. |= {х + 1 < 2}х := х + 1{х < 2}.) Иначе говоря, имеем высказывание {А(х|е)}х := е{ А(х)}. Пусть два оператора S1, S2 выполняются один за другим. Тогда этому соответствует логическая запись вида Frame1. Условный оператор IF A1  S1  A2  S2  ... An  Sn FI, где A1, ... An — логические выражения, построенные из отношений е1 = е2, е1 > е2 при помощи логических связок; Si — последовательность операторов. Проверяются формулы Ai при настоящем состоянии памяти. Если ни одна из Ai не истинна, то фиксируется ошибка. Если же некоторые Ai истинны, то выбирается одна их них (неважно как) и выполняется соответствующая последовательность операторов Si». Цикл DO A1  S1  A2  S2  ... An  Sn OUT B1  T1  B2  T2  ...  Bm  Tm OD. Выполняется оператор цикла следующим образом. Проверяются формулы A1, ... An,B1,...,Bm при настоящем состоянии памяти. Если ни одна из них не истинна, то фиксируется ошибка. Если же некоторые истинны, то выбирается одна их них (неважно как). Если выбрана Ai, то выполняется соответствующая последовательность операторов Si и выполнение цикла возобновляется. Если выбрана Bi, то выполняется соответствующая последовательность операторов Ti и выполнение цикла завершается. Алгоритмическая логика Хоара. Основой для логики выводов правильных программ служат аксиомы Хоара (правила верификации). Они допускают интерпретации в терминах программных конструкций. Аксиомы Хоара определяют предусловия как достаточные условия, гарантирующие, что исполнение соответствующего оператора при успешном завершении приведет к желаемым постусловиям.

64.Асимптотическая сложность, порядок сложности. Сложность в среднем и в худшем случае.

Несмотря на то, что функция временной сложности алгоритма в некоторых случаях может быть определена точно, в большинстве случаев искать точное её значение бессмысленно. Дело в том, что во-первых, точное значение временной сложности зависит от определения элементарных операций (например, сложность можно измерять в количестве арифметических операций или операций на машине Тьюринга), а во-вторых, при увеличении размера входных данных вклад постоянных множителей и слагаемых низших порядков, фигурирующие в выражении для точного времени работы, становится крайне незначительным. Рассмотрение входных данных большого размера и оценка порядка роста времени работы алгоритма, приводит к понятию асимптотической сложности алгоритмов. Обычно алгоритм с меньшей асимптотической сложностью является более эффективным для всех входных данных, за исключением лишь, возможно, данных малого размера. Для записи асимтотической сложности алгоритмов используются следующие обозначения:

Классы сложности

Класс сложности — это множество задач распознавания, для решения которых существуют алгоритмы, схожие по вычислительной сложности. Два важных представителя:

Класс P

Класс P вмещает все те проблемы, решение которых считается «быстрым», то есть полиномиально зависящим от размера входа. Сюда относится сортировка, поиск во множестве, выяснение связности графов и многие другие.

Класс NP

Класс NP содержит задачи, которые недетерминированная машина Тьюринга в состоянии решить за полиномиальное количество времени. Следует заметить, что недерминированная машина Тьюринга машина является лишь абстрактной моделью, в то время как современные компьютеры соответствуют детерминированной машины Тьюринга с ограниченной памятью. Таким образом, класс NP включает в себя класс P, а также некоторые проблемы, для решения которых известны лишь алгоритмы, экспоненциально зависящие от размера входа (т.е. неэффективные для больших входов). В класс NP входят многие знаменитые проблемы, такие как задача коммивояжёра, задача выполнимости булевых формул, факторизация и др.

Пример

«пропылесосить ковер» требует время, линейно зависящее от его площади (Θ(A)), то есть на ковер, площадь которого больше в два раза, уйдет в два раза больше времени. Соответственно, при увеличении размера ковра в сто тысяч раз, объем работы увеличивается строго пропорционально в сто тысяч раз, и т. п.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]