Неразрешимые задачи и сложность вычислений

Чего не может ни один алгоритм — и сколько стоит то, что он может. 11 класс, углублённый уровень — пара четырнадцатая.

Уроки 27–28 поурочного плана: «Алгоритмически неразрешимые задачи. Задача останова. Невозможность автоматической отладки программ» и «Сложность вычислений». На прошлых парах мы строго определили, что такое алгоритм: машины Тьюринга и Поста, алгорифмы Маркова. Теперь, когда определение есть, можно доказать, что для некоторых задач алгоритма нет вообще.

Алгоритмически неразрешимая задача

Задача алгоритмически неразрешима, если не существует алгоритма, который решает её при любых входных данных.

Почему анализатора не бывает

Допустим, есть программа-анализатор: дай ей текст любой программы и входные данные — она ответит «остановится» или «не остановится».

А конкретную программу проверить можно

фрагмент программы — набери его сам

Неразрешима задача для всех программ сразу. Про одну программу часто можно рассуждать.

Невозможность автоматической отладки

Не бывает программы, которая про любую программу скажет, верно ли та работает на всех входах: с её помощью решалась бы задача останова.

Сложность вычислений

Время

Число элементарных действий в зависимости от размера данных n. Не секунды: секунды зависят от компьютера, а число действий — только от алгоритма.

Память

Число хранимых значений в зависимости от n. Таблица n × n — это n² чисел.

Сколько раз выполнится тело

что в программесколько раз телопорядок
цикл по n, в нём цикл по mn · mn²
внутренний цикл до i (или от i до n)0 + 1 + … + (n − 1) = n(n − 1)/2n²
три цикла, i < j < kn(n − 1)(n − 2)/6n³
i умножается на 2, пока i < nсколько раз удвоить 1, чтобы дорасти до nlog n
цикл по n, в нём деление пополамn · (число делений)n · log n

Пример: внутренний цикл до i

фрагмент программы — набери его сам

Сколько раз выполнится код?

Как растут время и память

nnn²n³2ⁿ
10101001 0001 024
20204008 0001 048 576
40401 60064 000≈ 1,1 · 10¹²

Какой алгоритм выгоднее

Поиск

Линейный — n сравнений. Двоичный — около log₂n, но только в упорядоченном массиве.

Сортировка

Выбором — n(n − 1)/2 сравнений. Слиянием — около n · log₂n.

Зачем это на экзамене

В заданиях 26–27 ЕГЭ данных много — сотни тысяч и миллионы чисел, а время работы программы ограничено.

Что верно, а что нет

Верно

  • Неразрешимость не мешает разобраться с конкретной программой.
  • Тесты могут найти ошибку, но не доказать, что её нет.
  • n вдвое больше при n² — время вчетверо.

Неверно

  • «Неразрешима, потому что компьютеры медленные». Алгоритма нет в принципе.
  • «Прошла все тесты — ошибок нет».
  • «2ⁿ всегда дольше n³». При малых n бывает наоборот.
  • «Сложность — число строк программы».

Что делаем дальше

  1. Обзорный практикум — шесть задач, все сразу на странице, в любом порядке: понятия, остановится ли программа, сколько раз выполнится тело, рост времени и памяти, какой алгоритм выгоднее, где впервые ошибётся функция.
  2. Значения n по виткам и таблицу по внешнему циклу — на черновике, как на слайдах. Программы не запускаем: код на странице — картинкой.
  3. Ответ везде — целое число.

Отметка: закрыто 6 из 6 — «5», 5 — «4», 3 или 4 — «3». Исправленная задача не засчитывается — за ошибку приходит новая, добирать можно до пятёрки.

За работу

Практикум «Неразрешимые задачи и сложность вычислений» — в общей папке и на сайте. Не успел на уроке — пройди дома: вариант будет другой, сдаётся тем же кодом.

Карточку в тетрадь можно взять с собой: на ней доказательство через программу Наоборот, приём «значение повторилось» и таблица «сколько раз выполнится тело».

Материалы подготовлены с использованием технологий искусственного интеллекта. Пробел раскрыть и дальше · ← → слайды