当前位置: 首页 > 知识库问答 >
问题:

为什么C++在这里比Python快很多呢?[已关闭]

蒋何平
2023-03-14

我在练习leetcode第5题。真正让我困惑的是这里C++(20ms)和Python(1000ms)之间巨大的运行时差异。

我知道Python是一种解释性语言,所以一般来说它比C++慢。但是在这里,C++比Python快50倍是我无法理解的。两个程序都使用相同的算法,所以并非如此。是因为C++和Python中字符串的实现方式吗?

C++

class Solution {
public:
    string longestPalindrome(string s) {
        if(s.size() == 0) return "";
        int length = 1, index = 0, subOddLength = 1, subEvenLength = 1, subLength = 1;
        for(int i = 1; i < s.size(); ++i){
            subOddLength = palindromeLength(s, i, i); 
            subEvenLength = palindromeLength(s, i - 1, i);
            subLength = max(subOddLength, subEvenLength);
            if(subLength > length){
                length = subLength;
                index = i - subLength / 2;
            }
        }
        return s.substr(index, length);
    }
private:
    int palindromeLength(const string &s, int l, int r){
        int n = s.size();
        while(l >= 0 & r < n){
            if(s[l] != s[r]) break;
            l--; r++;
        }
        l++; r--;
        return r - l + 1;
    }
};

Python

class Solution:
    def longestPalindrome(self, s: str) -> str:
        
        def palindrome_length(l, r):
            while l >= 0 and r < len(s):
                if s[l] != s[r]: break;
                l -= 1; r += 1
            l += 1; r -= 1
            return r - l + 1
        
        length, index = 1, 0
        for i in range(1, len(s)):
            odd_len = palindrome_length(i, i)
            even_len = palindrome_length(i - 1, i)
            sub_len = max(odd_len, even_len)
            if sub_len > length:
                length, index = sub_len, i - sub_len // 2
        return s[index : index + length]

共有1个答案

蓝鸿哲
2023-03-14

这些可能不是唯一的原因,但Python是一种非常高级的语言。与C或C++这样的语言相比,它要经过更多的层才能到达硬件。Python本身实际上是用C编写的。

另一个原因是,是的,它是被解释的,因此对硬件的所有处理也必须即时完成,而不是在编写C++程序并编译之后才会被解析并准备就绪。

null

 类似资料:
  • 问题内容: 下面是分别用和编码的简单过程(对于那些对此过程感到好奇的人,这是针对Euler项目5号问题的解决方案)。 我的问题是,下面的代码仅需9秒即可迭代,而代码完成则需要283秒(确切地说,在Python 3.4.3-64位上为283秒,在Python 2.7.9-32位上为329秒)。 到目前为止,我已经编码的两种类似的过程和与执行时间的差异,具有可比性。但是,这次,经过的时间之间存在极大的

  • 问题内容: 我对以下算法有一些疑问,可以判断数字是否为质数,我也知道使用Eratosthenes筛子可以更快地响应。 为什么计算速度更快。比只有一次? 为什么比我的方法快? 这些算法O(n),O(sqrt(n)),O(n log(n))的复杂度是多少? 这也是我的代码的链接:http : //ideone.com/Fapj1P 问题答案: 查看下面的复杂性。计算平方根的额外费用。 Math.sqr

  • 问题内容: 这个问题已经在这里有了答案 : Python 3枚举比Python 2慢是有原因的吗? (2个答案) 5年前关闭。 我一直在试图理解为什么在某些情况下Python 3与Python 2相比实际上要花费很多时间,以下是我从python 3.4到python 2.7进行验证的几种情况。 注意:我已经经历了一些问题,例如,为什么Python3中没有xrange函数? 与 python2相比,

  • 问题内容: 为了在工作中进行演示,我想比较NodeJS和C的性能。这是我写的: Node.js(for.js): 我使用GCC编译for.c并运行它: 结果: 然后我在NodeJS中尝试了它: 结果: 在运行了无数次之后,我发现无论如何它都是成立的。如果我将for.c切换double为long在循环中使用a而不是a ,则C花费的时间甚至更长! 不是试图发动火焰战争,但是为什么执行相同操作的Node

  • 问题内容: 我可以在网上(在Stack Overflow上以及其他方面)找到大量有关使用Python或在Python中进行连接是一种非常低效且不好的做法的信息。 我似乎找不到为什么效率如此低下。在这里没有提到“在某些情况下已针对20%的改进进行了优化”(仍然不清楚这些情况是什么),我找不到任何其他信息。 在比其他Python串联方法更好的技术水平上发生了什么? 问题答案: 假设您有这段代码可以从三

  • Java: 如果java以微弱优势击败了C和C#我不会感到惊讶,但速度快了20倍?! 文件的格式如下: 另外,我认为值得注意的是,java在NetBeans中运行时大约需要11秒(即使是在“运行”模式下,而不是在“调试”模式下)。 我也尝试编译为C++而不是C,但没有什么不同。 我对C和C#都使用VS2015。 Java: 好吧,我按照建议重新做了测试: 首先,我在C和C#中都使用了类/struc