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) |
RE: récupération de la cle du minimum d un tableau - Ter Rowan - 30-07-2010 bien sûr qu'on pourrait le faire aisément avec une boucle for cependant le coût serait bien plus important (au delà du nombre de caractères à saisir ^^) si une fonction de base (ici 2) existe dans le core de php, elle sera forcément plus performante que l'équivalent développée au sein du script lui même RE: récupération de la cle du minimum d un tableau - Foxglove - 31-07-2010 (30-07-2010, 11:50 PM)Ter Rowan a écrit : si une fonction de base (ici 2) existe dans le core de php, elle sera forcément plus performante que l'équivalent développée au sein du script lui même Je suis d'accord sur le principe, mais quand il faut combiner plusieurs fonctions de la bibliothèque (comme ici les deux dont tu parles), ça se discute. Faire un "tableau.get(tableau.min( ))" peut nécessiter deux parcours du tableau. A force de combiner trop de fonctions de la bibliothèque, on peut perdre les avantages de la rapidité. Pour les solutions qui sont plutôt fonctionnelles, il doit y avoir une autre justification je suppose. Je me demandais s'il y avait quelque chose derrière ça de plus "philosophique". Par exemple, est-ce que PHP (ou la coutume actuelle de programmation en PHP) dérive vers du fonctionnel plutôt que vers de l'impératif ? Il y a tout un tas de manières de faire ce qui était demandé. On ne va pas les évoquer toutes, je comprends, mais néanmoins je suis surprise. Quand je bloque sur quelque chose que je ne trouve pas, mon réflexe est de repartir avec les opérations de base (et dans ce cas le "for"). Probablement qu'un meilleur réflexe est d'aller consulter la doc de l'API ? RE: récupération de la cle du minimum d un tableau - niahoo - 31-07-2010 Citation :Je trouve surprenant que PHP n'ait aucune fonction pour trouver l'index d'un élément dans un tableau Elle existe, je l'ai donnée en page 1: C'est la fonction array_search Code PHP :
Comme tu le devines : "renvoie l'index du tableau $tab dont la valeur est égale à la valeur minimum du tableau $tab. Pour au dessus : en fait, cette combinaison de fonction exécute 2 for : 1 pour trouver la valeur minimum, un pour trouver la clé dont la valeur est égale à cette première valeur. Seulement ces boucles sont effectuées par l'intépréteur, et pas dictées dans le script. ça revient exactement au même au final, en plus ou moins rapide selon la méthode. edit: arf on poste en même temps !! je vais faire un benchmark !! RE: récupération de la cle du minimum d un tableau - Ter Rowan - 31-07-2010 (31-07-2010, 12:03 AM)Foxglove a écrit : Probablement qu'un meilleur réflexe est d'aller consulter la doc de l'API ? bah pas loin pour ma part j'ai un bouquin php avec l'ensemble des fonctions existantes (lorsqu'il est paru ^^), qui correspond à la doc php web si je ne trouve rien je poste ici la question et j'attends qu'un (ou plusieurs) gourou(s) me réponde(nt) si je trouve quelque chose , je l'essaie, si la solution me frustre (elle marche mais elle est moche) ou que quelque chose cloche (identifié ou non, des fois c'est à l'instinct que j'ai l'impression que quelque chose ne va pas) , je pose le problème et ma solution ici, et j'attends qu'un (ou plusieurs) gourou(s) me réponde(nt) si la solution me parait esthétique et sans "piège"je passe à la suite RE: récupération de la cle du minimum d un tableau - srm - 31-07-2010 Dans l'exemple donné, oui _1 = clée et _2 = valeur RE: récupération de la cle du minimum d un tableau - niahoo - 31-07-2010 benchmark fait ( windows vista - php 5.3.3 - laptop moisi ) Le constat est vite vu ^^ ceci dit y a surement moyen d'optimiser l'arlgorithme de foreach que j'utilise Code PHP :
RE: récupération de la cle du minimum d un tableau - Foxglove - 31-07-2010 Quels étaient les temps d'exécution ? Deux petites remarques annexes : - Ton tableau est très particulier, le "min" correspond au premier indice. - Les affectations de $vv et de $k devraient être à l'intérieur de la boucle "for" pour être fair-play (elles sont actuellement à l'extérieur de la boucle "for"). Ca va ralentir un peu plus l'algo 2, mais il faut être équitable. Merci de l'exemple RE: récupération de la cle du minimum d un tableau - Sephi-Chan - 31-07-2010 Merci Oxman pour la confirmation. Par contre c'est pas très lisible comme notation. Il y a une alternative ? Et ça donne quoi, Niahoo ? Désolé de demander mais je ne peux pas tester depuis mon téléphone. Le bench serait plus juste en lançant chaque algo séparément, avec un temps de libération des ressources de la machine, mais ton test permettra d'y voir plus clair quand même en dégageant une tendance. Il faudrait également voir comment ça réagit avec de très gros tableaux. Sephi-Chan RE: récupération de la cle du minimum d un tableau - niahoo - 31-07-2010 ça donne ça avec le plus petit indice à la fin du tableau : Citation :temps d'execution avec les fonctions : 2.4662268161774 le plus petit indice en tête de tableau me donnait le même ordre de différences, un poil plus rapides Citation :Les affectations de $vv et de $k devraient être à l'intérieur de la boucle "for" pour être fair-play elles le sont ( oui je suis relou je met pas mes accolades, mais l'indentation te permet de voir qu'elles y sont ) si je fais l'algo avec fonctions en second, il est encore plus performant : Citation :temps d'execution avec foreach : 3.6598651409149 Les temps que je donne sont ceux qui ressortent le plus souvent en moyenne, sur 10 tests. EDIT : mais en fait ça veut pas dire grand chose, c'est pour ça que je préfère donner le script, entre deux machines, deux versions de PHP, etc... ça peut changer assez. J'ai même eu des résultats de benchmarks différents de ceux donnés quelque part en augmentant de beaucoup le nombre d'itérations par exemple. RE: récupération de la cle du minimum d un tableau - Foxglove - 31-07-2010 (31-07-2010, 01:21 AM)niahoo a écrit :En faisant ça, tu calcules une fois le "min" en parcourant "ITERATIONS" fois ton tableau. Je proposais de faire ça plutôt : Code : for( $i = 0; $i++ < ITERATIONS;) { (31-07-2010, 01:21 AM)niahoo a écrit : si je fais l'algo avec fonctions en second, il est encore plus performant : Ca, c'est inquiétant. Ca tendrait à indiquer que le test n'est pas stable. Tu as une explication ? |