voglio risolvere un problema da Project Euler (BTW, problema 25), e ho trovato una soluzione in Python:Python vs velocità PHP
fibonacci = 1
old1 = 0
old2 = 1
limit = 1000
i = 1
while len(str(fibonacci)) < limit:
fibonacci = old1 + old2
old1 = old2
old2 = fibonacci
i = i + 1
print(i)
Ci sono voluti 1,5 secondi per calcolare.
ho implementato lo stesso in PHP, questo è il codice:
$fibonacci = 1;
$old1 = 0;
$old2 = 1;
$limit = 1000;
$i = 1;
while (strlen((string)$fibonacci) < $limit){
$fibonacci = $old1 + $old2;
$old1 = $old2;
$old2 = $fibonacci;
$i = $i + 1;
}
print($i);
E ci sono voluti più di 30 minuti, e ancora calcolando ...
So che Python è considerato più veloce di PHP , ma ancora non dovrebbe essere una grande differenza. Come migliorare il mio codice PHP per ottenere risultati più velocemente, se c'è un modo per farlo?
EDIT:
modifico questo post sulla base di commenti qui sotto quindi prima la mia soluzione non avrebbe funzionato. Una soluzione può essere al posto della vecchia, mentre a mettere questo:
while (strlen(number_format($fibonacci, 0, '', '')) < $limit){ ... }
Ma ancora una volta è una questione grande velocità.
Quindi la soluzione finale sta usando BCMath:
$fibonacci = '1';
$old1 = '0';
$old2 = '1';
$limit = 1000;
$i = 1;
while (strlen($fibonacci) < $limit){
$fibonacci = bcadd($old1, $old2);
$old1 = $old2;
$old2 = $fibonacci;
$i = $i + 1;
}
echo $fibonacci . "<br />";
print($i);
Così si può ottenere i risultati alla stessa velocità di Python in PHP.
Sì, hai ragione. Ho già avuto lo stesso :) +1. – Centurion