This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function calc($n) { | |
return array_sum(range(1, $n)); | |
} | |
const MAX = 1000000; | |
$start = microtime(TRUE); | |
for($i = 0; $i < MAX; $i++) { | |
$random_number = rand(1, 500); | |
$natural_sum = calc($random_number); | |
} | |
$time_took = microtime(TRUE) - $start; | |
echo "It took $time_took seconds to run.\n"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function calc($n) { | |
return $n * ($n + 1) * (1 / 2); | |
} | |
const MAX = 1000000; | |
$start = microtime(TRUE); | |
for($i = 0; $i < MAX; $i++) { | |
$random_number = rand(1, 500); | |
$natural_sum = calc($random_number); | |
} | |
$time_took = microtime(TRUE) - $start; | |
echo "It took $time_took seconds to run.\n"; |
Analisem os trechos de código e tentem descobrir o que eles fazem. Uma dica: a essência de tudo está na função calc.
Já analisou? Entendeu o que está acontecendo? Bom, estes trechos de código calculam 1 milhão de vezes a soma do intervalo de números entre 1 e um número aleatório entre 1 e 500. Ao mesmo tempo ele toma nota de quanto tempo este processo leva usando a função microtime.
Você conseguiu descobrir o que estava acontecendo antes de eu ter explicado? Se você não conseguiu, não tem problema, eu vou explicar. Comparando os dois trechos de código, qual você diria que apresenta com mais clareza o comportamento que expliquei anteriormente?
O primeiro trecho usa funções cujos nomes dão uma certa ideia sobre o que está acontecendo. "array_sum" retorna a soma dos valores dentro de um array. "range" retorna um array preenchido com números em um intervalo que vai do primeiro parâmetro passado até o segundo parâmetro passado. Então array_sum soma o conteúdo de um array, range retorna um array de números, bingo! Tudo o que o loop faz é somar os números naturais de 1 até um intervalo superior que varia de 1 até 500. Um milhão de vezes!
E o segundo trecho? Não há chamadas de funções nesta versão da função calc. Ela mais parece uma fórmula matemática. E realmente é, é a seguinte fórmula:
E ela simplesmente retorna a soma entre os números naturais de 1 até n.
Certo! O que eu quero demonstrar com tudo isso? Primeiro eu convido vocês a executar os trechos de código em seus computadores e comparar o tempo gasto nos cálculos tanto pelo trecho usando array_sum quanto pelo outro usando a fórmula matemática, no meu computador um core i7 2600 3,40 GHz os tempos em segundos, cada trecho foi executado três vezes, foram os seguintes:
array_sum:
- 42,979010105133
- 42,527684926987
- 43,008407831192
- 9,8508331775665
- 9,889456987381
- 9,9301979541779
Eu acredito que a grande diferença de eficiência de execução se deve principalmente a dois pontos principais. A função range cria um array dinamicamente e isso envolve alocação de memória por parte do interpretador PHP, o que toma tempo. Mas é o segundo ponto que deve realmente impactar na performance, a função array_sum deve percorrer cada elemento do array gerado pela função range e laços de repetição afetam a performance significativamente.
Eu não tenho dúvidas de que o código usando array_sum é mais fácil de se ler, mais elegante e usa todo o poder do dinamismo da linguagem PHP. Mas a eficiência da abordagem matemática é inegável, e alguns até poderiam dizer que ela é tão elegante quanto a outra, sempre podemos adicionar um comentário informando o que a fórmula faz, não é? Acho que preciso voltar a estudar matemática.
I cannot truly enable but admire your weblog, your weblog is so adorable and great.It has given me courage to try scarier things. I tend to steer clear of them but not anymore.
ResponderExcluirPackers And Movers Hyderabad
Packers And Movers Kondapur Hyderabad
You might be always able to relate with us at our QuickBooks Support contact number to extract the very best support services from our highly dedicated and supportive QuickBooks Support executives at any point of time as all of us is oftentimes prepared to work with you. Most of us is responsible and makes sure to deliver hundred percent assistance by working 24*7 to suit your needs. Go ahead and mail us at our quickbooks support email id whenever you are in need. You could reach us via call at our toll-free number.
ResponderExcluirQuickBooks Premier Technical Support Phone Number
QuickBooks Premier Support Phone Number
Intuit Live Chat Support
QuickBooks Upgrade Support Phone Number
Call QuickBooks Support Phone Number
QuickBooks Error Support Phone Number USA
QuickBooks 2019 Support Number
QuickBooks Upgrade Support 2018
QuickBooks Toll Free Tech Support Phone Number
QuickBooks US Support Phone Number
QuickBooks Intuit Tech Support
QuickBooks Support Phone Number
QuickBooks Error Support Phone Number
Contact QuickBooks Support Phone Number
Quick Book Phone Number
QuickBooks Technical Support Phone Number
QuickBooks Phone Support
QuickBooks Technical Support
Quick Mobile Number
Quick Book Number
QuickBooks Technical Support
QuickBooks Phone Number
QuickBooks Tech Support Phone Number
QuickBooks Support
QuickBooks Customer Support Phone Number
QuickBooks Support Number
QuickBooks Customer Support Number
QuickBooks Help Phone Number
QuickBooks Customer Service Phone Number
QuickBooks Error Support Number
Get Packers and Movers Bhopal List of Top Reliable, 100% Affordable, Verified and Secured Service Provider. Get Free ###Packers and Movers Bhopal Price Quotation instantly and Save Cost and Time. ✔✔✔Packers and Movers Bhopal Reviews and Compare Charges for household Shifting, Home/Office Relocation, ***Car Transportation, Pet Relocation, Bike SHifting @ Packers and Movers Bhopal
ResponderExcluir