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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сложность

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

использованная литература

  1. ^ а б Христос Пападимитриу (1994). «2.4. Линейное ускорение». Вычислительная сложность. Эддисон-Уэсли.
  2. ^ Томас А. Судкамп (1994). «14.2 Линейное ускорение». Языки и машины: введение в теорию информатики. Эддисон-Уэсли.