Великі розбіжності між оперативною пам’яттю та складністю машини Тьюрінга


9

Якщо ми розглянемо лише проблеми в P, чи існують великі прогалини між найшвидшим відомим алгоритмом word-RAM та найшвидшим відомим алгоритмом машини Тьюрінга для конкретних проблем? Мене особливо цікавить, якщо існують широкі прогалини для природних проблем загального інтересу.


6
машину оперативної пам’яті можна моделювати машиною Тьюрінга з накладними витратами під час виконання. Тож не буде справді великих прогалин. O(nlogn)
Шаул

@Shaull Чи існує розрив такого розміру для будь-якої природної / популярної проблеми?
Лембік

3
Паліндром займає час на односмуговій ТМ (і є в ОЗП). eecs.yorku.ca/course_archive/2008-09/W/6115/palindrome.pdfΩ(n2)O(n)
SamM

6
Наскільки я знаю, коментар Шаула стосується лише недетермінованих машин, а також для налаштування двома стрічковими ТМ. Цитування, Шаул?
Райан Вільямс

1
@ qbt937 - Нічого собі, який вибух з минулого :) Я вважаю, що я не посилався на цитування, тому що у мене його не було (і в мене його немає зараз), і, можливо, Раян Вільямс прав.
Шоул

Відповіді:


6

Відомо, що будь-яку проблему, яку ви можете обчислити на машині оперативної пам’яті за час , ви можете зробити це в машині Тьюрінга в часі, максимум . Вам потрібно зауважити, що загальний об'єм використовуваної пам'яті не може перевищувати , оскільки це означатиме, що ви робили більше операцій запису, ніж , тому кожен раз, коли ви отримуєте щось із оперативної пам'яті, Тьюрінг машині знадобиться в гіршому випадку час, щоб знайти потрібний елемент послідовно зі стрічки. Крім доступу до пам'яті, решта операцій повинна тривати приблизно один і той же час. І таким чином ви отримуєте зв'язане.T(n)T(n)2T(n)T(n)T(n)


2
Оперативні пам’яті можуть обчислити довжину вводу (а отже, і сторону цієї довжини) за логарифмічний час, але базовим машинам Тьюрінга потрібен лінійний час для обчислення цього паритету.

1

Наведений нижче приклад доводить, що алгоритму який приймає для вирішення проблеми у 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/21]Xt=0t=0log(n)1Xtnlog(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/21]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


Нижня межа паліндромів справедлива лише для неприродної односмугової моделі. Легко перевірити рівність двох рядків на ТМ за лінійним часом. Те ж саме стосується рівності двох послідовностей довших записів. Крім того, щоб питання взагалі мало сенс, вхідні дані для обох моделей машин повинні бути однаковими, тобто записаними як рядки над обмеженим алфавітом. Таким чином, вашій ОЗУ знадобиться час O (log n), щоб прочитати кожен запис і перетворити його на слово, що робить цю операцію безглуздою.
Еміль Єржабек

@Emil Jeřábek, я відредагую свою відповідь, щоб вказати, що я думаю лише про 1-стрічковий ТМ. Коли ви говорите, що ТМ може перевірити рівність у лінійному часі, я гадаю, ви думаєте про 2-стрічкову ТМ. Однак я зрозумів, що все питання стосується 1-стрічкових ТМ. Щодо форми введення, я мушу визнати, що ти можеш мати рацію, принаймні, для деяких слов-ОЗУ. Але, наскільки я знаю, Int масив C ++ зберігає цілі числа одне за одним без роздільника, ніби вони зберігають разом послідовність бітів. 10 інт на 16 біт займають рівно 160 біт, чи не так? Навіть якщо це не так, можна створити машину, яка працює таким чином.
Даніель Порумбель

3
Стандартна модель машини Тьюрінга в теорії складності - це багатосмугова стрічка. Я не бачу, наскільки C ++ має тут будь-яку актуальність, ми обговорюємо не C ++, а модель RAM. У цій моделі окремі місця пам'яті можуть містити номери довжини , але ми все одно можемо оперувати лише одним (або ) місцем пам'яті одночасно. Зокрема, ми можемо отримувати доступ до входу лише одне місце за один раз: не існує жодної операції, яка дозволила б постійно "читати вхідних місць і з'єднувати їх у одне слово" за постійний час. O(logn)O(1)logn
Emil Jeřábek

Є дві можливості: (1) Місце введення [0] містить перший біт першого числа, розташування [1] містить другий біт першого числа тощо. Тоді для читання в оперативній пам'яті потрібно час , як і для машини Тьюрінга. Таким чином, навіть із односмуговими ТМ ви отримуєте лише квадратичне прискорення. (2) Місце введення [0] містить перше число, розташування [1] друге число тощо. Тоді проблема є безглуздою для TM, оскільки вона не може обробити введення цієї форми. Таким чином, ви взагалі не отримуєте жодної швидкості, а проблема, яка виразна лише в одній із машинних моделей. O(nlogn)
Еміль Єржабек

@Emil Jeřábek, Після ваших зауважень я відредагував питання, щоб запропонувати проблему та алгоритм оперативної пам'яті, який явно приймає для зчитування даних (зі стрічки). Я видалив деякі свої зауваження, які вже не мають значення. Я сподіваюся, що це вирішить проблему, яку ви вказали. O(nlog(n))
Даніель Порумбель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.