Количество состояний взрывается из-за недетерминизма , который является ключом к вашему вопросу.
Если вы берете NFA, где каждый переход однозначно определен, то есть детерминистический NFA, то это не что иное, как обычный DFA. Однако если у вас есть состояние, в котором возможны два перехода, оно отличается от DFA.
Рассмотрите алгоритм преобразования и посмотрите, что произойдет, если у вас есть два или более переходов с одинаковой меткой для состояния. Именно здесь вам нужны те новые состояния, которые соответствуют наборам состояний.
Таким образом, вопрос сводится к тому, чтобы выяснить, сколько из этих сверхмножественных состояний действительно достижимо. Конечно, вы могли бы придумать для этого причудливый алгоритм, но чтобы получить правильное число, просто запустите обычный алгоритм преобразования и удалите недостижимые состояния.
Что касается NFA с n состояниями, для которых эквивалентный DFA имеет 2 ^ n состояний, подумайте об использовании недетерминизма. Первой идеей было бы пометить все переходы одинаково, однако это не слишком хорошо работает. Вместо этого помните, что вам нужно каким-то образом достичь всех подмножеств состояний с некоторыми метками.
Если вы не учитываете начальное состояние, то вы можете выполнить следующую конструкцию: создать n узлов и для каждого набора из 2 ^ n создать уникальную метку и в NFA добавить переход с этой меткой к каждому узлу этот набор. Это дает вам NFA с n + 1 состояниями (1 является начальным состоянием), где DFA требует 2 ^ n +1 состояний. Конечно, становится сложнее, если вы хотите иметь 2 ^ n состояний DFA после минимизации.