我正在研究一个理论图论问题,该问题涉及采用超图中的超边组合来分析各种情况。
我已经用 Python 实现了主要算法的初始版本,但由于其组合结构(可能还有我的实现),该算法相当慢。
我正在考虑加快速度的一种方法是使用 PyPy 或 Cython。
查看文档,Cython 在元组方面似乎没有提供很大的加速。这对于实现来说可能会有问题,因为我将超边表示为元组 - 所以算法的大部分是在操作元组(但是它们的长度都相同,每个长度约为 len 6)。
由于我的 C 和 Python 技能都非常少,如果有人能建议考虑到代码对元组/列表的依赖,继续优化代码的最佳方法是什么,我将不胜感激。是否有使用 Cython(或 PyPy)列表/元组的文档?
最佳答案
如果你的算法在计算复杂度方面很糟糕,那么你就救不了了,你需要写得更好。查阅一本好的图论书籍或维基百科,它通常相对容易,尽管有些算法既不平凡又难以实现。这听起来像是 PyPy 可以显着加速的事情,但只能以常数因子加速,但它不涉及对代码的任何修改。如果没有类型声明,Cython 不会加速您的代码,而且似乎此类问题不能仅通过类型来真正加速。
常数部分在这里至关重要 - 如果算法复杂度增长到 2^n(这对于朴素算法来说是典型的),那么向图中添加额外的节点会使您的时间增加一倍。这意味着 10 个节点添加 1024 个时间,20 个节点添加 1024*1024 等。如果你 super 幸运,PyPy 可以将你的算法加速 100 倍,但这在图大小上保持不变(并且你很快就会耗尽宇宙)时间以一种或另一种方式)。
关于python - 使用 cython 或 PyPy 优化元组/列表(用 python 实现的图论算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731252/