Cálculo Demorado
Bom dia a todos.
Eu estou aprendendo PHP e para aplicar os meus conhecimentos eu resolvi reproduzir em PHP um código que eu desenvolvi em C/C++.
A função do programa é similar ao cruzamento das ervilhas que todos nós aprendemos em biologia, você cruza X ervilhas verdes com Y ervilhas amarelas e o resultado são algumas ervilhas filhas verdes, outras amarelas, e outras meio termo (não vou entrar em detalhes).
O meu programa gera duas populações (representadas por dois arrays A e B - exemplificadas no código abaixo) de tamanho máximo de 500k unidades, e cada unidade tem as suas características.
O programa pega cada elemento do array A e cruza com um elemento aleatório do array B.
Logo após, o programa pega cada elemento do array B e cruza com um elemento aleatório do array A.
Posteriormente eu analiso os dois resultados obtidos, conseguindo assim o meu resultado final.
O problema ocorre justamente durante o cruzamento entre os arrays A e B.
Este cálculo demora cerca de 1 segundo para ser concluído no meu programa. Mas quando eu o escrevi em PHP, apesar do resultado final estar correto, ele levou cerca de meia hora !
Eu não entendi o porque desta demora. Estou usando o programa WampServer para simular um servidor.
Vou postar apenas as partes "relevantes" do código, estou deixando todas as estruturas (if-else, foreach etc) e todas as funções do PHP que eu utilizo (count, floor, mt_rand etc). As demais linhas (que não estão no código abaixo) fazem uso apenas as operações básicas (soma, subitração, multiplicação e divisão).
Sinceramente eu não tenho a menor idéia do que pode estar causando esta demora.
Se alguém puder contribuir com qualquer sugestão, por mais simples ou besta que seja, eu agradeço.
Obrigado a todos.
<?php
class QualquerCoisa
{
private function Calcula($matriz_grupoA, $matriz_grupoB)
{
/*
Estrutura das variáveis $matriz_grupoA e $matriz_grupoB.
Cada um dos arrays pode ter até 500k posições contendo esta estrutura.
$matriz_grupoX[] = array(
'caracteristica1' => "isso",
'caracteristica2' => "aquilo",
'caracteristica3' => 0,
'caracteristica4' => 0,
'caracteristica5' => 0,
);
*/
if((count($matriz_grupoA) <= 0) || (count($matriz_grupoB) <= 0))
{
return;
}
foreach($matriz_grupoA as $unidade_selecionada)
{
$numero_de_unidades = (count($matriz_grupoB) - 1);
$Unidade_Aleatoria = mt_rand(0, $numero_de_unidades);
if($A < $UnidadeB['caracteristica3'])
{
$C = floor(100 * $A / $B);
}
else
{
// Trolóló
}
if(($UnidadeB['caracteristica3'] <= 0) || ($A > 0))
{
if($A <= 0)
{
// Trolóló
}
}
else
{
// Trolóló
}
if($A > 0)
{
if($UnidadeB['caracteristica4'] <= 0)
{
// Trolóló
}
}
if($UnidadeB['caracteristica4'] <= ($D * $E))
{
$F = mt_rand(0, 99);
if($F >= $G)
{
// Trolóló
}
}
}
return $resultado;
}
}
?>Discussão (2)
Carregando comentários...