- •История логики
- •Предыстория логики
- •Логика в древнегреческой философии До Платона
- •Логика Платона
- •Логика Аристотеля
- •Логика стоиков
- •Логика в странах Востока Логика в Индии
- •Логика в Китае
- •Современная логика
- •Логика высказываний
- •]Основные понятия
- •Правила построения формул логики высказываний
- •Соглашения о скобках
- •Истинностное значение
- •Тождественно истинные формулы (тавтологии)
- •Исчисление высказываний
- •Логическая операция
- •Формальная логика
- •Математическая логика
- •Отрицание
- •Схемотехника
- •Конъюнкция
- •Булева алгебра
- •Многозначная логика
- •Классическая логика
- •Схемотехника
- •Дизъюнкция
- •Булева алгебра
- •Многозначная логика
- •Классическая логика
- •Схемотехника
- •Импликация
- •Булева логика
- •Классическая логика
- •Штрих Шеффера
- •Стрелка Пирса
- •Полином Жегалкина
- •Предпосылки
- •Cуществование и единственность представления (теорема Жегалкина)
- •Представление функции в виде полинома Жегалкина с помощью эквивалентных преобразований днф
- •С помощью эквивалентных преобразований сднф
- •Логика высказываний
- •Основные понятия
- •Правила построения формул логики высказываний
- •Соглашения о скобках
- •Истинностное значение
- •Тождественно истинные формулы (тавтологии)
- •Исчисление высказываний
- •Алгебра логики
- •Определение
- •Аксиомы
- •Логические операции
- •Свойства логических операций
- •История
- •Метод равносильных преобразований
- •Метод диаграмм Вейча.
- •Алгоритм построения таблицы истинности
- •Элементарная дизъюнкция
- •Элементарная конъюнкция
- •§ 1. Понятие формулы исчисления высказываний.
- •Исчисление высказываний
- •1.2.3.1 Правила подстановки
- •1.2.3.2. Правила введения и удаления логических связок
- •2.1 Алгебра предикатов
- •3 Законы алгебры предикатов
- •Квантор
- •Примеры
- •Введение в понятие
- •Кванторы в математической логике
- •Вложенные кванторы Свободные и связанные переменные
- •Операции над кванторами
- •Ограниченные кванторы История появления
- •Теория алгоритмов
- •Возникновение теории алгоритмов
- •Модели вычислений
- •Тезис Чёрча — Тьюринга и алгоритмически неразрешимые проблемы
- •Современное состояние теории алгоритмов
- •Анализ трудоёмкости алгоритмов
- •Классы сложности
- •Машина Тьюринга
- •Устройство машины Тьюринга
- •Описание машины Тьюринга
- •Пример машины Тьюринга
- •Полнота по Тьюрингу
- •Варианты машины Тьюринга
- •Машина Тьюринга, работающая на полубесконечной ленте
Тезис Чёрча — Тьюринга и алгоритмически неразрешимые проблемы
Алан Тьюринг высказал предположение (известное как Тезис Чёрча — Тьюринга), что любой алгоритм в интуитивном смысле этого слова может быть представлен эквивалентной машиной Тьюринга. Уточнение представления о вычислимости на основе понятия машины Тьюринга (и других эквивалентных ей понятий) открыло возможности для строгого доказательства алгоритмической неразрешимости различных массовых проблем (то есть проблем о нахождении единого метода решения некоторого класса задач, условия которых могут варьироваться в известных пределах). Простейшим примером алгоритмически неразрешимой массовой проблемы является так называемая проблема применимости алгоритма (называемая также проблемой остановки). Она состоит в следующем: требуется найти общий метод, который позволял бы для произвольной машины Тьюринга (заданной посредством своей программы) и произвольного начального состояния ленты этой машины определить, завершится ли работа машины за конечное число шагов, или же будет продолжаться неограниченно долго.
В течение первого десятилетия истории теории алгоритмов неразрешимые массовые проблемы были обнаружены лишь внутри самой этой теории (сюда относится описанная выше проблема применимости), а также внутри математической логики (проблема выводимости в классическом исчислении предикатов). Поэтому считалось, что теория алгоритмов представляет собой обочину математики, не имеющую значения для таких её классических разделов, как алгебра или анализ. Положение изменилось после того, как А. А. Марков и Э. Л. Пост в1947 году установили алгоритмическую неразрешимость известной в алгебре проблемы равенства для конечнопорождённых и конечноопределённых полугрупп (т. н. проблемы Туэ). Впоследствии была установлена алгоритмическая неразрешимость и многих других «чисто математических» массовых проблем. Одним из наиболее известных результатов в этой области является доказанная Ю. В. Матиясевичем алгоритмическая неразрешимость десятой проблемы Гильберта.
Современное состояние теории алгоритмов
В настоящее время теория алгоритмов развивается, главным образом, по трем направлениям.
Классическая теория алгоритмов изучает проблемы формулировки задач в терминах формальных языков, вводит понятие задачи разрешения, проводит классификацию задач по классам сложности (P, NP и др.).
Теория асимптотического анализа алгоритмов рассматривает методы получения асимптотических оценок ресурсоемкости или времени выполнения алгоритмов, в частности, для рекурсивных алгоритмов. Асимптотический анализ позволяет оценить рост потребности алгоритма в ресурсах (например, времени выполнения) с увеличением объема входных данных.
Теория практического анализа вычислительных алгоритмов решает задачи получения явных функции трудоёмкости, интервального анализа функций, поиска практических критериев качества алгоритмов, разработки методики выбора рациональных алгоритмов.
Анализ трудоёмкости алгоритмов
Целью анализа трудоёмкости алгоритмов является нахождение оптимального алгоритма для решения данной задачи. В качестве критерия оптимальности алгоритма выбирается трудоемкость алгоритма, понимаемая как количество элементарных операций, которые необходимо выполнить для решения задачи с помощью данного алгоритма. Функцией трудоемкости называется отношение, связывающие входные данные алгоритма с количеством элементарных операций.
Трудоёмкость алгоритмов по-разному зависит от входных данных. Для некоторых алгоритмов трудоемкость зависит только от объема данных, для других алгоритмов — от значений данных, в некоторых случаях порядок поступления данных может влиять на трудоемкость. Трудоёмкость многих алгоритмов может в той или иной мере зависеть от всех перечисленных выше факторов.
Одним из упрощенных видов анализа, используемых на практике, является асимптотический анализ алгоритмов. Целью асимптотического анализа является сравнение затрат времени и других ресурсов различными алгоритмами, предназначенными для решения одной и той же задачи, при больших объемах входных данных. Используемая в асимптотическом анализе оценка функции трудоёмкости, называемая сложностью алгоритма, позволяет определить, как быстро растет трудоёмкость алгоритма с увеличением объема данных. В асимптотическом анализе алгоритмов используются обозначения, принятые в математическом асимптотическом анализе. Ниже перечислены основные оценки сложности.
Основной оценкой функции сложности алгоритма f(n) является оценка . Здесь n — величина объёма данных или длина входа. Мы говорим, что оценка сложности алгоритма
если при g > 0 при n > 0 существуют положительные с1, с2, n0, такие, что:
при n > n0, иначе говоря, можно найти такие с1 и c2, что при достаточно больших n f(n) будет заключена между
и .
В таком случае говорят еще, что функция g(n) является асимптотически точной оценкой функции f(n), так как по определению функция f(n) не отличается от функции g(n) с точностью до постоянного множителя (см. асимптотическое равенство). Например, для метода сортировки heapsort оценка трудоёмкости составляет
то есть g(n) = nlog n
Из следует, что .
Важно понимать, что представляет собой не функцию, а множество функций, описывающих рост с точностью до постоянного множителя.
дает одновременно верхнюю и нижнюю оценки роста функции. Часто бывает необходимо рассматривать эти оценки по отдельности. Оценка представляет собой верхнюю асимптотическую оценку трудоемкости алгоритма. Мы говорим, что если
Иначе говоря, запись означает, что f(n) принадлежит классу функций, которые растут не быстрее, чем функция g(n) с точностью до постоянного множителя.
Оценка задает нижнюю асимптотическую оценку роста функции f(n) и определяет класс функций, которые растут не медленнее, чем g(n) с точностью до постоянного множителя. если
Например, запись обозначает класс функций, которые растут не медленнее, чем , в этот класс попадают все полиномы со степенью большей единицы, равно как и все степенные функции с основанием большим единицы. Равенство выполняется тогда и только тогда, когда и .
Асимптотический анализ алгоритмов имеет не только практическое, но и теоретическое значение. Так, например, доказано, что все алгоритмы сортировки, основанные на попарном сравнении элементов, отсортируют n элементов за время, не меньшее .
Важную роль в развитии асимптотического анализа алгоритмов сыграли A. Ахо, Дж. Ульман, Дж. Хопкрофт.