Dado um número algébrico , estou interessado em encontrar uma aproximação de até uma determinada precisão, em que se refere à parte real do número complexo.
Formalmente, quero calcular um número racional tal que
é dado por um polinômio mínimo (padrão).
Quão rápido podemos resolver esse problema?
Quando é dado como ponto flutuante, a seguinte referência
R. Brent. Avaliação rápida e múltipla de precisão de funções elementares. JACM, 1976.
parece dar uma resposta.
No entanto, não tenho certeza de que ele possa ser usado para o número algébrico .
Respostas:
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) m n α x−α n=0 2O(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 ×
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.x m ex m x m logx m
Enquanto mantemos limites de tempo de execução que satisfazem algumas condições de regularidade moderada e ignoramos fatores multiplicativos constantes, temos:
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.α f c,ρ |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
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 é
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:
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) f 1+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+iy eα m y2−m x x2−m
Para exponenciação de razões exatas, podemos contornar o problema:
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α=excosy ex cosy 2−m k 2y/π 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′|≤π/4 siny′ y′ siny′ m m+log|y′−1| y=u/v u,v y′ é 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
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)
fonte