1

Resalut smile

Voilà je possède une méthode de génération d'un résultat à partir de N valeurs données. Mon but est d'étudier les variations de ce résultat en fonction de l'évolution de ces N nombres.
Comme l'obtention du résultat n'est pas une opération simple et que je voudrais éviter d'avoir à recalculer plusieurs fois la même chose, je voudrais pouvoir stocker chaque résultat obtenu dans une table à N entrées dont la taille augmentera au fur et à mesure. (Par "entrée", j'entends "valeur qui me permet de désigner un (ensemble d') élément(s) stocké(s) dans la table").

Le problème est qu'à priori j'ignore tout des valeurs possibles que peuvent prendre ces entrées (si ce n'est qu'il y en a N et qu'elles sont entières), et que je ne connais pas de méthode efficace pour implémenter cette espèce de "base de données". J'ai bien pensé à des listes composées, des arbres etc, mais j'ai peur que ça soit un peu trop bourrin et pas très rapide d'accès... sad
Il faut que je sois capable de vérifier si un résultat a déjà été enregistré pour un ensemble donné d'entrées, de stocker chaque résultat et bien sûr de le récupérer.

Quelqu'un saurait-il comment implémenter ça efficacement, et quels algos utiliser pour parcourir cette table? Je proggue en C++ avec Qt (pour ceux qui connaissent). smile

Merci à ceux qui prendront la peine de répondre wink
Orwell
avatar
Un ptit gars qui programme en C/asm sur sa casio et qui vient voir de temps en temps comment ça se passe par ici :)
Un peu de verdure dans ce monde obscur

2

Je ne suis pas sûr d'avoir compris le problème, mais tu pourrais génerer une sorte de valeur de hashage avec tous tes N, ce qui diviserait le nombre de "résultats déjà calculés potentiels" par la taille de ta table, selon le nombre de calculs que tu comptes faire ça peut être non négligeable ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

En effet, j'ai d'ailleurs utilisé une technique de ce genre pour une autre partie du prog... mais n'ayant eu aucune notion là-dessus j'ai préféré demander s'il existe des méthodes robustes à mettre en oeuvre qui m'auraient échappé smile
avatar
Un ptit gars qui programme en C/asm sur sa casio et qui vient voir de temps en temps comment ça se passe par ici :)
Un peu de verdure dans ce monde obscur

4

Bah après tu peux aussi faire un arbre géneral dont l'étage N contient toutes les N-ièmes valeurs possibles, ça te fait une complexité constante en fonction du nombre de paramètres, à voir si c'est plus efficace dans ton cas.

Et il y a probablement d'autres méthode ui mais il faudra attendre quelqun d'autre happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

Ben là ce qu'il te faut c'est clairement une table de hash, oui...

http://en.wikipedia.org/wiki/Hash_table

Je ne sais pas si tu avais vraiment fait ça dans ta "technique de ce genre", mais l'idée clé est de *réduire* tes données d'entrées (ici N valeurs) en un entier 32 ou 64 bits de façon relativement imprédictible... Ca te permet après d'accéder à n'importe quel élément en temps moyen constant, indépendamment de N.


Un coup de google me dit que VC++ et g++ ont même des extensions à la STL pour ça ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfhashmap_class.asp et http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/class____gnu__cxx_1_1hash__map.html )

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)