Наведений нижче приклад доводить, що алгоритму який приймає для вирішення проблеми у word-Ram, може знадобитися на 1-стрічковій машині Тьюрінга (TM ) , що в точності виконує всі розрахунки , зазначені . Я розумію, що питання стосується ТМ-стрічки, і я використовую лише це у своїй відповіді. Це редакція для вирішення зауважень Еміля Йерабека.AO(nlog(n))O(n2log(n)3)A
Ми знайдемо наступний більш загальний висновок . Для того, щоб довести , що ТМ може вирішити в проблема вирішена в з допомогою алгоритму на RAM, це НЕ досить запустити на ТМ. Розумний алгоритм може знадобитися. Те саме стосується, якщо потрібно довести накладні витрати . Доведення найменшого доказів існування розумного алгоритму, щонайменше, далеко не негайне. Це не узгоджується з іншими відповідями, які в основному пропонують лише моделювати / виконувати на TM всі обчислення RAM (алгоритму ), щоб оголосити складність TM, якO(T(n)2)O(T(n))AAO(nlog(n))AO(T(n)2) або .O(T(n)nlog(n))
Проблема: нам надається масив / таблиця з цілими числами, кожне з яких зберігається у бітах. Нам видається другий масив з позиціями, кожен з яких записує кількість біт. Для будь-якого визначаємо якщо MOD MOD . В іншому випадку . Вихід . Я вважаю, що вхід подається у вигляді стрічки зtabn=2klog(n)dlog(n)log(n)t∈[0..log(n)−1]Xt=1tab[i]d[t]=tab[n/2+i]d[t] ∀i∈[0..n/2−1]Xt=0∑log(n)−1t=0Xtnlog(n)+log(n)log(n) двійкові цифри, щоб відповісти на коментарі Еміля Єржабека.
Алгоритм на оперативній пам’ятіA ОЗУ з розміром слова потрібно = для читання вводу двійкового рядка дані. Але після прочитання даних він може працювати лише зі словами розміру . Алгоритм обчислює будь-який в , провівши всі і перевіривши умову. Основний цикл - FOR : обчислити . Загальна складність становить (читання даних) +w=log(n)O(nlog(n)+log(n)2)O(nlog(n))log(n)AXtO(n)i∈[0..n/2−1]At=0,1,2,…log(n)−1XtO(nlog(n))O(nlog(n))(робить обчислення), тому може це зробити все в на ОЗП.AO(nlog(n))
Алгоритм на 1-стрічці ТМ:A Я стверджую, що для однієї стрічки ТМ потрібен час для фіксованого . З точки зору ТМ, визначення еквівалентне випробуванню рівності двох двійкових рядків довжиною . Наприклад, операція MOD MOD може бути еквівалентно видаленню біт з . У таких випадках визначення еквівалентно тестуванню рівності на бітових рядках довжиною . Загальновідомо, що перевірка рівності двох струн довжиноюO(n2log(n)2)tAtO(nlog(n))tab[i]d[t]0tab[i]Atn(log(n)−1)/2mвимагає на 1-стрічковому ТМ, але зараз я не можу знайти посилання. Однак я надаю доказ у пс. Якщо ТМ виконує основний цикл з , він повинен провести принаймні для кожного , в кінцевому підсумку в .O(m2)AO((nlogn)2)t=0,1,2,…log(n)−1O(n2log(n)3)
пс. Я показую, що тестування рівності на бітових рядках з бітами не може бути швидшим, ніж тест на палиндром на рядках з бітами (як відомо, паліндром займає принаймні час). Ми можемо модифікувати будь-який алгоритм ТМ для тестування рівності для вирішення паліндром. Припустимо, тестування рівності ТМ починається з двох цілих чисел: одне зліва від голови, одне праворуч (це найпростіша форма введення для ТМ). Кожен рух по лівій позиції може бути відображений (відображений) над правими. Ми будуємо дзеркальну ТМ: щоразу, коли початкова ТМ знаходиться в положенні (зліва), дзеркальна ТМ знаходиться в положенні (справа). Якщо ТМ вирішив тестування рівності менше ніжmmO(m2)−x<0xO(m2), ця модифікована дзеркальна ТМ дозволила б вирішити паліндром менше ніж .O(m2)
Крім того, існують деякі алгоритми тестування рівності TM, і всі вони потребують квадратичного часу, оскільки їм потрібні певні зигзаги, див., Наприклад, Приклад машини Turing 2 за адресою course.cs.washington.edu/courses/cse431/14sp/scribes/ lec3.pdf