On Thu, 12 Jun 2003 12:07:23 -0700, Cedric Beust <[EMAIL PROTECTED]> wrote:

Nicolas Delsaux wrote:

Je pense que c'est la bonne direction mais l'idee doit etre encore amelioree. Le fait qu'un algorithme fait deux choses:

- Decide s'il est approprie
- Implemente l'algorithme

est une infraction au principle de responsabilite ("one class, one responsibility").

En th�orie, oui. En r�alit�, pas tout � fait.

Je pense que la decision du meilleur algorithme doit etre effectuee en dehors des algorithmes (la classe que tu as appelee AlgorithmDeterminer, mais je recommande un nom different :-)). Cela dit, cette classe peut tout a fait consulter certaines methodes ou valeurs sur tous les algorithmes qu'elle connait avant de prendre sa decision.


Prenons l'exemple des collections. Il y en a des dizaines et elles ont toutes des caracteristiques differentes. Chaque collection devrait avoir une certaine implementation et aussi un ensemble de valeurs decrivant, par exemple, le cout d'une insertion, le cout d'un effacement, le cout d'un parcours, si elle est balancee, ordonnee, a valeur unique, etc...

Le "CollectionChooser" consultera toutes ces valeurs et retournera une instance de collection qui correspond le mieux aux contraintes fournies.

En fait, ce que tu veux, c'est que chaque algorithme dispose d'une m�thode � m�me de retourner une valeur d'adaptation aux donn�es fournies (une sorte de fitness) et que l'AlgorithmChooser, gr�ce � toutes ces valeurs, retourne l'algorithme optimal en fonction du jeu de donn�es initial.

Je pense pour ma part qu'il vaut mieux que chaque algorithme dispose d'une connaissance d'un meilleur algorithme que lui pour tel sous ensemble des donn�es, et soit capable de passer la main � cet algorithme d�l�gu�. Car on passe alors d'une recherche exhaustive du meilleur algorithme � une recherche localis�e, et donc potentiellement plus rapide, de ce meilleur algorithme. Cependant, il reste un probl�me : ins�rer un nouvel algorithme est beaucoup plus complexe avec une m�thode locale (la mienne) qu'avec une m�thode globale (la tienne).

--
Nicolas Delsaux
"Lorsque la vie devient si dure que l'homme est pr�s de renoncer, il l�ve les yeux sur un bout de rocher �tincellant et l'adore uniquement pour retrouver l'espoir plut�t que de se pencher sur ses propres actions pour conna�tre le salut."




Répondre à