Обчислення кількості біт великої цілої сили


10

Враховуючи два цілих числа і у двійковому поданні, яка складність обчислення бітового розміру ?n x nхнхн

Один із способів зробити це - обчислити шляхом обчислення апроксимації з достатньою точністю. Виявляється, обчислення з бітами точок може бути виконано в де - час, необхідний для обчислення добутку двох цілих чисел довжини . Це дає (не спеціально простий) алгоритм складності приблизно якщо є обмеженим на біт розмірів як і (якщо я не допустив помилки).log 2 ( x ) log 2 ( x ) k O ( M ( k ) log k ) M ( k ) k O ( s log 2 с ) s x n1+⌊журнал2⁡(хн)⌋=1+⌊нжурнал2⁡(х)⌋журнал2⁡(х)журнал2⁡(х)кО(М(к)журнал⁡к)М(к)кО(сжурнал2⁡с)схн

Чи можемо ми перемогти де розмір і (у випадку, коли вони мають порівнянні розміри)? Чи є простий алгоритм, щоб отримати цю складність чи краще?О(сжурнал2⁡(с))схн

Примітка: Мене цікавить складність такої теоретичної моделі, як машини Тьюрінга.


пропонуємо перенести / "просувати" це на Теоретичні інформатики
— vzn

@vzn: Я не думаю, що це корисно ...
— Бруно,

чому ні? це питання нагадує мені алгоритмічні атаки на гіпотезу Дійсона, наприклад, як охоплений RJLipton в 1 , 2
— vzn

Просто тому, що я знайшов відповідь на своє запитання, тому мені не потрібно його іншим запитувати.
— Бруно

Відповіді:


1

[редагувати] Як пропонується, я редагую свою відповідь, щоб надати більше деталей.

Відповідь на моє друге питання - ні :

Пропозиція. Обчислювальний до точності k принаймні такий же складний, як і обчислення розміру біта x 2 k .журнал⁡(х)кх2к

Доказ. Нехай позначають бітовий розмір цілого числа y . Спочатку зауважте, що для негативного цілого числа y розмір біта y дорівнює 1 + ⌊ log y ⌋ .|у|ууу1+⌊журнал⁡у⌋

Таким чином, . Тепер 2 k log ( x ) - log ( x ) зміщений k позицій вліво. Таким чином, можна обчислити log ( x ) до точності k , просто віднявши 1 до розміру біта x 2 k і змістивши результати k позицій вправо.|x2k|=1+⌊2klog⁡x⌋2klog⁡(x)log⁡(x)klog⁡(x)k1х2кк


1
Чому кількість біт у дає змогу обчислити log x до k біт точності? Чи справді зменшення працює? Що робити, якщо особливий випадок, коли n = 2 k було набагато простіше / важче, ніж усі інші можливі значення n (не-потужність-два)? Чи є у вас спосіб виключити таку можливість? х2кжурнал⁡хкн=2кн
— DW

@DW: Я повертаюся до цього питання після коментаря vzn. Мій доказ такий: Кількість бітів цілого числа дорівнює 1 + ⌊ log y ⌋ . Таким чином, кількість бітів у x 2 k дорівнює 1 + ⌊ 2 k log x ⌋ . Далі, 2 k log x - це те саме, що log x, але зрушено k позицій вліво. Таким чином, ⌊ 2 k log x ⌋ дає (принаймні) k перших бітіву1+⌊журнал⁡у⌋х2к1+⌊2кжурнал⁡х⌋2кжурнал⁡хжурнал⁡хк⌊2кжурнал⁡х⌋к . Таким чином, якщо ви можете обчислити кількість бітів x 2 k , віднявши 1 до результату, ви отримаєте перші k біт log x . Це має сенс? журнал⁡хх2к1кжурнал⁡х
— Бруно

Так, це має для мене більше сенсу! Тим більше що ви просто намагаєтесь проявити твердість. Чи можу я заохотити вас оновити свою відповідь за допомогою цього більш детального пояснення? Дякуємо, що повернулися до цього і задокументували відповідь на власне запитання.
— DW
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.