Quanto possiamo avvicinarci alla moltiplicazione, aggiunta e confronto lineari (su numeri interi)?


21

Accennando all'articolo di KW Regan "Connect the Stars" , alla fine menziona che è ancora un problema aperto trovare una rappresentazione di numeri interi in modo tale che le operazioni di addizione, moltiplicazione e confronto siano calcolabili in tempo lineare:

Esiste una rappresentazione di numeri interi in modo tale che addizione, moltiplicazione e confronto siano fattibili in un tempo lineare? Fondamentalmente, c'è un tempo lineare squillo discretamente ordinato?

(1) Quanto possiamo avvicinarci alla moltiplicazione e all'aggiunta del tempo lineare, senza confronti? Qui presumo che le dimensioni del problema possano variare, quindi potremmo aver bisogno di una struttura / algoritmo di dati che consenta di modificare le dimensioni di numeri interi.

(2) Per il problema completo, possiamo supporre che troveremo uno schema ottimale per moltiplicare, aggiungere e confrontare gli interi. Quanto possiamo avvicinarci al più lento di queste tre operazioni (nel peggiore dei casi) al tempo lineare? E su quella nota, quanto sarebbero veloci le altre operazioni?

DICHIARAZIONE FORMALE DEL PROBLEMA

Come menziona Emil Jeřábek, vorremmo escludere casi banali e concentrarci sul comportamento peggiore per questa domanda.

Quindi chiediamo, per non negativo interi e y dove 0 x < n e 0 y < n , possiamo trovare una struttura dati / algoritmo in grado di eseguire addizioni, moltiplicazioni, e si confronta con \ tra x e y nello spazio O ( n log ( n ) ) e nello spazio O ( log 2 ( n ) ) ?xy0x<n0y<nxyO(nlog(n))O(log2(n))


1
Parlerò che è possibile creare uno schema che esegue queste operazioni nel tempo su numeri interi non negativi, dove n è la dimensione in bit dell'intero più grande (supponendo che conosciamo n in anticipo). Mi chiedo se possiamo fare di meglio e farlo in tempo proporzionale all'intero o agli interi correnti da calcolare. Θ(n)nn
Matt Groff,

5
@TysonWilliams: Sì! Binario!
Jeffε

2
Invece di ottenere un tempo lineare per tutte queste operazioni, esiste una rappresentazione di numeri interi in modo che tutte queste operazioni abbiano il tempo ? O(nlogn)
Emil Jeřábek sostiene Monica il

4
In realtà, c'è una banale risposta positiva: rappresentano numeri interi in binario con bit di riempimento. L'istruzione non dovrebbe includere una condizione per l'effetto che la rappresentazione dovrebbe avere una lunghezza lineare nella lunghezza della rappresentazione binaria? n2
Emil Jeřábek sostiene Monica il

5
@ EmilJeřábek: suppongo che desideri che la rappresentazione di qualsiasi numero intero utilizzi i bit f ( n ) , per alcune funzioni f ( n ) = Θ ( log n ) . nf(n)f(n)=Θ(logn)
Jeffε

Risposte:


14

n

pn#=exp((1+o(1))nlogn).
NnN<exp((1+o(1))nlogn)N<pn#nnlognαlog(N)nnlog(n)O(nloglog(N))O(nloglog(N)loglogloglog(N)logloglog(N))nlognαlogNnO(logN/loglogN)O(logN)O(logNlogloglogNloglogloglogN)


1
@vzn: Sì, stavo per menzionarlo per i confronti, ma poi mi è venuto in mente che potrebbe esserci un'operazione di confronto più veloce tramite una rappresentazione radix mista.
Joe Fitzsimons,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.