Como está escrito, o problema requer tempo , onde m é o comprimento da entrada (infelizmente você usou n para outra coisa). Com efeito, se por exemplo α é um número inteiro positivo (dado pela sua mínima polinomial x - α ) e n = 0 , o tamanho da saída é exponencial do tamanho da entrada. É claro que esse limite é ideal, pois existem várias maneiras de calcular o resultado no tempo 2 O ( m ) .2Ω(m)mnαx−αn=02O(m)
Deixe-me tentar reformular a questão para que faça um pouco mais de sentido. A questão principal é como escolher a representação da entrada e saída, bem como a noção de aproximação, para que a exponenciação tenha uma chance de ser computável em tempo polinomial.
Uma maneira foi mencionada por Kaveh nos comentários: restringir o domínio a um intervalo finito fixo. Enquanto isso funciona, é desnecessariamente restritivo; em particular, não há uma boa maneira de transformar um número algébrico em um que seja delimitado, de modo que seus exponenciais tenham algo a ver um com o outro.
Uma abordagem mais flexível é representar a entrada como um número de ponto fixo e a saída como um número de ponto flutuante . Para ser específico, uma representação de ponto fixo é uma sequência
denotando ± Σ j um j 2 j , onde um j ∈ { 0 , 1 } , e uma representação de ponto flutuante é
± 2 e ×
±arar−1…a0.a−1…a−s
±∑jaj2jaj∈{0,1}
com uma interpretação semelhante, onde
e é um número inteiro binário e
um 0 = 1 . (Como uma exceção, nós também permitir
0 para representar a si mesmo.) Uma aproximação de uma verdadeira
x a
m bits de
absolutaprecisão é um verdadeiro
x ' tal que
| x - x ′ | < 2 - m , e uma aproximação de
m bits de
relativaprecisão é
±2e×a0.a−1…a−s
ea0=10xmx′|x−x′|<2−mm tal que
| 1 - x ′ / x | < 2 - m . Usaremos precisão absoluta para aproximações de ponto fixo e precisão relativa para aproximações de ponto flutuante. Segue-se que em ambos os casos, também podemos assumir
s ≤ m (até perda de um bit de precisão).
x′|1−x′/x|<2−ms≤m
Representações de ponto fixo e ponto flutuante de racionais gaussianos diádicos e aproximações de números complexos são definidas de forma semelhante, usando um par de reais. Em todos os lugares abaixo, indica o tamanho total da entrada.n
Agora, deixe (real ou complexa) exponenciação ser o seguinte problema: a entrada é uma representação de ponto fixo de um número e um unária número natural m , e a saída é uma aproximação de ponto flutuante de e x a m bits de precisão relativa. Dualmente, o logaritmo toma como entrada um número de ponto flutuante x e m unário , e a saída é uma aproximação de ponto fixo do log x (por exemplo, o ramo principal no caso complexo) a m bits de precisão absoluta.xmexmxmlogxm
Enquanto mantemos limites de tempo de execução que satisfazem algumas condições de regularidade moderada e ignoramos fatores multiplicativos constantes, temos:
- A complexidade da exponenciação, logaritmo ou qualquer função analítica semelhante é pelo menos a complexidade da multiplicação de números inteiros: por exemplo, podemos ler de exp ( a 2 - t ) = a 2 - t + a 2 2 - 2 t - 1 + O ( a 3 2 - 3 t ) para t suficientemente grande , linear no comprimento de a .a2exp(a2−t)=a2−t+a22−2t−1+O(a32−3t)ta
- Exponenciação e logaritmo têm a mesma complexidade. A razão é que podemos calcular o inverso de uma função agradável pela iteração de Newton (ou métodos mais sofisticados, como no Brent ), usando a avaliação da própria função. A iteração normalmente envolve multiplicações ou divisões, mas podemos pagá-las pelo ponto anterior.
Quanto aos números algébricos , eles podem ser representados por seu polinômio mínimo f (escrito como uma sequência de coeficientes inteiros em binário) junto com alguns meios para distinguir entre as raízes do mesmo polinômio. Uma maneira natural de fazer isso é exigir um intervalo ou disco de isolamento: um par de números de pontos fixos c , ρ tal que | c - α | < ρ . Precisamos pelo menos exigir que α seja uma raiz única de f com essa propriedade, mas algo mais forte pode ser mais adequado. Mais sobre isso mais tarde.αfc,ρ|c−α|<ραf
Deixe a aproximação do número algébrico ser o seguinte problema: dado um número algébrico na representação acima, e m em unário, calcule uma aproximação (complexa) de ponto fixo de α a m bits de precisão absoluta.αmαm
A pergunta original solicitou , mas deixe-me ignorá-lo por enquanto e definir a exponenciação algébrica de números como o seguinte problema: dado α e m, como acima, calcule uma aproximação (complexa) de ponto flutuante de e α a m bits relativos precisão.Reeααmeαm
Fato: Até fatores lineares, a complexidade da exponenciação algébrica de números é a mesma que a complexidade da aproximação de números algébricos mais a complexidade da exponenciação complexa.
Esboço de prova: por um lado, podemos primeiro calcular a aproximação de ponto fixo de e exponenciá-la. Observe que m + O ( 1 ) bits de precisão absoluta para α determinam e α a m bits de precisão relativa e vice-versa.αm+O(1)αeαm
Por outro lado, se podemos fazer exponenciação algébrica de números, também podemos fazer exponenciação simples, pois podemos facilmente converter um número de ponto fixo (considerado exato) em sua representação como um número algébrico. Pelos comentários acima, isso significa que também podemos calcular logaritmos no mesmo tempo. Assim, podemos aproximar um número algébrico primeiro aproximando e, em seguida, obtendo um logaritmo. QEDeα
Isso divide a questão em dois problemas não relacionados. O limite superior mais conhecido na exponenciação é
Teorema ( Brent ): Se podemos multiplicar números inteiros de bits no tempo M ( n ) , podemos calcular exponenciação complexa (e logaritmo) no tempo O ( M ( n ) log n ) .nM(n)O(M(n)logn)
O limite inferior mais conhecido é o mencionado acima. O limite superior mais conhecido em M ( n ) é n log nΩ(M(n))M(n) pelo algoritmo de Fürer.nlogn2O(log∗n)
Descobrir o estado da arte para a aproximação de números algébricos (ou seja, encontrar raízes) é um pouco mais difícil, pois ainda é uma área de pesquisa ativa, e as formulações de limites na literatura geralmente não são tão claras quanto se deseja. Vamos significam O ( f ( n ) p o l y L o g ( f ( n ) ) ) .O~(f(n))O(f(n)polylog(f(n)))
Para uma aproximação real da raiz, Pan e Tsigaridas fornecem:
Teorema: real número aproximação algébrica pode ser feito em tempo , onde d = ° ( f ) , e τ é máximo de bits de comprimentos dos coeficientes de f .O~(d2τ+dm)d=deg(f)τf
No mesmo artigo, eles mencionam como o limite mais conhecido para a aproximação de raízes complexas . Em um artigo um pouco mais recente ( http://arxiv.org/abs/1404.4775 ), eles parecem reivindicar os mesmos limites para o caso complexo e para o caso real, supondo que o disco de isolamento fornecido tenha uma taxa de isolamento (o distância do centro do disco à outra raiz mais próxima de f dividida pelo raio do disco) pelo menos 1 + 1 / log d , aproximadamente, mas está escrito de uma maneira bastante confusa e posso interpretá-lo mal.O~(d3+d2m)f1+1/logd
Agora, a complicação final. Eu defini o problema como aproximação de , enquanto a pergunta pede Re e α . Isto, na verdade, faz com que o problema mais difícil: se Re e α « Im e α , em seguida, uma aproximação x + i y de e α para m bits de precisão relativa tem erro y 2 - m , o que pode muito bem ser superior a x em si, e em qualquer caso, não é garantido para ser delimitada por x 2 - m .eαReeαReeα≪Imeαx+iyeαmy2−mxx2−m
Para exponenciação de razões exatas, podemos contornar o problema:
Proposição: Dado m unário , onde x , y são racionais binários (ou números exatos de pontos fixos), podemos calcular uma aproximação de ponto flutuante de Re e α para m bits de precisão relativa no mesmo tempo limite exponenciação complexa como definida acima, até fator linear. ( Ou seja, O ( M ( n ) log n ) usando o algoritmo de Brent.)α=x+iymx,yReeαmO(M(n)logn)
Esboço de prova: temos . Podemos aproximar e X , e os números de ponto flutuante são facilmente multiplicado, o problema consiste em aproximar cos y com erro relativo 2 - m . Podemos calcular o número inteiro k mais próximo de 2 y / π , onde cos y é ± cos y ' ou ± sin y ′ , onde y ′ = y -Reeα=excosyexcosy2−mk2y/πcosy±cosy′±siny′ satisfaz| y′| ≤π/4. O problema surge quando precisamos calcular opecadoy'ey'é muito pequeno, pois, para termospecadoy'ambits de precisão relativa, precisamos dem+log| y′-1| bits de precisão absoluta. Suponha quey=u/v, ondeu,vsão números inteiros dados como entrada. Sey′y′=y−kπ2|y′|≤π/4siny′y′siny′mm+log|y′−1|y=u/vu,vy′é pequeno, temos uma boa aproximação racional de :
| π - 2 uπ
Agora,πé conhecido por ter uma medida irrationality finitoν(a corrente é ligada7.6063porSalikhov). Isso implica
| y′| ≥1
∣∣∣π−2ukv∣∣∣≤2|y′|k.
πν7.6063
que fornece um limite superior linear no
log| y′-1| em termos do comprimento da entrada. Podemos assim calcular
y'com a precisão desejada; avaliar
siny'não é então um problema (se
y'é suficientemente pequena, podemos apenas ter
pecadoy'≈y'). QED
|y′|≥12kν−1vν,
log|y′−1|y′siny′y′siny′≈y′
Não sei se o mesmo vale para algébrica . No argumento acima, pode-se obter um limite no log | y ′ | do teorema de Baker , no entanto, nenhuma de suas versões que eu vi é boa o suficiente para tornar linear a precisão necessária no tamanho da entrada: em particular, os limites envolvem um polinômio (bastante desagradável) em deg ( f ) . Isso torna o algoritmo resultante polinomial no tamanho da entrada, mas com um expoente ridículo.αlog|y′|deg(f)