Bonjour à tous,
Je vous explique mon problème...
J'ai créé un petit programme dont je vous expose rapidement l'algorithme, ce sera plus parlant qu'un long discours :
liste des solutions traitées <- Vide
Pour i de 1 à beaucoup
sol <- déterminer solution aléatoire
Si sol n'a pas déjà été traitée Alors
traiter sol
ajouter sol à la liste des solutions traitées
Finsi
Finpour
Ainsi, la liste des solutions traitées vide au début grandit rapidement jusqu'à devenir énorme, ce qui fait perdre beaucoup de temps lors de la recherche de sol dans la liste des solutions traitées.
Concrètement, en Matlab, j'avais modélisé cette liste en cell, à la fin de laquelle je concaténais chaque nouvelle solution. C'est pour rechercher si une solution avait déjà été traitée que je devais parcourir tout le cell jusqu'à cette éventuelle solution, ou jusqu'à la fin.
Ainsi, les premières occurrences de la boucle principale se faisaient très rapidement, mais ralentissait au fur et à mesure de l'exécution.
Du coup, j'ai eu l'idée de gérer cette liste en conservant un tri de ces solutions. On insère la nouvelle solution à la bonne place, et on recherche plus facilement une solution particulière dans une liste triée. Seulement, je n'ai pas trouvé les fonctions souhaitées de gestion de cell (insert, find). Je suis donc passé en matrice (une ligne étant une solution), ce qui me permet d'insérer facilement au rang n. Mais pour déterminer le rang n, je n'ai pas trouvé de fonction Matlab, j'ai donc du coder par dichotomie. Au final, cela fonctionne, mais est beaucoup plus lent que l'algo de recherche séquentielle.
Quelqu'un a-t-il une idée de la raison de ce ralentissement ? Est-ce algorithmique ou purement technique ?
A noter que la liste des solutions déjà traitées est gérée en variable globale, cela pourrait-il être la cause ?
Si mon explication manque d'information ou de clarté, n'hésitez pas à me demander.
Merci d'avance pour votre aide...
Partager