Вычисление количества бит большой степени целого


10

Учитывая два целых числа и в двоичном представлении, какова сложность вычисления размера битов ?н х нИксNИксN

Один из способов сделать это - вычислить путем вычисления аппроксимации с достаточной точностью. Похоже, что вычисление с битами точности может быть выполнено в где - время, необходимое для вычисления произведения двух целых чисел длины . Это приводит к (не особенно простому) алгоритму сложности приблизительно если является ограничением размера битов как и (если я не сделал ошибку).log 2 ( x ) log 2 ( x ) k O ( M ( k ) log k ) M ( k ) k O ( s log 2 с ) с х н1+⌊журнал2⁡(ИксN)⌋знак равно1+⌊Nжурнал2⁡(Икс)⌋журнал2⁡(Икс)журнал2⁡(Икс)КО(M(К)журнал⁡К)M(К)КО(sжурнал2⁡s)sИксN

Можем ли мы победить где - размер и (в случае, когда они имеют сопоставимые размеры)? Есть простой алгоритм, чтобы получить эту сложность или лучше?О(sжурнал2⁡(s))sИксN

Примечание: меня интересует сложность теоретической модели, такой как машины Тьюринга.


предложить перенести / «продвинуть» это в Теоретическую Информатику
— vzn

@vzn: я не думаю, что это полезно ...
— Бруно

почему бы нет? Этот вопрос напоминает мне о алгоритмических атаках на Dysons гипотезы например , как охватывается RJLipton в 1 , 2
— ВЗНА

Просто потому, что я нашел ответ на свой вопрос, поэтому нет необходимости задавать его в другом месте, на мой взгляд.
— Бруно

Ответы:


1

[edit] Как предложено, я редактирую свой ответ, чтобы дать больше деталей.

Ответ на мой второй вопрос - нет :

Предложение. Вычислить с точностью до k по меньшей мере так же сложно, как вычислить битовый размер x 2 k .журнал⁡(Икс)КИкс2К

Доказательство. Пусть обозначает размер в битах целого числа у . Сначала обратите внимание, что для неотрицательного целого числа y размер битов y равен 1 + ⌊ log y ⌋ .|Y|YYY1+⌊журнал⁡Y⌋

Таким образом, . Теперь 2 k log ( x ) - это log ( x ), сдвинутое на k позиций влево. Таким образом, можно вычислить log ( x ) с точностью до k , просто вычитая 1 в битовый размер x 2 k и сдвигая результирующие позиции k вправо.|Икс2К|знак равно1+⌊2Кжурнал⁡Икс⌋2Кжурнал⁡(Икс)журнал⁡(Икс)Кжурнал⁡(Икс)К1Икс2КК


1
Почему число бит в позволяет вычислить лог х до K битой точности? Ваше сокращение действительно работает? Что, если особый случай, когда n = 2 k, был намного легче / сложнее, чем все другие возможные значения n (не степени двух)? У вас есть способ исключить такую ​​возможность? Икс2Кжурнал⁡ИксКNзнак равно2КN
— DW

@DW: Я возвращаюсь к этому вопросу после комментария vzn. Мое доказательство таково: количество бит целого числа равно 1 + ⌊ log y ⌋ . Таким образом, число битов в x 2 k равно 1 + k 2 k log x ⌋ . Кроме того, 2 k log x - это то же самое, что log x, но смещено на k позиций влево. Таким образом, k 2 k log x ⌋ дает вам (по крайней мере) k первых битовY1+⌊журнал⁡Y⌋Икс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.