首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这段代码在Python中比在C++中更快?[已关闭]

为什么这段代码在Python中比在C++中更快?[已关闭]
EN

Stack Overflow用户
提问于 2021-03-01 19:59:12
回答 1查看 81关注 0票数 -2

关门了。

这个问题是

不可复制的或由打字错误引起的

..。它目前不接受答案。

想要改进这个问题吗?

更新问题,使其成为

主题

堆栈溢出。

20小时前就关门了。

改进这个问题

我写了一个简单的代码来比较Python和C++的速度。以下是Python代码:

代码语言:javascript
复制
def count_permutations(N:int)->int:
    count=0
    for p in itertools.permutations(range(1,N+1)):
        count += 1
    return count

下面是C++代码:

代码语言:javascript
复制
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时,我得到:

代码语言:javascript
复制
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)时,没有经过优化,我得到:

代码语言:javascript
复制
Permutations of 1..11:
  39916800 permutations calculated in 5 seconds
Permutations of 1..12:
  479001600 permutations calculated in 57 seconds

我觉得这很奇怪,因为在

基准测试

网站,C++总是比Python快。

有没有可能最近的Python版本变得如此之快,以至于它们现在比它们的C++并行版本还要快?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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结合使用是有意义的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66421750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档