Quão perto podemos chegar da multiplicação linear, adição e comparação (em números inteiros)?


21

De acordo com o artigo "Connect the Stars" , de KW Regan , ele menciona no final que ainda é um problema em aberto encontrar uma representação de números inteiros, de modo que as operações de adição, multiplicação e comparação sejam computáveis ​​em tempo linear:

Existe uma representação de números inteiros para que adição, multiplicação e comparação sejam factíveis em tempo linear? Basicamente, existe um anel de tempo linear discretamente ordenado?

(1) Quão perto podemos chegar da multiplicação e adição linear de tempo, sem comparação? Aqui, presumo que os tamanhos dos problemas possam variar, para que possamos precisar de uma estrutura / algoritmo de dados que permita alterar tamanhos inteiros.

(2) Para o problema completo, podemos assumir que encontraremos um esquema ideal para multiplicar, adicionar e comparar os números inteiros. A que distância podemos chegar a mais lenta dessas três operações (no pior caso) em relação ao tempo linear? E nessa nota, com que rapidez seriam as outras operações?

DECLARAÇÃO FORMAL DE PROBLEMAS

Como menciona Emil Jeřábek, gostaríamos de descartar casos triviais e nos concentrar no pior caso possível para essa pergunta.

Por isso, pedimos, por inteiros não negativos e onde e , podemos encontrar uma estrutura de dados / algoritmo que pode realizar adição, multiplicação, e compara com \ entre e no tempo e ?xy0x<n0y<nxyO(nlog(n))O(log2(n))


11
Mencionarei que é possível criar um esquema que execute essas operações no tempo em números inteiros não negativos, em que n é o tamanho do bit do maior número inteiro (supondo que sabemos n antecipadamente). Gostaria de saber se podemos fazer melhor, e fazemos isso em tempo proporcional ao número inteiro atual que está sendo calculado. Θ(n)nn
precisa

5
@TysonWilliams: Sim! Binário!
Jeffε

2
Em vez de obter tempo linear para todas essas operações, existe uma representação de números inteiros para que todas essas operações tenham tempo ? O(nlogn)
Emil Jeřábek apoia Monica

4
Na verdade, há uma resposta positiva trivial: represente números inteiros em binário com bits de preenchimento. A declaração não deve incluir alguma condição para o efeito de que a representação deve ter comprimento linear no comprimento da representação binária? n2
Emil Jeřábek apoia Monica

5
@ EmilJeřábek: Suponho que ele queira que a representação de qualquer número inteiro use f ( n ) bits, para alguma função f ( n ) = Θ ( log n ) . nf(n)f(n)=Θ(registron)
Jeffε

Respostas:


14

Provavelmente não é a melhor resposta, mas talvez este seja um ponto de partida útil. Se desejarmos representar um número inteiro não negativo, podemos armazená-lo como um conjunto de números primos seqüenciais do módulo de resíduos a partir de 2. Nesta forma de comparação, a comparação é potencialmente difícil, mas a multiplicação e adição podem ser feitas rapidamente. O produto dos primeiros primos é aproximado por p n # = exp ( ( 1 + o ( 1 ) ) n log n ) . Portanto, para representar um número inteiro N, é necessário que os resíduos sejam os primeiros n primos, em quen

pn#=exp((1 1+o(1 1))nregistron).
Nn . Como podemos representar qualquer N < p n # usando o módulo de resíduos, os primeiros n resíduos primos, podemos tomar n log n log ( N ) . A adição e multiplicação podem ser feitas diretamente entre pares de resíduos. Existem n pares desse tipo, com o número máximo de primos em torno de n log ( n ) . Assim, a adição deve estar emN<exp((1 1+o(1 1))nregistron)N<pn#nnregistronregistro(N)nnregistro(n) , enquanto multiplicação através Schonhage-Strassen deve ser em O ( N log log ( N ) de registo log registo log ( N ) de registo de registo log ( N ) ) . Como n log n log N , então uma aproximação aproximada fornece n em O ( log N / log log N )O(nregistroregistro(N))O(nregistroregistro(N)registroregistroregistroregistro(N)registroregistroregistro(N))nregistronregistroNnO(registroN/registroregistroN). Isto daria a complexidade de adição e multiplicação como aproximadamente e S ( log N log registo log N registo log registo log N ) .O(registroN)O(registroNregistroregistroregistroNregistroregistroregistroregistroN)


11
@vzn: Sim, eu mencionaria isso para comparações, mas ocorreu-me que poderia haver uma operação de comparação mais rápida por meio de uma representação de mistura mista.
9118 Joe Fitzsimons
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.