
- •Теория алгоритмов Формальное определение алгоритма
- •Дополнительные ограничения для практических вычислений:
- •Анализ алгоритмов и их вычислительная сложность
- •Способы анализа алгоритмов:
- •Алгоритм бинарного поиска
- •График зависимости скорости роста числа операций t(n) от количества входных данных n
- •Классы вычислительной сложности (в порядке «возрастания» при больших n):
Теория алгоритмов Формальное определение алгоритма
Теория алгоритмов изучает свойства и закономерности алгоритмов, а также формальные модели их представления. Она связана и с теорией вычислительной сложности, и с теорией вычислимости, и с теорией автоматов. Задача теории алгоритмов: определение существования алгоритмов, свойств, закономерностей, единообразной формы записи алгоритмов, решающих различные задачи.
Дадим неформальное определение алгоритма.
Алгоритм – это конечный набор правил, задающих последовательность выполнения операций для решения задачи определенного типа, обладающий следующими особенностями:
Конечность – алгоритм всегда должен завершаться после выполнения конечного числа шагов.
Определенность – каждый шаг алгоритма должен быть точно определен. Для этого и были разработаны языки программирования.
Наличие некоторого числа входных данных.
Наличие одного или более выходных данных, имеющих определенную связь с входными данными.
Эффективность – все операторы алгоритма должны быть выполнимы в течение конечного промежутка времени.
Таким образом, алгоритм – это любая корректно определенная последовательность вычислительных шагов, преобразующих набор значений входных величин в набор значений выходных величин. Алгоритм можно рассматривать как функцию входных данных от выходных данных.
Входными и выходными данными могут быть целые и вещественные числа, последовательности символов и др. Данные любой природы можно закодировать натуральными числами, поэтому будем рассматривать алгоритмы как функции над натуральными числами.
Алгоритм можно рассматривать как функцию f: Nk N с областью определения D(f) Nk и областью значений R(f) N, где N – множество натуральных чисел, k N; т.е. аргумент функции – упорядоченный набор из k натуральных чисел, значение функции – единственное натуральное число.
Функция f является k-местной частичной, потому что она определена не на всем множестве Nk, а только на его подмножестве. В частном случае она может быть определена на всем множестве Nk, тогда она будет называться всюду определенной.
k-местная функция f: Nk N называется эффективно вычислимой, если существует вычисляющий ее алгоритм A, такой что:
Если на вход алгоритма A поступило допустимое значение x = (x1, x2, … xk) D(f), то вычисление должно закончиться после конечного числа дискретных шагов и выдать f(x).
Если на вход алгоритма A поступило значение x, не принадлежащее области определения D(f), то алгоритм A будет исполняться бесконечно или остановится в некоторой точке.
Эффективно вычислимой функции можно сопоставить машину Тьюринга.
Функция f называется вычислимой по Тьюрингу, если существует машина Тьюринга M, которая при входной строке <n1, n2, … nk> (вся остальная часть бесконечной ленты пуста, а головка чтения-записи установлена на крайний слева символ) будет выполнять следующие действия:
Если значение f(n1, n2, … nk) определено, машина остановится на крайнем слева символе строки <f(n1, n2, … nk)>, при этом часть ленты справа от этой строки будет пустой.
Если значение f(n1, n2, … nk) не определено, машина никогда не остановится.
Смысл этого определения: для любой эффективно вычислимой функции существует вычисляющая ее значения машина Тьюринга. Так как эффективно вычислимая функция – это понятие, которое мы сопоставили алгоритму, можно прийти к выводу, что каждому эффективному алгоритму можно сопоставить машину Тьюринга. Строго говоря, это утверждение не доказано, но и опровергнуть его тоже нельзя. В теории алгоритмов оно принимается за аксиому.
Кроме машин Тьюринга, для формализации понятия алгоритма учеными были разработаны и другие абстрактные конструкции. Было показано, что все они определяют одно и то же понятие. Другие способы формального определения понятия алгоритма: рекурсивные функции, машина Поста, алгоритмы Маркова и др.
Множество эффективно вычислимых функций не совпадает с множеством практически вычислимых функций. В теории алгоритмов рассматриваются фундаментальные принципы построения вычислений, не зависящие от уровня развития вычислительной техники, поэтому следует различать понятия эффективных вычислений и практических вычислений. Класс эффективных процедур – это некоторый предел, к которому стремятся практические вычисления. Для практических вычислений существуют обязательные ограничения.