Теорема о линейном ускорении - Linear speedup theorem

В теории сложности вычислений теорема о линейном ускорении для машин Тьюринга утверждает, что для любого действительного c> 0 и любой k- ленточной машины Тьюринга, решающей задачу за время f (n) , существует другая k- ленточная машина, которая решает ту же проблему в время не более f (n) / c + 2n + 3 , где k> 1 . Если исходная машина недетерминирована , то новая машина также недетерминирована. Конкретные константы 2 и 3 в 2n + 3 могут быть уменьшены, например, до n + 2 .

Доказательство

Конструкция основана на упаковку несколько магнитофонов символов оригинальной машины M в один символ ленты новой машины N . Это имеет тот же эффект, что и использование более длинных слов и команд в процессорах: ускоряет вычисления, но увеличивает размер машины. Сколько старых символов упаковано в новый, зависит от желаемого ускорения.

Предположим, новая машина упаковывает три старых символа в новый символ. Тогда алфавит новой машины : Он состоит из исходных символов и упакованных символов. В новой машине такое же количество лент k> 1 . Состояние N состоит из следующих компонентов:

  • состояние `` М '';
  • для каждой ленты: три упакованных символа, которые описывают упакованный символ под заголовком, упакованный символ слева и упакованный символ справа; и
  • для каждой ленты: исходное положение головы в упакованном символ под головкой N .

Новая машина N начинается с кодирования данного ввода в новый алфавит (поэтому его алфавит должен включать ). Например, если вход для 2-ленты M находится слева, то после кодирования конфигурация ленты N будет справа:

[# _ а б б а б б а _ ...]      [# (_, _, _) (_, _, _) (_, _, _) ...]
[# _ _ _ _ _ _ _ _ _ ...]      [# (_, а, б) (б, а, б) (б, а, _) ...]

Новая машина упаковывает три старых символа (например, пустой символ _ , символ a и символ b ) в новый символ ( (_, a, b) ) и копирует его на вторую ленту, стирая при этом первую ленту. В конце инициализации новая машина направляет свою голову в начало. В целом это занимает 2n + 3 шага.

После инициализации состояние N равно , где символ означает, что он будет заполнен машиной позже; символ означает, что голова оригинальной машины указывает на первые символы внутри и . Теперь машина начинает моделировать m = 3 перехода M, используя шесть собственных переходов (в данном конкретном случае ускорения не будет, но в целом m может быть намного больше шести). Пусть конфигурации M и N следующие:

[# _ _ б б а б б а _ ...]      [# (_, а, б) (б, а, б) ( b , _, _) ...]
[# _ а б б а б б _ _ ...]      [# (_, _, б ) (б, а, б) (б, а, _) ...]

где жирным шрифтом обозначено положение головы. Состояние N есть . Теперь происходит следующее:

  • N перемещается вправо, влево, влево, вправо. После четырех ходов машина N полностью заполнена, и ее состояние становится
  • Теперь N обновляет свои символы и состояние в соответствии с m = 3 переходами исходной машины. Для этого может потребоваться два хода (обновить текущий символ и обновить один из соседних символов). Предположим, что исходная машина движется следующим образом (с соответствующей конфигурацией N справа):
[# _ _ _ _ _ б б а _ ...]      [# (_, а, б) ( b , _, _) (_, _, _) ...]
[# _ а б б _ _ _ _ _ ...]      [# (_, _, _) (_, _, б ) (б, а, _) ...]

Таким образом, состояние N становится .

Сложность

Инициализация требует 2n + 3 шагов. При моделировании 6 шагов N имитации м стадии М . Выбор m> 6c дает время работы .

Рекомендации