Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4-Математическая логика и теория алгоритмов / Gmail / Учебное пособие-Математическая логика и теория алгоритмов.doc
Скачиваний:
507
Добавлен:
17.03.2015
Размер:
2.1 Mб
Скачать

3. Проблема разрешимости.

Проблема разрешимости является алгоритмической проблемой, в которой для заданного множества А требуется построить алгоритм, разрешающий А относительно другого множества В, включающего А(АВ)\, т.е. такой алгоритм U, который применим ко всякому элементу из В, причем U(x) = 1, если х А и U(x) = 0, если х В\А. Простейшим примером проблемы разрешимости является проблема разрешимости алгебры логики, в которой она состоит в отыскании алгоритма, позволяющего для каждой формулы алгебры логики установить, является ли она или тождественно истинной, или тождественно ложной, или выполнимой. Важным классом алгоритмических проблем является проблема разрешимости для формальных теорий, то есть проблема разрешимости для множества всех доказуемых (выводимых) в теории формул (множество А) относительно множества всех формул теории (множество В). Выше она была рассмотрена для аксиоматической теории исчисления высказываний

Глава 5 алгоритмы

С появлением ЭВМ стала актуальной теория алгоритмов. Теорию алгоритмов можно понимать как науку пограничную между математикой и информатикой.В этой главе рассматриваютсяопределения алгоритма, его свойства, представлены две формальные модели алгоритмов: машина Тьюринга и рекурсивные функции, примеры позволят студентам и всем интересующимся лицам овладеть определенным кругозором теоретических знаний и практических навыков.

§ 1. Понятие алгоритма и его характерные черты

Слово алгоритм (лат. – algoritmi) произошло от арабского имени средне-азиатского ученого IX века аль-Хорезми (полное имя – Абу Абдалла Мухаммед бен Муса аль Хорезми аль Меджуси). Оно претерпело эволюцию: ал Хорезми – ал Горезми – алгоритм.

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

  1. Правила выполнения арифметических действий над числами.

  2. Правило отыскания наибольшего общего делителя (алгоритм Евклида).

  3. Правило извлечения квадратного корня.

  4. Правило отыскания решений квадратного уравнения.

  5. Правило отыскания производной многочлена n-ой степени.

6. Правило интегрирования рациональной функции.

В каждом из приведенных примеров приходится иметь дело с классом однотипных задач, или, как говорят, с массовой проблемой. Задачи такого класса отличаются друг от друга значениями входящих в них параметров. Так, в задаче отыскания решения квадратного уравнения ах + bх + с = 0 участвует три параметра а, b и с; меняя их, получаем различные задачи одного класса.

В связи со сказанным можно дать следующее определение понятия алгоритма.

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

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

Возникает вопрос: так ли уж важно и необходимо иметь точное определение алгоритма, если и без него возможно составление и применение алгоритмов (причем даже без употребления самого термина)? Тем более что интуитивное понятие алгоритма хотя и не обладало строгостью, но было настолько ясным, что практически до ХХ в. не возникало ситуаций, когда математики разошлись бы в суждениях относительно того, является ли алгоритмом тот или иной конкретный процесс. Положение существенно изменилось в начале ХХ в., когда были сформулированы такие проблемы, алгоритмическое решение которых было не очевидным. Действительно, для доказательства существования алгоритма необходимо просто решить данную задачу, пользуясь набором известных приемов, или в их отсутствии предложить новые приемы. В таких ситуациях достаточно и интуитивного понятия алгоритма, чтобы удостовериться в том, что описанный процесс есть алгоритм. Гораздо сложнее доказать факт невозможности построения алгоритма решения некоторой задачи (или класса задач), без точного определения алгоритма эта проблема теряет смысл.

