Я ищу эффективный алгоритм для решения проблемы:
Входные данные : положительное целое число (сохраняется в виде битов) для некоторого целого числа .
Вывод : число .
Вопрос : Можем ли мы вычислить из битов за времени?
Это теоретический вопрос, мотивированный моим ответом на вопрос по математике. Как найти формулу для этой биекции? , В этом вопросе автор хотел найти биекцию из
С моим предложенным решением, если мы знаем и , мы можем легко вычислить (запишите двоичные цифры за которыми следует последующими нулями). Это занимает времени.
Нахождение из битов 2 m 3 n равносильно нахождению младшего значащего бита (который можно вычислить путем подсчета сдвигов правильных битов, оставив в памяти 3 n ). Это занимает O ( м ) времени.
Однако нам также нужно найти , что может быть сложнее. Можно было бы найти n путем повторного деления на 3 , но это кажется расточительным. Требуется n операций деления, каждая из которых займет O ( n ) времени, так что это всего O ( n 2 ) времени. [На самом деле, после каждой итерации количество цифр будет линейно уменьшаться, но это все равно приводит к времени O ( n 2 ) .]
Кажется, что мы должны быть в состоянии использовать, зная, что вход является степенью .