Введение

Тип алгоритма в информатике

В информатике детерминированный алгоритм — это алгоритм, который, получив определенный ввод, всегда выдает один и тот же результат, при этом лежащая в основе машина последовательно проходит через одну и ту же последовательность состояний. Детерминированные алгоритмы являются наиболее изученным и распространенным типом алгоритмов, а также одним из самых практичных, поскольку их можно эффективно выполнять на реальных машинах. Формально детерминированный алгоритм вычисляет математическую функцию; функция имеет единственное значение для любого ввода из своей области определения, и алгоритм — это процесс, который производит это конкретное значение в качестве вывода.

Формальное определение

Детерминированные алгоритмы можно определить с точки зрения конечного автомата: состояние описывает, что машина делает в конкретный момент времени. Конечные автоматы дискретно переходят из одного состояния в другое. Сразу после ввода данных машина находится в начальном состоянии. Если машина детерминирована, это означает, что с этого момента её текущее состояние однозначно определяет следующее состояние; её путь по множеству состояний предопределён. Следует отметить, что машина может быть детерминированной, но при этом никогда не останавливаться или завершаться, и, следовательно, не выдавать результат. Примеры конкретных абстрактных машин, являющихся детерминированными, включают детерминированную машину Тьюринга и детерминированный конечный автомат.

Недостатки детерминизма

В некоторых случаях для программы выгодно проявлять недетерминированное поведение. Например, поведение программы перетасовки карт, используемой в игре в блэкджек, не должно быть предсказуемо игроками, даже если исходный код программы доступен для просмотра. Использование генератора псевдослучайных чисел часто недостаточно для обеспечения невозможности предсказания игроками результата перетасовки. Хитроумный игрок может точно угадать числа, которые выберет генератор, и таким образом заранее определить состав колоды, что позволит ему жульничать; например, группе по безопасности программного обеспечения компании Reliable Software Technologies удалось это сделать для реализации Texas Hold 'em Poker, распространяемой ASF Software, Inc., что позволило им последовательно предсказывать исход раздач заранее. Эти проблемы можно частично решить, используя криптографически стойкий генератор псевдослучайных чисел, но всё равно необходимо использовать непредсказуемое случайное начальное значение для инициализации генератора. Для этого требуется источник недетерминизма, например, тот, который предоставляет аппаратный генератор случайных чисел. Следует отметить, что отрицательный ответ на вопрос о равенстве P и NP не подразумевает, что программы с недетерминированным выводом теоретически более мощны, чем программы с детерминированным выводом. Класс сложности NP (вычислительная сложность) можно определить без какой-либо ссылки на недетерминизм, используя определение, основанное на проверяющем алгоритме.

Ртуть

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

Ява

В Java значение null может представлять собой неуспешный (недопустимый) результат.