Эта задача эквивалентна задаче определения того, принимает ли детерминированный конечный автомат над двоичным алфавитом строку длины m.Чтобы построить автомат, добавьте столько состояний, сколько элементов массива, и два перехода, чтобы представить перемещение влево или вправо на соответствующее количество позиций.Сделайте состояние, соответствующее последнему принимаемому элементу массива, и сделайте состояние, соответствующее первому элементу массива, начальным состоянием.
Затем создайте детерминированный конечный автомат, который принимает все двоичные строки длины ровно n.Этот DFA будет иметь n + 1 состояний, одно начальное состояние и одно принимающее состояние.
Затем создайте DFA для пересечения языков этих DFA, используя конструкцию Cartesian Product Machine.Этот DFA будет иметь одно состояние для каждой пары состояний из двух вышеупомянутых DFA, начнется в состоянии, соответствующем паре начальных состояний, и завершится в состоянии, соответствующем паре принимающих состояний.
Наконец, определите, является ли язык этого DFA пустым языком или нет.Достаточно поиска в ширину или глубину или минимизацию с последующим сравнением с DFA для пустого языка.
Вы начинаете с двух DFA, имеющих состояния n и n + 1;построить DFA с n (n + 1) состояниями;а затем посмотреть, принимает ли он строки.Сложность должна быть O (n ^ 2).