Je travaille sur un problème de théorie des graphes théorique qui consiste à prendre des combinaisons d'hypercharges dans un hypergrapha pour analyser les différents cas.en utilisant cython ou PyPy pour optimiser les tuples/listes (algorithme de la théorie des graphes implémenté en python)
J'ai implémenté une version initiale de l'algorithme principal en Python, mais en raison de sa structure combinatoire (et probablement de ma mise en œuvre), l'algorithme est assez lent.
L'un des moyens que j'utilise est d'accélérer PyPy ou Cython.
En regardant la documentation, il semble que Cython n'offre pas une grande rapidité en ce qui concerne les tuples. Cela peut être problématique pour l'implémentation, puisque je représente les hypercharges comme des tuples - donc la majorité de l'algorithme est dans la manipulation des tuples (cependant ils sont tous de la même longueur, environ len 6 chacun). Comme mes compétences C et Python sont assez minimes, j'apprécierais que quelqu'un puisse vous conseiller sur la meilleure façon de procéder pour optimiser le code étant donné sa dépendance aux tuples/listes. Existe-t-il une documentation sur l'utilisation de listes/tuples avec Cython (ou PyPy)?
Il est difficile de suggérer des améliorations sans voir le code, car le problème n'est peut-être pas ce que vous pensez. Dans _general_, la meilleure réponse à l'amélioration de la vitesse est de penser à un meilleur algorithme ... –
Cython peut fonctionner avec des tableaux C et des structures, et vous permet de définir des types d'extension. N'importe lequel d'entre eux pourrait être une alternative aux tuples. –
@Roland, l'algorithme est en fait NP (il est lié à la correspondance en hypergraphes), donc je ne peux pas espérer un algorithme plus optimal que celui que j'ai déjà implémenté. Cependant, je ne suis intéressé que par un cas très spécifique. J'estime le temps d'exécution de mon implémentation naïve en Python, si je peux la faire fonctionner 100 fois plus vite, ce qui la ferait finir dans un délai acceptable (environ 2 semaines). – nsimplex