Что такое алгоритм, исполнитель и вычислительная модель?
Алгоритм задаёт конечное и однозначное управление исполнителем для целого класса входных данных. Исполнитель определяется набором команд, состоянием и правилами выполнения. Поэтому одна и та же инструкция может быть алгоритмом для машины с нужными операциями и бессмысленным текстом для исполнителя, который их не понимает.
Свойства описания
Шаги должны быть дискретными, понятными исполнителю и детерминированными там, где не задан выбор. Результативность требует завершения на допустимых входах с получением заявленного результата. Массовость означает применимость не к одному примеру, а к множеству задач одной формы.
Абстрактная машина
Машина Тьюринга отделяет принцип вычисления от конкретного процессора: бесконечная лента хранит символы, головка читает и меняет ячейку, таблица переходов задаёт действие по состоянию. Модель крайне проста, но способна выражать любой обычный алгоритм при достаточных ресурсах.
Граница вычислимости
Тезис Чёрча — Тьюринга связывает интуитивно вычислимые процедуры с формальными универсальными моделями. При этом существуют задачи, для которых общий завершающийся алгоритм невозможен. Классический пример — проблема остановки: нельзя создать один анализатор, безошибочно решающий для любой программы и любого входа, завершится ли выполнение.
Сложность не равна вычислимости
Алгоритм может существовать, но требовать непрактичного числа операций или памяти. Сложность описывает рост ресурсов вместе с размером входа, а вычислимость отвечает на более фундаментальный вопрос существования процедуры. Быстрый частный эвристический метод также не доказывает решение общего случая.
Устное объяснение
Выберите бытовой процесс и формализуйте исполнителя, команды, вход и условие остановки. Затем назовите ситуацию, которую первоначальная инструкция не покрывает. Это упражнение показывает, что точность алгоритма рождается из модели допустимых состояний, а не из подробности естественного языка самой по себе.
Исполнитель задаёт смысл каждой команды
Одна и та же запись алгоритма может вести себя по-разному при иной арифметике, памяти или наборе допустимых операций. Поэтому формальная модель перечисляет конфигурацию состояния и функцию перехода. Ограничение числа шагов в симуляторе не решает проблему остановки, но защищает учебный эксперимент от бесконечного выполнения.
def run_counter(program: list[str], start: int, limit: int = 100) -> int:
value = start
for step, command in enumerate(program):
if step >= limit:
raise RuntimeError("step limit exceeded")
if command == "inc":
value += 1
elif command == "double":
value *= 2
else:
raise ValueError(f"unknown command: {command}")
return value
print(run_counter(["inc", "double", "inc"], 3)) # 9Свойства алгоритма разделяются. Конечность говорит о завершении на допустимом входе, определённость — об однозначности шага, результативность — о получении требуемого выхода. Оценка O(n) имеет смысл только после определения n и выбранной элементарной операции.
Практика: спецификация маленькой машины
Добавьте команды dec и jump-if-zero к исполнителю, задав счётчик команд и допустимые адреса. До написания кода опишите конфигурацию одним кортежем и переход для каждой команды. Создайте программу, которая уменьшает положительное число до нуля, и сформулируйте вариант цикла, доказывающий завершение. Затем намеренно соберите бесконечный переход и покажите, что лимит обнаруживает эксперимент, но не доказывает неостановимость произвольной программы.
Источники
- МФТИ: Программа вступительного испытания по информатике и информационно-коммуникационным технологиям.
- Семакин И.Г., Хеннер Е.К., Шеина Т.Ю. Информатика. 11 класс. Базовый уровень.
- Угринович Н.Д. Информатика. 11 класс. Профильный уровень.