Чому ця функція обчислюється в


10

У моєму підручнику сказано: "Ми визначаємо функцію f:NN наступним чином: f(1)=2 і f(i+1)=2f(i)1.2. Зауважимо, що даноn, ми можемо легко знайти в O(n1.5) час число i такий як n бутерброд між f(i) і f(i+1). "

Як я можу переконати себе, що насправді ми можемо легко знайти i в O(n1.5)час? Якf визначається рекурсивно, я думаю, що ми повинні зробити обчислення f(1),f(2),f(3)f(j) до f(j)n. Для того, щоб з’ясувати час, який займають ці обчислення, я думаю, що ми повинні знайти відповідну верхню межуi залежить від n і ми повинні знайти верхню межу часу виконання функції x2x1.2. Зрештою, ми можемо сподіватися показати цитовану пропозицію. На жаль, я не бачу ні одного, ні іншого.

Я забув зазначити: Зверніть увагу, що ми перебуваємо в недетермінованому контексті. Томуf стверджується, що його можна обчислити в O(n1.5) недетермінованою машиною Тюрінга.


Оскільки досить багато людей вже читали це запитання, дехто з них вважає це корисним і цікавим, але поки ніхто не відповів, я хочу надати ще деяку інформацію в контексті: цитований позов є невід'ємною частиною доказу теорема недетермінованої ієрархії часу. Докази (з твердженням) можна знайти, наприклад, у книзі Арори та Барака , але я знайшов ще чимало інших ресурсів у Мережі, які представляють те саме підтвердження. Кожен із них називає претензію легкою чи тривіальною і не пояснює, як її знайтиi в O(n1.5)час. Отже, або всі ці ресурси просто скопійовані з Арори та Барака, або заявка насправді не така вже й складна.


1
Це виглядає як доказ теореми недетермінованої часової ієрархії в Arora & Barak, чи не так? Якщо так, я припускаю, що недетермінізм тут відіграє певну роль.
Г. Бах

Ти правий. Вибачте за це, я мав би згадати недетермінований контекст. Чи можете ви поясніть, будь ласка, більш детально, як недетермінізм допомагає нам там показати межу O (n ^ 1,5)?
користувач1494080

Відповіді:


4

Позначимо через |x| довжина числа x, тобто log2x+1 (для x>0). Розрахунок2x вимагає часу O(x) в моделі оперативної пам’яті і так обчислювальної f(i+1) з f(i) займає час O(f(i)1.2)=O(|f(i+1)|). З тих пірf(i) росте швидше, ніж геометрично, загальний час обчислення f(i+1) є O(|f(i+1)|). Як ви вказуєте, робити це потрібно до тих пір, покиf(i+1)n, що означає, що f(i)<n. Тому загальний час роботиO(|f(i+1)|)=O(f(i)1.2)=O(n1.2).

У моделі машини Тьюрінга з однією стрічкою, обчислення 2x займає час O(xlogx), і тому загальний час роботи O(n1.2logn)=O(n1.5). Алгоритм обчислення2x замінює [x] від 1[[x]] (тут [x] є двійкове представлення x, і [[x]] - двійкове представлення з використанням різних цифр 0,1), а потім неодноразово запускає перетворення [[x]]0[[x1]], що вимагає часу O(|x|)=O(logx).


Ідеально, дякую! Ще одне питання: чи не треба нам сперечатися, що | f (i) | росте швидше, ніж геометрично, а не f (i) росте швидше, ніж геометрично?
користувач1494080

З тих пір |f(i+1)|=f(i)1.2, це те саме, але ти маєш рацію. Чого ми насправді хочемо, так і єji|f(j)|=O(|f(i)|).
Yuval Filmus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.