JeuWeb - Crée ton jeu par navigateur
récupération de la cle du minimum d un tableau - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : récupération de la cle du minimum d un tableau (/showthread.php?tid=5028)

Pages : 1 2 3 4


RE: récupération de la cle du minimum d un tableau - srm - 31-07-2010

Code PHP :
<?php 
val map
= Map ("toto" -> 30, "tutu" -> 26, "zzz" -> 14, "aaaa" -> 56, "lolita" -> 3)

val start = System.currentTimeMillis()

for (
i <- 0 to 1000000) {
map.reduceLeft {(a,b) => if (a._2 > b._2) b else a }._1
}

val end = System.currentTimeMillis()

println((end - start) + " ms")

913ms
Que lolita -> 3 soit au début ou à la fin du tableau.

Sur un tableau 3 fois plus grand exactement le résultat est de 3039ms quand lolita est au début et de 3060 quand elle est à la fin.

Le second exemple que j'ai donné :
Code PHP :
<?php 
map
.find { _._2 == map.values.min }.get._1
est un peu plus de 6 fois plus long.


RE: récupération de la cle du minimum d un tableau - srm - 31-07-2010

Pour répondre au sujet de PHP il n'a pas du tout vocation à tendre vers un langage fonctionnel, le contraire du Scala qui lui tend vers le fonctionnel Smile

D'ailleurs ça se voit dans l'exemple donné plus haut Wink

Quant à la lisibilité du Scala et bien ce qui le rend difficile à lire au début c'est déjà surtout son approche plutôt fonctionnelle et qu'il a beaucoup de pirouette d'écriture qui peuvent sembler des artifices mais quand tu creuses et lit des livres tu te rends compte qu'elles n'ont rien d'un hasard et ça donne beaucoup de flexibilité et de souplesse. Bien entendu quand on connait pas le Scala ça n'est pas facile à lire Wink

Je n'ai découvert qu'une infime partie du Scala et je trouve déjà les autres langages bien rigides Smile


RE: récupération de la cle du minimum d un tableau - niahoo - 31-07-2010

Citation :Je proposais de faire ça plutôt :

Code PHP :
<?php 
for( $i = 0; $i++ < ITERATIONS;) {
$vv = 10000000;
$k = 'rien trouvé';
foreach(
$a as $c => &$v )
Ici, tu calcules vraiment "ITERATIONS" fois le "min". Notamment, tu vas faire au moins "ITERATIONS" fois l'affectation du "min", tandis que dans le cas du dessus, tu ne vas le faire au plus que "n" fois (si ton tableau est de taille "n"). Quand "n<<ITERATIONS", ça peut jouer. Bon, mais c'est un détail.

houla oui tout à fait, j'ai vraiment fait mon test à l'arrache ( enfin bon, c'est difficile aussi de se forcer à faire des trucs pas opti ^^ )
Je n'avais aps compris que tu parlais des initialisations de variables dans ton post précédent.

Pour le test fonctionnel qui est meilleur en second, je pense tout simplement qu'il bénéficie de l'initialisation préalable des variables et du cache du tableau. Après je connais pas assez le fonctionnement interne de PHP pour m'avancer plus là dessus !

mais du coup le système foreach/if se prend une méga branlée :
Code :
temps d'execution avec foreach : 4.0745539665222
indice trouvé: mais_tg
temps d'execution avec les fonctions : 2.2728538513184
indice trouvé: mais_tg

faites le test plusieurs fois

Code PHP :
<?php
header
("Content-type: text/plain; charset=utf-8");
#header("Content-type: text/plain");
$a = array(
'bonjour' => 50,
'salut' => 350,
'hello' => 504,
'gutentag' => 5350,
'hola' => 502,
'hi_baby' => 500,
'yo_man' => 520,
'mais_tg' => 5
);
define( 'ITERATIONS', 1000000);


$t0 = microtime( true );

# ALGO 2
for( $i = 0; $i++ < ITERATIONS;) {
$vv = 10000000;
$k = 'rien trouvé';
foreach(
$a as $c => &$v )
if(
$v < $vv) {
$k = $c;
$vv = $v;
}
}
#

$t1 = microtime( true );
echo
'temps d\'execution avec foreach : ', ( $t1 - $t0), PHP_EOL, 'indice trouvé: ', $k;


echo
PHP_EOL;
$t0 = microtime( true );

# ALGO 1
for( $i = 0; $i++ < ITERATIONS;)
$k = array_search( min($a), $a, true);
#

$t1 = microtime( true );
echo
'temps d\'execution avec les fonctions : ', ( $t1 - $t0), PHP_EOL, 'indice trouvé: ', $k;