2016-06-16 18 views
-5

C++で最大値を見つけるのがPython3より速いのはなぜか不思議です。ここでは、両方の言語での私のコードの抜粋です:PythonとC++の最大値の比較

C++:

int main() { 
    int arr[] = {45, 67, 89}; 
    int temp = 0; 

    for(int n = 0; n < 3; n++) { 
     if(arr[n] > temp) 
      temp = arr[n]; 
    } 

    cout << "Biggest number: " << temp << endl; 
} 

Pythonの:それはコードに示されるよう

def Main(): 
    numbers = ['87', '67', '32', '43'] 
    print(max(numbers)) 

if __name__ == "__main__": 
    Main() 

、私はC++経由で最大値を求めていますPythonでmax()メソッドを使用するのと比較して、配列の各要素をループします。

私は、実行時間を見つけるために端末上でコードを実行し、約0.006s(C++)と0.032s(Python)が必要であることを発見しました。 Pythonの実行時間をさらに短縮する方法はありますか?

+7

"* C++の最大値を見つけるのはPython3 *よりも遅いです。" ...これはあなたのデータが言うところの*逆の*です。 –

+0

再作成されたコードに関係しないPythonの1ライナーにマッチさせるために 'std :: max_element'を使用することもできます。 – chris

+0

最適化をオンにしてコンパイルされたコードでこれをテストしましたか?そうでない場合、これは無意味です。あなたの例をコンパイルするために使用したコマンドラインを投稿してください。 Visual Studioの場合は、 "Debug"ビルドではなく、 "Release"ビルドを作成してください。 – PaulMcKenzie

答えて

-1

上記のおもちゃの例よりも大きなベクトルを使用していると仮定すると、私はnumpyをショットします。

# set up a vector with 50000 random elements 
a = np.random.randint(0,100000,50000) 

max_val = np.max(a) 

ループに対して非常に高速です。

私のコンピュータでは、pythonの組み込みmax()操作よりもnp.maxの方が約12倍高速です。コンパイルされた言語であるので、C++はさらに高速になります。 (Numpyは最適化されたCコードである低レベルのパッケージを包みます。)

0

Pythonはインタープリタ言語です。 Pythonは、テキストファイルをPythonコードで読み取って解析してから、実行しなければなりません。

C++コンパイラは、C++をコンパイルする際に、CPUによって直接実行されるネイティブのマシン言語コードに重大な影響を与えていました。

Pythonコードをプリコンパイルすることは可能です。オーバーヘッドはいくらか軽減されますが、C++コードではC++コンパイル時の最適化の利点が得られます。小さな配列サイズでは、積極的なC++コンパイラがループを展開し、実行時ではなくコンパイル時に最大値を計算する可能性があります。

cout << "Biggest number: " << 89 << endl; 

これは、理論的には、Pythonでも実行できるものです。しかし、それは実行時に、より多くのCPUサイクルを把握することになります。

関連する問題