关门了。
这个问题是
不可复制的或由打字错误引起的
..。它目前不接受答案。
想要改进这个问题吗?
更新问题,使其成为
主题
堆栈溢出。
20小时前就关门了。
改进这个问题
我写了一个简单的代码来比较Python和C++的速度。以下是Python代码:
def count_permutations(N:int)->int:
count=0
for p in itertools.permutations(range(1,N+1)):
count += 1
return count下面是C++代码:
int count_permutations(int N) {
vector v(N);
iota(v.begin(), v.end(), 1); // fill the vector with 1,...,N
int count=0;
do {
++count;
} while ( next_permutation(v.begin(),v.end()) );
return count;
}当我在Ubuntu上运行Python 3.8.5时,我得到:
Permutations of 1..11:
39916800 permutations calculated in 3.31172251701355 seconds
Permutations of 1..12:
479001600 permutations calculated in 40.63520336151123 seconds当我在同一个Ubuntu上运行C++ (clang++-9)时,没有经过优化,我得到:
Permutations of 1..11:
39916800 permutations calculated in 5 seconds
Permutations of 1..12:
479001600 permutations calculated in 57 seconds我觉得这很奇怪,因为在
基准测试
网站,C++总是比Python快。
有没有可能最近的Python版本变得如此之快,以至于它们现在比它们的C++并行版本还要快?
发布于 2021-03-01 20:30:31
理论上,只有低级语言才能超越C++性能,在本例中为原始asm/机器码。当然,这高度依赖于具体的代码。但是,如果不完全重写和重新设计解释器,CPython永远不会获得这种级别的性能。有一些设计选择(例如gil、无jit等)这只会阻碍它的良好表现。然而,其他一些Python实现,例如PyPy,可能执行得非常好,有时甚至可以与低级语言相媲美。
如果您的C++代码的性能与Python代码相似或更差,那么您应该检查以下内容:
您应该在编译C++时启用优化(从注释判断,这是您的问题)。
两种语言的代码应该是相同的。不难忽略影响性能的细微差别。
代码是等价的,但在C++中使用了更差的算法/实现。请注意,标准C++库不能保证是最快的。它通常会给出大O级的保证,这是不一样的。从理论上讲,某些功能的默认Python实现实际上比默认的C++实现更快,尽管可能性不大。
您的Python代码已经经过了高度优化,并且实际上是通过C/C++插件运行的(这就是为什么将ML与Python结合使用是有意义的)。
https://stackoverflow.com/questions/66421750
复制相似问题