Добавлю ещё одну задачу про конечные автоматы. Она вроде где-то уже всплывала, но не помню где. Тоже хороша.
Сначала оговорим один ньюанс, важный для нашей задачи. Он касается различия в определении детерминированного конечного автомата, принятого в разных источниках, и его нужно оговорить для того, чтобы задача была чётко сформулирована для всех посетителей форума, в том числе и для тех, кто изучал конечные автоматы не на ММФ НГУ. Те, кто изучал конечные автоматы в рамках курса ТА на первом курсе ММФ НГУ, могут пропустить следующий абзац.
Считаем, что в детерминированном конечном автомате для каждого состояния и каждого символа существует ровно один переход, выходящий из данного состояния и помеченный данным символом. В НГУ на обоих потоках ММФ принято именно такое определение, однако в некоторых книгах встречается определение ДКА, в котором фраза "ровно один переход" заменена на фразу "не более одного перехода". В частности, если ДКА распознаёт некоторый язык

, для которого существует такое слово

, что при всех словах

слово

не принадлежит

, то этот ДКА должен содержать ловушечные состояния, т. е. состояния, которые достижимы из начального и из которых не достижимо ни одно конечное состояние. (Если рассматривать определения ДКА, в которых фигурирует фраза "не более одного", то ловушечные состояния могут опускаться).
В остальном все определения стандартные.
Задача такая: для каждого натурального

придумать такой недетерминированный конечный автомат с

состояниями, работающий с символами двухбуквенного алфавита, для которого любой эквивалентный ему (то есть распознающий тот же самый язык) детерминированный конечный автомат содержит не менее чем

состояний.
P. S. Задача существенна для понимания того факта, что любой алгоритм преобразования недетерминированного конечного автомата в эквивалентный ему детерминированный имеет не менее чем экспоненциальную сложность. Хотя бы потому, что если на вход такого алгоритма подаётся диаграмма НКА из

состояний, работающего с двухсимвольным алфавитом, то длину входа можно ограничить полиномом от

, однако длина выхода в некоторых случаях неизбежно будет ограничена снизу числом

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