Теория алгоритмов
Теория алгоритмов: от основ к неразрешимым проблемам
Эта книга представляет собой введение в теорию алгоритмов, охватывая как фундаментальные концепции, так и сложные вопросы вычислимости и неразрешимости. Она начинается с интуитивного понимания алгоритмов, иллюстрируя их роль в повседневной жизни и математике. Затем, переходя к формальному подходу, книга подробно рассматривает три основные модели вычислений: машины Тьюринга, рекурсивные функции и нормальные алгоритмы Маркова.
Машины Тьюринга: формализация алгоритма
Машины Тьюринга, предложенные Аланом Тьюрингом, служат основой для формализации понятия алгоритма. Книга объясняет устройство машины Тьюринга, ее компоненты (лента, головка, состояния) и принцип работы. Рассматриваются примеры машин Тьюринга, выполняющих различные операции над словами, такие как сложение, перенос символов и копирование. Вводится понятие вычислимости по Тьюрингу, а также обсуждается тезис Тьюринга, утверждающий эквивалентность понятия алгоритма и вычислимости по Тьюрингу.
Рекурсивные функции: альтернативный подход
Книга знакомит с теорией рекурсивных функций, предлагая альтернативный способ формализации понятия алгоритма. Рассматриваются простейшие функции (следования, нуль-функция, проекторы) и операторы (суперпозиции, примитивной рекурсии, минимизации), используемые для построения новых функций. Вводятся понятия примитивно рекурсивных и частично рекурсивных функций, а также обсуждается тезис Чёрча, утверждающий эквивалентность понятия алгоритма и частично рекурсивной функции.
Нормальные алгоритмы Маркова: преобразование слов
Рассматриваются нормальные алгоритмы Маркова, основанные на преобразовании слов в заданном алфавите с помощью марковских подстановок. Объясняется принцип работы нормальных алгоритмов, и приводятся примеры их применения.
Общая теория алгоритмов: объединение подходов
Книга переходит к общей теории алгоритмов, объединяющей различные формализации. Вводятся понятия нумерации алгоритмов и вычислимых функций. Рассматриваются теорема о параметризации (s-m-n-теорема Клини) и понятие универсальных функций и алгоритмов.
Разрешимость и перечислимость множеств
Вводится понятие разрешимого (рекурсивного) и перечислимого (рекурсивно перечислимого) множества, а также рассматриваются их свойства и взаимосвязи. Доказывается теорема Поста, устанавливающая связь между разрешимостью множества и перечислимостью его самого и его дополнения.
Алгоритмически неразрешимые проблемы
Книга переходит к рассмотрению алгоритмически неразрешимых массовых проблем, используя понятие машин Тьюринга. Рассматриваются проблемы распознавания самоприменимости и применимости машин Тьюринга. Затем обсуждаются алгоритмически неразрешимые массовые проблемы в общей теории алгоритмов, включая проблему распознавания самоприменимости алгоритмов, проблему распознавания применимости (остановки) алгоритмов, проблему распознавания нулевых функций и проблему распознавания равенства двух вычислимых функций. Вводится теорема Райса, которая показывает, что не существует алгоритма, который для каждой вычислимой функции (по её номеру) определял бы, обладает ли эта функция тем или иным нетривиальным свойством.
Сложность вычислений и NP-полные проблемы
Книга знакомит с основами теории сложности вычислений, рассматривая временную сложность алгоритмов и сложностные классы массовых проблем. Вводятся понятия полиномиальной сводимости и NP-полных проблем, а также приводятся примеры NP-полных проблем, таких как проблема выполнимости формул логики высказываний (ВЫП), проблема клики, проблема гамильтонова цикла и другие.
Алгоритмические проблемы математики
В заключение рассматриваются алгоритмические проблемы из различных разделов математики, включая десятую проблему Гильберта о диофантовых уравнениях, проблему тождества слов и другие проблемы из алгебры и топологии.
Текст подготовлен языковой моделью и может содержать неточности.
- ВО - Бакалавриат
- 01.03.01: Математика
- 02.03.01: Математика и компьютерные науки
- 44.03.01: Педагогическое образование
- 44.03.05: Педагогическое образование (с двумя профилями подготовки)
- ВО - Магистратура
- 01.04.01: Математика
- 44.04.01: Педагогическое образование
ВЫСШЕЕ ОБРАЗОВАНИЕ серия основана в 1 996 г. В.И. Игошин ТЕОРИЯ АЛГОРИТМОВ УЧЕБНОЕ ПОСОБИЕ Рекомендовано УМО по образованию в области подготовки педагогических кадров в качестве учебного пособия для студентов высших учебных заведений, обучающихся по специальности 01.03.01 «Математика» znanium.com Москва ИНФРА-М 2019
УДК 512.8; 161.2(075.8) ББК 22.12; 87.4я73 И269 ФЗ Издание не подлежит маркировке № 436-ФЗ в соответствии с п. 1 ч. 4 ст. 11 Игошин В.И. И269 Теория алгоритмов : учеб. пособие / В.И. Игошин. — М. : ИНФРА-М, 2019. — 318 с. — (Высшее образование). ISBN 978-5-16-005205-2 Подробно изложены три формализации понятия алгоритма — машины Тьюринга, рекурсивные функции и нормальные алгоритмы Маркова, доказана их эквивалентность. Рассмотрены основные теоремы общей теории алгоритмов, теория разрешимых и перечислимых множеств, алгоритмически неразрешимые массовые проблемы, теория сложности вычислений и массовых проблем, алгоритмические проблемы математической логики и других разделов математики. Охарактеризованы взаимосвязи теории алгоритмов с компьютерами и информатикой. Для студентов университетов, технических и педагогических вузов, обучающихся по специальностям «Математика», «Прикладная математика», «Математик-педагог», «Учитель математики» на уровнях бакалавриата, магистратуры, а также специалитета. УДК 512.8; 161.2(075.8) ББК 22.12; 87.4я73 ISBN 978-5-16-005205-2 © Игошин В.И., 2012
Предисловие Конкретные алгоритмы в математике и практике известны давно. В настоящее время, особенно в связи с глобальной компьютеризацией, они прочно вошли в нашу жизнь. Развитие математики и математической логики, а также в немалой степени стремительный прогресс компьютерной техники вызвали к жизни и заставили развиться в 30-60-ые годы прошлого века общую науку об алгоритмах - теорию алгоритмов. В ней объектом исследования стало именно понятие алгоритма как таковое и его самые общие свойства. Предтечами этой теории явились идеи голландского математика Л.Э.Я.Брауэра и немецкого математика Г.Вейля, высказанные ими в 20-ые годы XX в., в которых они обратили внимание на различие между конструктивными и неконструктивными доказательствами в математике. Рассуждая конструктивно при доказательстве существ вования какого-либо объекта с заданными свойствами, математик указывает способ (алгоритм) его получения. В отличие от этого, неконструктивное доказательство, или, как говорят, доказательство чистого существования не позволяет явно построить такой объект; оно лишь устанавливает логическое противоречие, если предположить, что такого объекта не существует. Сначала были выработаны несколько формализаций до того лишь интуитивно осознаваемого понятия алгоритма - машины Тьюринга, рекурсивные функции, алгоритмы Маркова, - доказана их эквивалентность и сформулирован знаменитый тезис Чёрча. Это позволило строго доказать алгоритмическую неразрешимость большого количества массовых проблем и начать развивать общую (или абстрактную) теорию алгоритмов, в которой конкретный формализм отошёл на второй план, а главными понятиями, по существу, снова стали интуитивно понимаемые понятия алгоритма и вычислимой функции. 3
Всем этим вопросам и посвящается данное учебное пособие. В главе I рассматриваются примеры алгоритмов из реальной жизни и из математики, обсуждается понятие алгоритма на интуитивной основе и отмечается необходимость его уточнения. Главы II - IV посвящены конкретным формализациям понятия алгоритма - машинам Тьюринга, рекурсивным функциям и нормальным алгоритмам Маркова. В главе V рассматриваются основные методы общей теории алгоритмов - метод нумераций и метод диагонализации (или диагональный метод Кантора). С их помощью доказываются фундаментальные результаты общей теории алгоритмов, установленные С.Клини - теорема о параметризации (sm-птеорема) и теорема о неподвижной точке; обсуждаются применения этих теорем в теории и практике программирования. Разрешимым и перечислимым множествам посвящается глава VI. Здесь два классических способа задания множеств изучаются с точки зрения алгоритмической эффективности, конструктивности. Важность понятий разрешимости и перечислимости множеств для оснований математики связана с тем, что язык теории множеств является в известном смысле универсальным языком математики. В главе VII рассматриваются алгоритмически неразрешимые массовые проблемы. Сначала в качестве понятия, уточняющего понятие алгоритма, используется понятие машины Тьюринга (§7.1). Затем проблема алгоритмической разрешимости рассматривается в рамках общей теории алгоритмов. Завершается глава рассмотрением частично разрешимых массовых проблем и связанных с ними частично разрешимых предикатов. Вслед за общей теорией алгоритмов стали возникать и развиваться многочисленные теории различных конкретных алгоритмов, призванных решать те или иные конкретные математические задачи, являвшиеся, в основном, математическими моделями реальных научных и производственных задач. Эти конкретные теории питали своими идеями и проблемами общую теорию алгоритмов. Так, в общей теории возникли проблемы сложности алгоритмов, проблемы сведения одних массовых проблем к другим при их алгоритмическом решении и т.д. В свою очередь, общая теория алгоритмов создавала методологическую основу для многочисленных конкретизаций. Вопросам сложности вычислений и массовых проблем посвящена глава VIII. В ней рассматриваются способы сравнения и классификации массовых проблем и алгоритмов по их сложности, выделя 4
ются различные классы сложности массовых проблем, важнейшими из которых являются классы Р, NP и NP-полных массовых проблем. Наконец, завершают книгу две главы IX и X, посвящённые алгоритмическим проблемам математической логики и различных разделов математики. Среди них - проблемы полноты формальной арифметики и разрешимости формализованного исчисления предикатов первого порядка, десятая проблема Гильберта о разрешимости диофантовых уравнений, проблема тождества, слов в полугруппах и группах, проблема действительных корней многочлена с действительными коэффициентами. Теория алгоритмов развивалась в тесном взаимодействии с математической логикой. Это, вне всякого сомнения, обусловлено тесной взаимосвязью алгоритмического и логического мышления человека, схожестью алгоритмов с процессами построения логических умозаключений, использованием обеими дисциплинами формальных языков. Теория алгоритмов наряду с неотделимой от неё математической логикой являются фундаментальными теоретическими основаниями, на которых зиждутся теория и практика компьютеров, программирования и информатики. Ведь каждая компьютерная программа представляет собой выражение алгоритма решения задачи на одном из алгоритмических языков, которые тесно связаны с формализованными языками математической логики. Так что овладение основами теории алгоритмов является в настоящее время неотъемлемым компонентом образования всякого высококвалифицированного специалиста, имеющего дело с перечисленными областями. Курс теории алгоритмов излагается вслед за курсом математической логики. В данном учебном пособии мы будем использовать следующие наши учебные пособия: Игошин В.И. Математическая логика. - М.: Издательство ИНФРА-М, 2011 (ссылка на него будет делаться следующим образом: Учебник МЛ) и Игошин В.И. Задачи и упражнения по математической логике и теории алгоритмов. -М.: Издательский центр ’’Академия”, 2008 (на него будем ссылаться так: Задачник). В конце книги приведён обширный список литературы, разделённый по темам. г. Саратов, 1 июля 2011 г. В.Игошин 5
Глава I НЕФОРМАЛЬНОЕ (ИНТУИТИВНОЕ) ПРЕДСТАВЛЕНИЕ ОБ АЛГОРИТМАХ В этой главе рассматриваются примеры алгоритмов из реальной жизни и из математики, более детально обсуждается понятие алгоритма на интуитивной основе и устанавливается необходимость его уточнения. 1.1. Алгоритмы в жизни и в математике В этом параграфе рассмотрим примеры алгоритмов, известные из практической жизни и из математики. Алгоритмы в жизни. Понятие алгоритма стихийно формировалось с древнейших времён. Современный человек понимает под алгоритмом чёткую систему инструкций о выполнении в определённом порядке некоторых действий для решения всех задач какого-то данного класса. Многочисленные и разнообразные алгоритмы окружают нас буквально во всех сферах жизни и деятельности. Многие наши действия доведены до бессознательного автоматизма, мы порой и не осознаём, что они регламентированы неким алгоритмом - чёткой системой инструкций. Например, наши действия при входе в магазин ’’Универсам” (сдать свою сумку, получить корзину с номером, пройти в торговый зал, заполнить корзину продуктами, оплатить покупку в кассе, предъявить чек контролёру, взять свою сумку, переложить в неё продукты, сдать корзину, покинуть магазин). Второй пример - приготовление манной каши (500 мл молока довести до кипения, при тщательном помешивании засыпать 100 г манной крупы, при помешивании довести до кипения и варить 10 минут). Автоматизм выполнения этих и многих других действий не позволяет нам осознавать их алгоритмическую сущность. 6
Но есть немало таких действий, выполняя которые мы тщательно следуем тон или иной инструкции. Это главным образом непривычные действия, профессионально не свойственные нам. Например, если вы фотографируете один-два раза в год, то, купив проявитель для плёнки, будете весьма тщательно следовать инструкции (алгоритму) по его приготовлению: ’’Содержимое большого пакета растворить в 350 мл воды при температуре 18-20 С. Там же растворить содержимое малого пакета, Объём раствора довести до 500 мл. Раствор профильтровать. Проявлять 3-4 роликовых фотоплёнки”. Второй пример. Если вы никогда раньше не пекли торт, то, получив рецепт (алгоритм) его приготовления, постараетесь выполнить в указанной последовательности все его предписания. Алгоритмы в математике. Большое количество алгоритмов встречается при изучении математики буквально с первых классов школы. Это, прежде всего, алгоритмы выполнения четырёх арифметических действий над различными числами — натуральными, целыми, дробными, комплексными. Вот пример такого алгоритма: ’’Чтобы из одной десятичной дроби вычесть другую, надо: 1) уравнять число знаков после запятой в уменьшаемом и вычитаемом; 2) записать вычитаемое под уменьшаемым так, чтобы запятая оказалась под запятой; 3) произвести вычитание так, как вычитают натуральные числа; 4) поставить в полученной разности, запятую под запятыми в уменьшаемом и вычитаемом”. Вот пример алгоритма сложения приближенных чисел. Найти сумму чисел p, q и s, где p « 3,1416, q « 2,718 ns « 7,45. 1. Выделим слагаемое с наименьшим числом десятичных знаков. Таким слагаемым является число 7,45 (два десятичных знака). 2. Округлим остальные слагаемые, оставляя в них столько десятичных знаков, сколько их имеется в выделенном слагаемом: 3,1416 -3,14; 2,718« 2,72. 3. Выполним сложение приближённых значений чисел: 3,14 + 2,72 + 7,45 = 13,31. Итак, p + q + s « 13,31. Немало алгоритмов в геометрии: алгоритмы геометрических построений с помощью циркуля и линейки (деление пополам отрезка и угла, опускание и восстановление перпендикуляров, проведение параллельных прямых), алгоритмы вычисления площадей и объёмов различных геометрических фигур и тел. При изучении математики в вузе были освоены процедуры вычисления наибольшего общего делителя двух натуральных чисел 7
(алгоритм Евклида), определителей различных порядков, рангов матриц с рациональными элементами, интегралов от рациональных функций, приближённых значений корней уравнений и систем и т.д. Все эти процедуры являются ничем иным, как алгоритмами. Наконец в курсе математической логики были рассмотрены алгоритмы разрешимости формализованного исчисления высказываний (см. Учебник МЛ. §16) и разрешимости в логике предикатов (§23). Алгоритм Евклида. Это - алгоритм для нахождения наибольшего общего делителя НОД(т, п) двух натуральных чисел m, п. Рассмотрим его поподробнее с точки зрения стоящей перед нами задачи - охарактеризовать общие свойства и черты интуитивно представляемого нами понятия алгоритма. Даны натуральные числа m > п > 0. 1) Первый таг: делим m на п: m п пЪ^ + щ. (п > гД Если ri = 0, то НОД^, п) = п. Если riy^O, тоНОД^п) = НОД(п,гД, (1) и переходим ко второму шагу. 2) Второй шаг: делим п на r±: п = г± • b₂ + r₂. (ri > r₂) Если r₂ = 0, то НОД (п, ri) = П Если r₂#0, тоНОД(п,гД =НОД(гъг₂), (2) и переходим к третьему шагу. 3) Третий шаг: делим ri на r₂: rl = !- ■ b₃+ r₃- (r₂ > r₃). Если r₃ = 0, то НОД(г1,г₂) = r₂. Если r₃/0, то НОД(гьг₂) = НОД(г₂,г₃), (3) и переходим к следующему шагу: делим r₂ на r₃ и так далее: rfc-2 =k-k-b • bk +Гк. rr-l >Tk), rk-1 = rk • bk₊l + rk₊l. (rₖ > rk₊l) . Таким образом, получаем убывающую последовательность натуральных чисел: п > Щ > r-2 > ... > rₖ-l > rk > Tk₊! > 0 , которая обрывается (является конечной), то есть rfₑ₊ᵢ = 0 для некоторого k & N (так как п & N). Учитывая равенства (1), (2), (3), ... , получаем: 8
НОД(т, n) = Н0Д(п,Г1) = НОД(г₁,г₂) = НОД(г₂,г₃) = ... ... = НОД(Гк-₂,Гк-₁') = НОДДк-!,Гк) = Гк . Чёткость предписаний данного алгоритма не допускает ни малейшей двусмысленности. Таким образом, мы видим, что алгоритмы широко распространены как в практике, так и в науке и требуют более внимательного к себе отношения и тщательного изучения методами математической науки. 1.2. Неформальное понятие алгоритма и необходимость его уточнения Неформальное понятие алгоритма. Прежде чем перейти к математическому изучению понятия алгоритма, постараемся внимательно проанализировать рассмотренные примеры алгоритмов и выявить их общие типичные черты и особенности. 1) Каждый алгоритм предполагает наличие некоторых начальных или исходных данных, а в результате применения приводит к получению определённого искомого результата. Например, в алгоритме с проявителем начальные данные — содержимое большого и малого пакетов, вода. Искомый результат - готовый к употреблению проявитель для плёнки. При вычислении ранга матрицы начальными данными служит прямоугольная таблица, составленная из m • n рациональных чисел, результат - натуральное число, являющееся рангом данной матрицы. Говоря о начальных данных для алгоритма, имеют в виду так называемые допустимые начальные данные, т.е. такие начальные данные, которые сформулированы в терминах данного алгоритма. Так, к числу допустимых начальных данных для алгоритма варки манной каши никак не отнесёшь элементы множества натуральных чисел, а к числу начальных данных алгоритма Евклида - молоко и манную крупу (или даже комплексные числа). Среди допустимых начальных данных для алгоритма могут быть такие, к которым он применим, т.е. отправляясь от которых можно получить искомый результат, а могут быть такие, к которым данный алгоритм неприменим, т.е. отправляясь от которых искомого результата получить нельзя. Неприменимость алгоритма к допустимым начальным данным может заключаться либо в том, что 9
алгоритмический процесс никогда не оканчивается (в этом случае говорят, что он бесконечен), либо в том, что его выполнение во время одного из шагов наталкивается на препятствие, заходит в тупик (в этом случае говорят, что он безрезультатно обрывается). Проиллюстрируем на примерах оба случая. Пример 1.2.1. Приведём пример бесконечного алгоритмического процесса. Всем известен алгоритм деления десятичных дробей. Числа 5,1 и 3 являются для него допустимыми начальными данными, применение к которым алгоритма деления приводит к искомому результату 1,7. Иная картина возникает для чисел 20 и 3, которые также представляют собой допустимые начальные данные для алгоритма деления. Но для них алгоритмический процесс продолжается бесконечно (вечно), порождая бесконечную периодическую дробь: 6,66666... . Таким образом, этот процесс не встречает препятствий и никогда не оканчивается, так что получить искомый результат для начальных данных 20 и 3 оказывается невозможно. Отметим, что обрыв процесса произвольным образом (и взятие приближённого результата) не предусматривается данным алгоритмом. Пример 1.2.2. Теперь приведём пример алгоритма, заходящего в тупик, безрезультатно обрывающегося. Вот его предписания: 1. Исходное число умножить на 2. Перейти к выполнению п. 2; 2. К полученному числу прибавить 1. Перейти к выполнению и. 3; 3. Определить остаток у от деления полученной в п. 2 суммы на 3. Перейти к выполнению п. 4; 4, Разделить исходное число на у. Частное является искомым результатом. Конец. Пусть натуральные (целые положительные) числа будут допустимыми начальными данными для этого алгоритма. Для числа 6 алгоритмический процесс будет проходить так: Первый шаг: 6 • 2 — 12; переходим к п. 2; Второй шаг: 12 + 1 — 13; переходим к п. 3; Третий шаг: у = 1, переходим к п. 4; Четвёртый шаг: 6:1 = 6. Конец. Искомый результат равен 6. Иначе будет протекать алгоритмический процесс для исходного данного 7: Первый шаг: • • 2 = 14; переходим к п. 2; Второй шаг: 14 + 1 = 15; переходим к п. 3; 10