Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 8 Алгоритмизация.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.79 Mб
Скачать

1.2 Цели и задачи теории алгоритмов

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

  • формализация понятия «алгоритм» и исследование формальных алгоритмических систем;

  • формальное доказательство алгоритмической неразрешимости ряда задач;*

  • классификация задач, определение и исследование сложностных классов;

  • асимптотический анализ сложности алгоритмов;

  • исследование и анализ рекурсивных алгоритмов;

  • получение явных функций трудоемкости в целях сравнительного анализа алгоритмов;

  • разработка критериев сравнительной оценки качества алгоритмов.

Перечислим несколько неразрешимых задач.

Проблема 1: Распределение девяток в записи числа π [10]; Определим функцию f(n) = i, где n – количество девяток подряд в десятичной записи числа π, а i – номер самой левой девятки из n девяток подряд: π=3,141592… f(1) = 5. Задача состоит в вычислении функции f(n) для произвольно заданного n. Поскольку число π является иррациональным и трансцендентным, то мы не знаем никакой информации о распределении девяток (равно как и любых других цифр) в десятичной записи числа π. Вычисление f(n)  связано с вычислением последующих цифр в разложении π, до тех пор, пока мы не обнаружим n девяток подряд, однако у нас нет общего метода вычисления f(n), поэтому для некоторых n вычисления могут продолжаться бесконечно – мы даже не знаем в принципе (по природе числа π) существует ли решение для всех n. Проблема 2: Вычисление совершенных чисел; Совершенные числа – это числа, которые равны сумме своих делителей, например: 28 = 1+2+4+7+14. Определим функцию S(n) = n-ое по счёту совершенное число и поставим задачу вычисления  S(n) по произвольно заданному n. Нет общего метода вычисления совершенных чисел, мы даже не знаем, множество совершенных чисел конечно или счетно, поэтому наш алгоритм должен перебирать все числа подряд, проверяя их на совершенность. Отсутствие общего метода решения не позволяет ответить на вопрос об останове алгоритма. Если мы проверили М чисел при поиске n-ого совершенного числа – означает ли это, что его вообще не существует?

Проблема 3: Десятая проблема Гильберта; Пусть задан многочлен n-ой степени с целыми коэффициентами – P. Существует ли алгоритм, который определяет, имеет ли уравнение P=0 решение в целых числах? Ю.В. Матиясевич [4] показал, что такого алгоритма не существует, т.е. отсутствует общий метод определения целых корней уравнения P=0 по его целочисленным коэффициентам.

Разделы современной теории алгоритмов

Рассмотрим одну из фундаментальных работ по теории алгоритмов.

Строгие определения понятия «алгоритм» связаны с введением специальных математических конструкций – формальных моделей вычислений. Одной из таких моделей является машина Тьюринга.

В 1936 г. Аланом Тьюрингом для уточнения понятия алгоритма был предложен абстрактный универсальный исполнитель. Его абстрактность заключается в том, что он представляет собой логическую вычислительную конструкцию, а не реальную вычислительную машину. Термин «универсальный исполнитель» говорит о том, что данный исполнитель может имитировать любой другой исполнитель. Например, операции, которые выполняют реальные вычислительные машины можно имитировать на универсальном исполнителе. В последствие, придуманная Тьюрингом вычислительная конструкция была названа машиной Тьюринга.

Кроме того, предполагается, что универсальный исполнитель должен уметь доказывать существование или отсутствие алгоритма для той или иной задачи.

Машина Тьюринга состоит из бесконечной в обе стороны ленты, разделенной на ячейки. Лента может протягиваться на одну клетку вправо или влево под управлением автомата (головки), которая является неподвижной. Программы для машин Тьюринга записываются в виде таблицы, где первые столбец и строка содержат буквы внешнего алфавита и возможные внутренние состояния автомата (внутренний алфавит). Содержимое таблицы представляет собой команды для машины Тьюринга. Буква, которую считывает головка в ячейке (над которой она находится в данный момент), и внутренне состояние головки определяют, какую команду нужно выполнить. Команда определяется пересечением символов внешнего и внутреннего алфавитов в таблице.

Чтобы задать конкретную машину Тьюринга, требуется описать для нее следующие составляющие:

  • Внешний алфавит. Конечное множество (например, А), элементы которого называются буквами (символами). Одна из букв этого алфавита (например, а0) должна представлять собой пустой символ.

  • Внутренний алфавит. Конечное множество состояний головки (автомата). Одно из состояний (например, q1) должно быть начальным (запускающим программу). Еще одно из состояний (q0) должно быть конечным (завершающим программу) – состояние останова.

  • Таблица переходов. Описание поведения автомата (головки) в зависимости от состояния и считанного символа.

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

  • Записывать символ внешнего алфавита в ячейку (в том числе и пустой), заменяя находившийся в ней (в том числе и пустой).

  • Передвигаться на одну ячейку влево или вправо.

  • Менять свое внутреннее состояние.

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

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