Чи можемо ми обчислити з бітів за час?


11

Я шукаю ефективний алгоритм для проблеми:

Введення : додатне ціле число (зберігається як біти) для деякого цілого числа .3nn0

Вихід : Число .n

Запитання : Чи можемо ми обчислити з бітів за час?n3nO(n)


Це теоретичне запитання, мотивоване моєю відповіддю на математичне запитання. Як знайти формулу цього біекція? . У цьому питанні автор хотів знайти бісекцію з та натуральні числа . Я запропонував як рішення. Інша відповідь там стверджує, що "немає простої формули", що змушує мене замислитися, наскільки (обчислювально) просте моє запропоноване рішення.

{2n3m:n0 and m0}
N={1,2,}
2m3n2m(2n+1)

З моїм запропонованим рішенням, якщо ми знаємо і , ми можемо легко обчислити (записати двійкові цифри наступним а потім нулями). Це займає час .nm2m(2n+1)n1mО(н+м)

Знаходження з бітів означає знаходження найменш значущого біта (який можна обчислити підрахунком правильних зрушень бітів, залишивши в пам'яті ). Це займає час.2 m 3 n 3 n O ( м )м2м3н3нО(м)

Однак нам також потрібно знайти , що може бути складніше. Можна було б знайти , повторно ділившись на , але це здається марнотратним. Для цього потрібно операцій поділу, кожна з яких займе час , тому в цілому це час . [Власне, після кожної ітерації кількість цифр лінійно зменшиться, але це все одно призводить до часу .]n 3 n O ( n ) O ( n 2 ) O ( n 2 )нн3нО(н)О(н2)О(н2)

Схоже, ми повинні мати можливість використовувати, знаючи, що вхід - це сила .3


2
Яка ваша точна модель обчислень? Які операції дозволені в час? (Якби ми могли зробити арифметику з такими числами, як це було б дуже корисно ...)log 2 3О(1)журнал23
Yuval Filmus

3
Чи може пояснювач пояснити сутичку? Це зовсім не здається тривіальним питанням. Який найкращий час роботи за певною розумною моделлю обчислення?
Yuval Filmus

1
Я уявляю стрічки з 0, 1 та порожніми клітинками (з нескінченною кількістю стрічок). Я хочу, щоб одиничні бітові перемикання та операції зсуву ліворуч / праворуч виконувалися в час. (Якщо у нас є маркер 0-го біта на нескінченній стрічці, то зсув вліво / вправо досягається зміщенням маркера). На відміну від машини Тьюрінга, я не хочу, щоб це зайняло часу для переміщення вказівника. Отже, "переключення 0-го біта" займає той же час, що і "перемикання 124126-го біта". О(1)
Rebecca J. Stones

Це може бути якимось чином пов’язане з цим питанням
J.-E.

Чи очевидна нижня межа ? Ω(н)
Борис Бух

Відповіді:


9

Очевидний підхід:

(1) Обчислити наближення до . Ви можете наблизити його до помилки додаткової помилки 1, порахувавши кількість бітів у заданому бінарному поданні, і до помилки добавки , додатково подивившись на верхній біти вводу. Досить вибрати значення постійного значення , щоб (після поєднання з помилкою на кроці (2)) кінцевий результат опинився в межах додаткової помилки правильної.ϵ O ( log 1журнал2(3н)ϵepsi1/2О(журнал1ϵ)ϵ1/2

(2) Обчислити наближення до . Я не знайомий з алгоритмами цього, але я думаю, що вони потребують багаточлени часу в кількості потрібних вам бітів точності, і вам потрібні лише біти точності .O ( журнал n )журнал2(3)О(журналн)

(3) Розділіть відповідь на (1) на відповідь на (2) і округніть до найближчого цілого числа.

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


3
Я вважаю, що для обчислення до біт точності потрібен час , де час помножити бітні числа. Дивіться Brent - Zimmermann, loria.fr/~zimmerma/mca/pub226.htmlt O ( M ( t ) log t ) M ( t ) O ( t log t 2 log t ) tжурнал2(3)тО(М(т)журналт)М(т)О(тжурналт2журналт)т
Ryan O'Donnell

Дякую за довідку та вибачте за те, що я занадто лінивий, щоб розібратися.
Девід Еппштейн

9

Для будь-якого цілого числа , для запису у двійковій формі потрібно точно біт. З елементарної алгебри випливає, що Для будь-якої бітової довжини в цьому діапазоні є щонайбільше одне ціле число. Таким чином, з урахуванням інтегральної потужності що дорівнює бітам, експонентом повинно бути ціле число 3 n L = log 2 ( 3 n ) + 1 L - 2н>03нL=журнал2(3н)+1L13Ln=L-1

L2log23nL1log23.
L13L
n=L1log23.

4

Ось ще один підхід. З огляду на низький цифр 3 n , ви можете вивчити 3 n mod 10 k і, таким чином, 3 n mod 5 k . Схоже, 3 є генератором по модулю 5 к (тобто 3 має порядок φ ( 5 k ) = 5 k - 1 × 4 ).k3n3nmod10k3nmod5k35k3φ(5k)=5k1×4

Тому, використовуючи дискретний журнал та підйом Гензеля, я думаю, ви повинні мати можливість обчислити з низьких k цифр 3 n 3 . Іншими словами, ви починаєте з обчислення n mod 4 з малої цифри 3 n , переносячи дискретний журнал 3 n mod 5 на базу 3 , модуль 5 ; це виявляє n mod 4 , і це можна зробити в O ( 1 )nmodφ(5k)k3nnmod43n3nmod535nmod4O(1)час. Потім ви знайдете дискретний журнал до основи e , модуль 25 ; це виявляє n mod 20 , і це можна зробити за O ( 1 ) час (скориставшись знаннями n mod 4 , ви можете спробувати лише 5 можливостей). Ітерація. На кожному кроці ви використовуєте знання n mod φ ( 5 k - 1 ), щоб допомогти вам ефективно обчислити дискретний журнал 3 n mod 53nmod25e25nmod20O(1)nmod45nmodφ(5k1) , використовуючи той факт, що існує лише 5 можливих значень для n mod φ ( 5 k ) .3nmod5k5nmodφ(5k)

Тепер просто нехай буде досить великим, і це виявляє n .kn

Вам потрібно буде розібратися, чи час роботи , але мені здається, що це може бути. Я підозрюю, що достатньо дозволити k = O ( n ) , і я підозрюю, що ви можете робити кожну ітерацію в O ( 1 ) час, в цілому O ( n ) час.O(n)k=O(n)O(1)O(n)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.