Другим основанием, потребовавшим построения точного определения алгоритма, явилась неопределенность понятия «элементарность шага» при выполнении алгоритмических действий. Пока математика изучала числовые объекты, действия с ними сводились к некоторой последовательности вычислительных операций, а элементарными считались арифметические операции, а также несколько логических, связанных с проверкой отношений между величинами, (равенство, неравенство, больше, меньше, и др.). Однако позднее математика перешла к исследованию свойств и действий со сложными объектами – векторами, матрицами, множествами, функциями – и понятие элементарности шага алгоритма перестало быть очевидным. Например, можно ли считать элементарным шагом взятие интеграла или транспонирование матрицы?

В тех ситуациях, когда задача допускает построение нескольких алгоритмов решения, с теоретической и практической точек зрения оказывается существенным вопрос их сопоставления и выбора наиболее эффективного, что также невозможно без строгого определения алгоритма. Таким образом, возникла необходимость в точном определении понятия «любой алгоритм», т.е. максимально общем определении, под которое подходили бы все мыслимые виды алгоритмов. В 20-е гг. ХХ в. построение определения алгоритма стало одной из центральных математических проблем. Определение это, с одной стороны, должно было соответствовать сущности интуитивного понятия алгоритма, а с другой стороны, быть формально строгим. Попытки формулировки такого понятия привели к появлению в 30-е гг. ХХ в. теории алгоритмов как самостоятельной науки, которая вместе с математической логикой изучает основные средства математики – методы доказательств, способы построения аксиоматических теорий, свойства математических процедур и пр. В 40-е – 50-е гг.началось бурное развитие вычислительной техники и наук, связанных с ее функционированием и использованием, и выяснилось, что в основе этих наук лежит теория алгоритмов, поскольку компьютер может реализовать только такие процедуры, которые представимы в виде алгоритмов. Любая программа есть не что иное, как запись алгоритма на языке, который может «понять» исполнитель – компьютер. Таким образом, уточнение понятия алгоритма с практической точки зрения является важной задачей.

В теории алгоритмов интуитивно-содержательное понятие алгоритма уточняется в строгих понятиях «рекурсивная функция», «машина Тьюринга», «нормальный алгоритм» и др.

Отметим характерные черты понятия алгоритма.

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

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

  3. Элементарность шагов алгоритма. Закон получения последующей системы величин из предшествующей должен быть простым.

  4. Массовость алгоритма. Массовость алгоритма заключается в возможности применения алгоритма к целому классу однотипных задач, различающихся конкретными значениями исходных данных. Начальная система величин (исходные данные) может выбираться из некоторого потенциально бесконечного множества.

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

  6. Определенность. Определенность состоит в совпадении получаемых результатов независимо от пользователя и применяемых технических средств.

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

Способы описания алгоритмов. К основным способам описания алгоритмов относятся следующие:

а) словесно-формульный;

б) структурный или блок-схемный;

в) с помощью граф-схем;

г) с помощью сетей Петри.

При словесно-формульном способе алгоритм записывается в виде текста с формулами по пунктам, определяющим последовательность действий.

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

Алгоритмы, в которых основную роль играют математические действия, называются численными алгоритмами (приведены примеры в начале лекции). От численных алгоритмов отделяют логические алгоритмы игр. В качестве примера, дающего логический алгоритм, рассмотрим следующую игру.

Имеется 15 предметов. В игре участвуют двое: начинающий и противник. Каждый игрок по очереди берет один, два или три предмета. Выигрывает тот, кто берет последний предмет. Какой стратегии в игре должен придерживаться начинающий, чтобы выиграть?

Выигрышная стратегия начинающего может быть описана в форме следующей таблицы:

Номер

Ход начинающего

Ход противника

1

3

n

2

4 – n

m

3

4 – m

p

4

4 – p

0

Действительно, в итоге такой стратегии начинающий возьмет 3 + (4 - п) + (4 - m) + (4 - р) = 15 - (п + m + р) предметов, а противник возьмет п + т + р предметов, т.е. в сумме они возьмут 15 предметов, и последний предмет будет взят начинающим.