Calcolo del numero di bit di una grande potenza di numero intero


10

Dati due numeri interi e n nella rappresentazione binaria, qual è la complessità del calcolo della dimensione in bit di x n ?xnxn

Un modo per farlo è calcolare calcolando un'approssimazione del log 2 ( x ) con sufficiente precisione. Sembra che il log di calcolo 2 ( x ) con k bit di precisione possa essere eseguito in O ( M ( k ) log k ) dove M (1+log2(xn)=1+nlog2(x)log2(x)log2(x)kO(M(k)logk) è il tempo necessario per calcolare il prodotto di due numeri interi di lunghezza k . Questo produce un algoritmo (non particolarmente semplice) di complessità approssimativamente di O ( s log 2 s ) se s è legato alla dimensione in bit di x e n (se non ho fatto errori).M(k)kO(slog2s)sxn

Possiamo battere dove s ha le dimensioni di x e n (nel caso in cui abbiano dimensioni comparabili)? Esiste un semplice algoritmo per ottenere questa complessità o meglio?O(Slog2(S))SXn

Nota: sono interessato alla complessità di un modello teorico come le macchine di Turing.


suggerire di migrare / "promuovere" questo in
Teorical

@vzn: Non credo sia utile ...
Bruno,

perchè no? questa domanda mi ricorda gli attacchi algoritmici alle congetture di Dyson, ad esempio come riportato da RJLipton in 1 , 2
vzn,

Semplicemente perché ho trovato una risposta alla mia domanda, quindi non ho bisogno di chiedermelo altrove.
Bruno,

Risposte:


1

[modifica] Come suggerito, modifico la mia risposta per fornire maggiori dettagli.

La risposta alla mia seconda domanda è no :

Proposizione. Il calcolo ( x ) fino alla precisione k è difficile almeno quanto il calcolo della dimensione in bit di x 2 k .log(X)Kx2k

Prova. Let denota la dimensione in bit di un numero intero y . Si noti innanzitutto che per un numero intero non negativo y , la dimensione in bit di y è 1 + log y .|y|yyy1+logy

Pertanto, . Ora 2 k log ( x ) è log ( x ) spostato k posizioni a sinistra. Quindi si può calcolare il log ( x ) con precisione k semplicemente sottraendo 1 alla dimensione in bit di x 2 k e spostando il risultato k posizioni verso destra.|x2k|=1+2klogx2klog(x)log(x)klog(x)k1x2kK


1
Perché il numero di bit in consente di calcolare il registro da x a k bit di precisione? La tua riduzione funziona davvero? E se il caso speciale in cui n = 2 k fosse molto più facile / più difficile di tutti gli altri possibili valori di n (non-pot-di-due)? Hai un modo per escludere questa possibilità? x2klogxkn=2kn
DW

@DW: torno a questa domanda, dopo il commento di vzn. La mia prova è la seguente: il numero di bit di un numero intero è 1 + log y . Pertanto, il numero di bit in x 2 k è 1 + 2 k log x . Inoltre, 2 k log x è uguale al log x ma sposta le posizioni k a sinistra. Pertanto, 2 k log x ti dà (almeno) i k primi bit diy1+logyx2k1+2klogx2klogxlogxk2klogxk . Pertanto, se è possibile calcolare il numero di bit di x 2 k , sottraendo 1 al risultato, si ottengono i primi k bit del log x . Ha senso ciò? logxx2k1klogx
Bruno,

Sì, questo ha più senso per me! Soprattutto perché stai solo cercando di mostrare la durezza. Posso incoraggiarti ad aggiornare la tua risposta con questa spiegazione più dettagliata? Grazie per essere tornato a questo e documentare la risposta alla tua domanda.
DW
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.