2009-09-27 12 views

risposta

12

L'algoritmo Euclideo (calcola gcd) è molto veloce. Quando due numeri vengono disegnati in modo uniforme a caso da [1, n], il numero medio di passaggi per calcolare il loro gcd è O(log n). Il tempo medio di calcolo richiesto per ogni passaggio è quadratico nel numero di cifre.

Esistono alternative che offrono prestazioni migliori (ad esempio, ogni passaggio è subquadratico nel numero di cifre), ma sono efficaci solo su numeri interi molto grandi. Vedi, ad esempio, On Schönhage's algorithm and subquadratic integer gcd computation.

+0

Mi piacerebbe commentare che è un po 'grossolano misurare la complessità degli algoritmi aritmetici senza tenere conto dei costi delle operazioni aritmetiche. –

+0

Il numero peggiore di passaggi è O (log n) anche quando due numeri sono voci successive nella sequenza di Fibonacci. –

+0

@Pavel Shved: ho preso in considerazione il costo. cf. la frase "Il tempo medio di calcolo richiesto per ogni passaggio è quadratico nel numero di cifre." – jason

7

se si esegue su una macchina per cui la divisione/resto è significativamente più costosa rispetto ai turni, prendere in considerazione binary GCD.

+0

Grazie, interessante lettura –

+0

sì, un ottimo articolo lì. – Lazer

+0

L'ho appena implementato in f # e più di due volte più veloce del tradizionale GCD di Euclid, non è possibile fornire numeri esatti in quanto vi sono altri codici che inquinano le mie misurazioni, tuttavia è> 2x più veloce. Buona scoperta, Jason. Aggiornamento – gatapia

Problemi correlati