Salut à tous,
je suis sur un algo de recherche de sous-graphes en python. C’est donc (NP) complexe, et est censé prendre du temps. D’un autre côté, cela en prends trop, de manière anormal à mon avis; j’utilise donc kernprof pour profilé ligne par ligne pour une fonction, le temps pris.
Or, j’ai un résultat étonnant : j’ai une ligne ainsi :
Line # Hits Time Per Hit % Time Line Contents
==============================================================
...
53 120244 740797.0 6.2 17.0 if any( [m[passed].get(i, False) for passed in isom] ): # si ce noeud est lié à un noeud passé, le tester
qui prends donc pas mal de ressource. Je me suis dit que je pourrais économiser en passant par un générateur, afin de ne pas avoir à générer la liste entière : j’ai eu donc :
Line # Hits Time Per Hit % Time Line Contents
==============================================================
...
53 35283 509901.0 14.5 12.8 if any( (m[passed].get(i, False) for passed in isom) ): # si ce noeud est lié à un noeud passé, le tester
C’est donc en effet plus rapide. J’aurais cependant 2 questions :
- pourquoi le temps par hit est supérieur dans le cas 2 ?
- pourquoi y a t-il moins de hit dans le cas 2 que dans le 1, sachant que les autres lignes sont identiques ?
La seul explication à laquelle je pense, est qu’any() s’execute par recursion… Avez vous une idée ?
Merci d’avance !
+0
-0