
- •Введение
- •Раздел 1. Формулы логики
- •Тема 1.1 Логические операции
- •Тема 1.2 Законы алгебры логики
- •Законы алгебры логики
- •Равносильные преобразования
- •Тема 1.3 Функции алгебры логики Функции алгебры логики
- •Специальные представления булевых функций
- •Минимизация нормальных форм
- •Операция двоичного сложения. Многочлены Жегалкина
- •Некоторые методы перехода от булевых функций к полиному Жегалкина
- •Раздел 2. Множества и отображения
- •Тема 2.1 Множества Основные понятия теории множеств
- •Операции над множествами
- •Диаграммы Эйлера-Венна
- •Законы теории множеств
- •Соотношение между множествами и составными высказываниями
- •Соотношение между высказываниями и соответствующими им множествами истинности
- •Тема 2.2 Отображения Бинарные отношения
- •Отображения и функции
- •Раздел 3. Предикаты Предикаты. Операции над предикатами
- •Кванторы
- •Раздел 4. Элементы теории алгоритмов Основные понятия теории алгоритмов
- •В настоящее время полученные на основе теории алгоритмов практические рекомендации получают всё большее распространение в области проектирования и разработки программных систем.
- •Литература
Раздел 4. Элементы теории алгоритмов Основные понятия теории алгоритмов
Теория алгоритмов - это наука, изучающая общие свойства и закономерности алгоритмов, разнообразные формальные модели их представления. На основе формализации понятия алгоритма возможно сравнение алгоритмов по их эффективности, проверка их эквивалентности, определение областей применимости.
Разработанные в 1930-х годах разнообразные формальные модели алгоритмов (Пост, Тьюринг, Черч), равно как и предложенные в 1950-х годах модели Колмогорова и Маркова, оказались эквивалентными в том смысле, что любой класс проблем, разрешимых в одной модели, разрешим и в другой.
В настоящее время полученные на основе теории алгоритмов практические рекомендации получают всё большее распространение в области проектирования и разработки программных систем.
Первым дошедшим до нас алгоритмом в его интуитивном понимании – конечной последовательности элементарных действий, решающих поставленную задачу, считается предложенный Евклидом в III веке до нашей эры алгоритм нахождения наибольшего общего делителя двух чисел (алгоритм Евклида). Отметим, что в течение длительного времени, вплоть до начала XX века само слово «алгоритм» употреблялось в устойчивом сочетании «алгоритм Евклида». Для описания пошагового решения других математических задач использовалось слово «метод».
Начальной точкой отсчета современной теории алгоритмов можно считать работу немецкого математика Курта Гёделя.
Первые фундаментальные работы по теории алгоритмов были опубликованы независимо в 30-40-х годах Аланом Тьюрингом, Алоизом Черчем и Эмилем Постом. Предложенные ими машина Тьюринга, машина Поста и лямбда-исчисление Черча были эквивалентными формализмами алгоритма. Сформулированные ими тезисы (Поста и Черча-Тьюринга) постулировали эквивалентность предложенных ими формальных систем и интуитивного понятия алгоритма. Важным развитием этих работ стала формулировка и доказательство алгоритмически неразрешимых проблем.
В 1950-е годы существенный вклад в теорию алгоритмов внесли работы Колмогорова и Маркова.
К 1960-70-ым годам оформились следующие направления в теории алгоритмов:
Классическая теория алгоритмов;
Теория асимптотического анализа алгоритмов;
Теория практического анализа вычислительных алгоритмов.
Одним из центральных понятий современной математики является понятие алгоритма.
Варианты словесного определения алгоритма принадлежат российским ученым А.Н. Колмогорову и А.А. Маркову:
Определение Колмогорова: Алгоритм – это всякая система вычислений, выполняемых по строго определенным правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи.
Определение Маркова: Алгоритм – это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату.
Основные определения
Алгоритмом называется точное предписание, определяющее вычислительный процесс, который ведет от варьируемых исходных данных к искомому результату, т.е. алгоритм – это совокупность правил, определяющих данный вычислительный процесс.
Для каждого алгоритма существует некоторая совокупность возможных исходных данных — объектов, к которым имеет смысл применять рассматриваемый алгоритм. Для каждого алгоритма выделяется область применимости: если процесс применения алгоритма к какому-либо объекту заканчивается выдачей результатов, то говорят, что он применим к этому объекту.
Алгоритм задает функцию, определенную на его области применимости и ставящую в соответствие каждому элементу этой области результат применения к нему алгоритма.
Не все объекты, встречающиеся в математике, могут служить исходными данными, результатами или промежуточными данными алгоритма.
В алгоритмических процессах могут участвовать лишь конструктивные объекты.
Конструктивными объектами будем называть натуральные и рациональные числа, полиномы с натуральными или рациональными коэффициентами, матрицы с натуральными или рациональными элементами, слова в некотором алфавите и т. д., т. е. такие объекты, которые могут быть построены целиком и представлены для рассмотрения.
Поскольку возможными исходными данными и результатами алгоритма могут быть лишь конструктивные объекты, то лишь конструктивные объекты могут быть аргументами и значениями вычислимой функции.
По классическому
определению буква
– это
графический знак, который сам по себе
или в сочетании с другими знаками
используется для обозначения на письме
звуков, фонем, их основных вариантов и
их типичных последовательностей. По
А.А. Маркову «буквами называются знаки,
которые в данном их применении
рассматриваются только как целые. В
этом смысле типограф или знаки являются
буквами (при чтении книги нас не интересуют
части знаков, например Y
состоит из 2-х частей u
и j,
а лишь целые знаки). Буква – понятие
условное, его объем зависит от принятых
соглашений. Например, нижеприведенные
знаки рассматриваются как буквы, т.е.
как нерасчленяемые целые: ы, 2, !, =, ≤ .
Т.е. буквами можно считать любые заранее
оговоренные, имеющие достаточную ясную
форму знаки. Такие знаки, как
||
и т.д. можно считать буквами.
Конечный набор букв можно считать алфавитом. Желательно, чтобы буквы, входящие в алфавит, различались по форме. Практически применяемый алфавит должен содержать не очень большое число букв, т.к. могут появиться похожие знаки.
Настоящий буквенный алфавит впервые появился у древних греков. Всего в мире насчитывается около двухсот алфавитов.
Слово – это ряд написанных друг за другом букв. Слово в данном алфавите – это слово, каждая буква которого принадлежит данному алфавиту. Очень важное требование состоит в единственности разложения слова на буквы данного алфавита – требование невозможности разночтений. Невозможность разночтений может быть достигнута наложением надлежащих ограничений на рассматриваемые алфавиты и на способы написания слов в них.
Можно, например, выставить два следующих требования:
а) всякая буква алфавита должна быть связной, т.е. должна изображаться без отрыва карандаша от бумаги.
б) при написании слов следует оставлять промежуток между всякими двумя соседними буквами
Первое из этих требований налагает ограничение на рассматриваемые алфавиты, а второе – на способ написания слов. Ясно, что при соблюдении этих требований всякое слово в рассматриваемом алфавите будет разлагаться на буквы единственным образом. Перечисленные выше условия являются достаточными, но отнюдь не необходимыми для единственности чтения слов. Так, несмотря на то, что русский печатный алфавит из-за несвязной буквы «ы» не удовлетворяет первому условию, разложение слов в этом алфавите на буквы, однозначно.
Пустым словом называется слово, не содержащее ни одной буквы и обозначаемое символом Λ.
Примеры.
- алфавит;
- буквы.
- алфавит;
- слова этого алфавита.
Основная операция
на словах – операция приписывания слова
к слову: если дано слово, имеющее вид
,
и слово вида
,
то можно образовать новое слово
,
полученное приписыванием или соединением
слов.
Если Λ – пустое
слово, а
- слово, то
.
Свойства алгоритмов. Анализ известных в математике алгоритмов дал возможность выявить характерные его свойства.
Свойство 1. Дискретность. Алгоритм описывает процесс последовательного построения величин, идущий в дискретном времени. Необходимый для вычисления интервал времени разбит на малые отрезки — такты. Система величин в конце каждого такта получается в результате осуществления элементарного шага алгоритма (определенной программы преобразования) из системы величин, имеющейся к началу такта.
Свойство 2. Детерминированность (определенность ) требуется, чтобы метод действия (вычисления) был настолько точен и общепонятен, чтобы не оставалось места произволу. Этот метод можно сообщить другому лицу в виде конечного числа указаний, т.е. программа преобразований в каждом такте однозначно определена.
Свойство 3. Результативность. Это свойство, называемое иногда еще направленностью алгоритма, требует, чтобы алгоритмическая процедура, примененная к любой задаче данного типа, через конечное число шагов останавливалась и после остановки можно было бы прочесть искомый результат.
Свойство 4. Массовость. Алгоритм служит не для решения какой – либо одной конкретной задачи, а для решения целого класса задач. Процедуру для решения одной индивидуальной задачи не называют алгоритмом.
Свойство 5. Элементарность шагов алгоритма. Закон получения последующей системы величин из предшествующей должен быть простым.