2010-12-28 10 views
8

qui è il problema daCome trovare il minimo numero di operazioni per calcolare x^n

ACM Internazionale Collegiata Programming Contest Asia regionale Contest , Yokohama, 2006-11-05

iniziano per x e ripetutamente moltiplicando per x, possiamo calcolare x^31 con una trentina di moltiplicazioni:

x^2 = x * x, x^3 = x^2 * x, x^6 = x^3 * x^3, x^7 = x^6 *x, x^14 = x^7 * x^7 , 
x^15 = x^14 * x, x^30 = x^15 * x^15 , x^31 = x^30 * x 

scrivere un programma per trovare il minor numero di operazioni per calcolare x^n per moltiplicazione e divisione iniziando con x per il dato intero positivo n e n<=200

per n = 31 meno #Operations è 6
per n = 50 l'operazione minima è 7

Tutte le idee sono benvenute.

+1

Suggerimento: http://en.wikipedia.org/wiki/Exponentiation_by_squaring –

+4

@Martinho Fernandes - l'esponenziazione mediante squadratura non utilizza il numero minimo di operazioni. – IVlad

risposta

11

vedere questo: http://en.wikipedia.org/wiki/Addition-chain_exponentiation

Non v'è alcun algoritmo efficiente che ti porterà il numero minimo di passi, e la programmazione dinamica non funziona.

Immagino che n sia abbastanza piccolo da consentire il passaggio di una soluzione di forza bruta, anche se potrebbe essere necessario ottimizzare. Sai come forzarlo?

+2

+1 Oooh, lucido! Credo di avere la mia "nuova cosa appreso" per il giorno. Peccato che sia NP-completo però :( –

+2

Sì, penso che molte persone impareranno qualcosa di interessante oggi :) +1 anche –

+0

dal momento che è NP completo, e il dominio di n è ragionevolmente piccolo, compila una tabella e fa solo ricerche .. – lijie

Problemi correlati