Ответ бесстыдно скопировал с себя :
Многоленточная машина Тьюринга по большей части такая же, как и одноленточная машина, за исключением того, что у нас есть расширенная функция перехода где k - количество лент. Таким образом, в каждом состоянии функция перехода считывает содержимое каждой ленты, переходит в новое состояние, (возможно) записывает что-то на каждую ленту и перемещает каждую головку - так же, как обычный TM, за исключением того, что теперь у нас есть больше вещей для чтения, записи и двигаться.Q × ΓК→ Q × ΓК× { L , R }КК
Как показывает ваш вопрос, такую машину можно смоделировать с помощью однотонной ТМ. Более того, это можно сделать только с помощью квадратичного замедления (поэтому для полиномиально закрытых классов достаточно поговорить об одноленточных машинах).
Доказательство этому несколько сложное и легко доступное с помощью простого веб-поиска, поэтому я просто нарисую раскладку клавиш на одну ленту.К
Основная идея довольно проста; мы просто добавляем несколько новых символов и отслеживаем каждую ленту и возглавляем одну за другой. На каждом этапе вычислений мы могли посетить только ограниченное количество любых лент, поэтому нам нужно только хранить столько информации о каждой ленте. Таким образом, для каждого мы добавляем новый символ γ _ к Γ, который будет указывать, где находится головка (для каждой ленты) в любой точке вычисления. Мы также вводим символ-разделитель # для Γ, который будет указывать начало и конец «виртуальных» лент. Заданный вход ω = ω 1 … ω nγ∈ Γγ--Γ#Γω=ω1…ωn(мы можем предположить, что даже на многолентовой машине все входные данные находятся на первой ленте - доказательство того, почему это хорошее упражнение) на многоленточной машине наша одноленточная машина будет иметь ввод
#ω1–––…ωn#⊔––#⊔––#…#⊔––#k sections, one per tape⊔⊔⊔⊔⊔⊔…
k
(Надеюсь) простой пример:
Σ={0,1}Γ={0,1,⊔}ω=10101
Tape 1:Tape 2:Tape 3:1∧0101⊔⊔⊔…⊔∧⊔⊔⊔⊔⊔…⊔∧⊔⊔⊔⊔⊔…
∧
Чтобы создать комбинированную одноленточную машину, нам нужно добавить новые символы в ленточный алфавит:
- Нам нужен символ, который будет обозначать начало и конец моделируемых лент
- Γ
Γ′={0,1,⊔,0–,1–,⊔––,#}
#1–∧0101#⊔––#⊔––#⊔⊔⊔…
∧) и смоделированные головки из 3 смоделированных лент (подчеркнутые символы). Конечно, лента как обычно простирается бесконечно вправо. Я также слегка обманул, переместив головку ленты к первому символу в первой строке; строго он должен начинаться с самой левой ячейки, но это тривиальная техническая задача.
#
1101
1
Tape 1:Tape 2:Tape 3:10∧101⊔⊔⊔…1⊔∧⊔⊔⊔⊔…⊔∧⊔⊔⊔⊔⊔…
0
Tape 1:Tape 2:Tape 3:101∧01⊔⊔⊔…1⊔∧⊔⊔⊔⊔…1⊔∧⊔⊔⊔⊔…
Γ′
#10–∧101#1⊔––#⊔––#⊔⊔⊔…
После второго шага:
#101–∧01#1⊔––#1⊔––#⊔⊔⊔…
Конечно, это высокоуровневое представление процесса - я не пытался объяснить, как создавать состояния, или как каждая моделируемая лента становится длиннее (для этого вам понадобится небольшая процедура, которая проверяет, сталкивались ли вы с конец смоделированной ленты, затем перемещает все вправо на один шаг вперед и сжимает новый пробел - т.е. он добавляет только смоделированные ячейки ленты, когда они необходимы).