python - 使用 cython 或 PyPy 优化元组/列表(用 python 实现的图论算法)

标签 python list tuples cython pypy

我正在研究一个理论图论问题,该问题涉及采用超图中的超边组合来分析各种情况。

我已经用 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/

相关文章:

python - Groupby Pandas 生成多个带条件的字段

python - 将列表项转换为定义的数据类型

list - 如何使 "time machine"在 Haskell 中工作?

Python - Neaten 这个追加/扩展条件

python - 如何将元组列表的字符串转换为 Python 元组列表

c++ - 元组是否保证压缩空元素?

swift - 如何检测该参数是两种任意类型的元组?

Python fsolve 使用对象进行调和

c# - 如何将 Python 版本 3 与 .Net 集成

python - 当我们索引一个对象(如列表或元组)时是否会发生函数调用?