par
sadeq » 26 nov. 2008, 18:25
Mais attention à problème de charge de calcul, pour 2 termes tu auras normalement 2^2 =4 cas possibles de somme. Pour 4 termes tu en auras 4^4=256 et pour 12 termes tu auras l'horrible nombre de 8916100448256 cas possibles, c'est à dire 12^12.
Quoi qu'il en soit, selon la complexité d'un algorithme, on peut décider de donner la main à PHP pour qu'il génère lui même le programme dont on connait le spécimen redondant.
Cette méthode s'appuie sur le principe d'auto génération de script. Il faut écrire donc un programme qui auto génère un autre programme dont la séquence est connu d'avance mais qui contient des parties redondantes.
Si tu remarque dans ton script, les "foreach" se multiplient selon le nombre de termes à sommer, ainsi que l'opération de somme etc... Donc ton script peut être treaité facilement par la méthode d'auto génération. En résultat, on obtiendra le "VRAI" programme qui va faire la somme.
Voici une première idée sur ce genre de script :
auto_gen_script_somme.php
<pre>
<?php
// données sources
$termes = array(1,2,3,4);
// création des parties variables du script
$valeurs = implode(",", $termes);
$code_foreach = ""; $code_tirage_termes = ""; $code_tirage_somme = "";
for($i=0; $i<count($termes); $i++){
$code_foreach .= "foreach(\$termes as \$t$i)\n\r";
$code_tirage_termes .= "\$t$i,";
$code_tirage_somme .= "+ \$t$i ";
}
// script global à partir d'un modèle type
$modele = "<?php
\$termes = array($valeurs);
\$i=0;
$code_foreach {
\$tirage[\$i]['termes'] = array($code_tirage_termes);
\$tirage[\$i]['somme'] = 0 $code_tirage_somme;
\$i++;
}
print_r(\$tirage);
?>";
// Ecrire le script dans un fichier PHP
file_put_contents("somme.test.php", $modele);
// Exécuter le script PHP généré
include("somme.test.php");
?>
</pre>
Ce programme génère un autre programme nommé "somme.test.php" qui nous intéresse et qui, lui, calcule les sommes des différents tirages de termes.
Mais attention à problème de charge de calcul, pour 2 termes tu auras normalement 2^2 =4 cas possibles de somme. Pour 4 termes tu en auras 4^4=256 et pour 12 termes tu auras l'horrible nombre de 8916100448256 cas possibles, c'est à dire 12^12.
Quoi qu'il en soit, selon la complexité d'un algorithme, on peut décider de donner la main à PHP pour qu'il génère lui même le programme dont on connait le spécimen redondant.
Cette méthode s'appuie sur le principe d'auto génération de script. Il faut écrire donc un programme qui auto génère un autre programme dont la séquence est connu d'avance mais qui contient des parties redondantes.
Si tu remarque dans ton script, les "foreach" se multiplient selon le nombre de termes à sommer, ainsi que l'opération de somme etc... Donc ton script peut être treaité facilement par la méthode d'auto génération. En résultat, on obtiendra le "VRAI" programme qui va faire la somme.
Voici une première idée sur ce genre de script :
[b]auto_gen_script_somme.php[/b]
[php]
<pre>
<?php
// données sources
$termes = array(1,2,3,4);
// création des parties variables du script
$valeurs = implode(",", $termes);
$code_foreach = ""; $code_tirage_termes = ""; $code_tirage_somme = "";
for($i=0; $i<count($termes); $i++){
$code_foreach .= "foreach(\$termes as \$t$i)\n\r";
$code_tirage_termes .= "\$t$i,";
$code_tirage_somme .= "+ \$t$i ";
}
// script global à partir d'un modèle type
$modele = "<?php
\$termes = array($valeurs);
\$i=0;
$code_foreach {
\$tirage[\$i]['termes'] = array($code_tirage_termes);
\$tirage[\$i]['somme'] = 0 $code_tirage_somme;
\$i++;
}
print_r(\$tirage);
?>";
// Ecrire le script dans un fichier PHP
file_put_contents("somme.test.php", $modele);
// Exécuter le script PHP généré
include("somme.test.php");
?>
</pre>
[/php]
Ce programme génère un autre programme nommé "somme.test.php" qui nous intéresse et qui, lui, calcule les sommes des différents tirages de termes.