Estou procurando um algoritmo eficiente para o problema:
Entrada : O número inteiro positivo (armazenado como bits) para algum número inteiro .
Saída : O número .
Pergunta : Podemos calcular partir dos bits de em tempo?
Esta é uma pergunta teórica motivada pela minha resposta a uma pergunta math.SE Como encontrar uma fórmula para esta bijeção? . Nesta questão, o autor queria encontrar uma bijeção de
Com a minha solução proposta, se sabemos que e m , podemos facilmente calcular 2 m ( 2 n + 1 ) (escrever os dígitos binários de n seguido por 1 seguido de m zeros). Isso leva tempo O ( n + m ) .
Encontrar partir dos bits de 2 m 3 n equivale a encontrar o bit menos significativo (que pode ser calculado contando as mudanças de bits corretas, deixando 3 n na memória). Isso leva tempo O ( m ) .
No entanto, também precisamos encontrar , o que pode ser mais difícil. Seria possível encontrar n dividindo repetidamente por 3 , mas isso parece um desperdício. Requer n operações de divisão, cada uma das quais levará tempo O ( n ) , portanto, esse é o tempo O ( n 2 ) no total. [Na verdade, após cada iteração, o número de dígitos diminui linearmente, mas isso ainda resulta em tempo de O ( n 2 ) .]
Parece que deveríamos ser capazes de explorar sabendo que a entrada é uma potência de .