7

Python は C/C++ や Java などの他の言語ほど効率的ではないと言われています。また、ボトルネック部分を C で記述することも推奨されています。しかし、私はそのような問題に遭遇したことはありません。言語の効率ではなく、問題を解決する方法です。

誰かが実際の状況を説明できますか? いくつかの単純なコードは素晴らしいでしょう。

4

3 に答える 3

6

これに対する SO の回答は既にあります: Python は C++ よりも高速で軽量ですか? . これは、最初にここで引用したかった Computer Languages Benchmarks Gameを参照しています。

そのため、Python は (組み込みの C コードを使用していない場合) 深刻な計算を行う場合に非常に遅くなります。

于 2013-06-12T08:53:49.513 に答える
2

C の方がはるかに高速であることがわかるように、挿入ソートを使用した実用的な比較。これらは 1 対 1 の試みであることに注意してください。現実の世界では、https://en.wikipedia.org/wiki/Timsortを使用する Python のソートを使用するだけで、はるかに効率的です。結果:

パイソン

real  0m0.034s
user  0m0.028s
sys   0m0.008s

real  0m0.003s
user  0m0.000s
sys   0m0.000s

最初に Python で

#!/usr/bin/python

a = [16, 7, 4, 10, 18, 15, 6, 12, 13, 5, 11, 14, 17, 8, 2, 9, 19, 3, 1]
print 'Unsorted: %s' % a

def insertion_sort(a):
    for j in range(1, len(a)):
        key = a[j]
        i = j - 1
        while i >= 0 and a[i] > key:
        a[i+1] = a[i]
        i = i - 1
    a[i+1] = key
    return a

# execute the sort
print 'Sorted: %s' % insertion_sort(a)

C の 2 番目

#include <stdio.h>
#include <stdlib.h>

/*
    Compile with: 

    cc insertion-sort.c -o insertion-sort
*/
int main(int argc, char **argv) 
{
   int a[20] = {16, 7, 4, 10, 18, 15, 6, 12, 13, 5, 11, 14, 17, 8, 2, 9, 20, 19, 3, 1};
   int i, j, key;
   int len = 20;

   printf("Unsorted: [");
   for ( i = 0; i < len; i++ ) {
       printf(" %d ", a[i]);
   }
   printf("]\n");

   for ( j = 0 ; j < len ; j++ ) 
   {
       key = a[j];
       i = j - 1;
       while ( i >= 0 && a[i] > key ) {
           a[i + 1] = a[i];
           i = i - 1;
       }    
       a[i + 1] = key;
   }

   printf("Sorted: [");
   for ( i = 0; i < len; i++ ) {
       printf(" %d ", a[i]);
   }
   printf("]\n");
}
于 2013-06-12T09:03:44.663 に答える
1

There isn't a specific set of circumstances in which C or C++ win. Pretty much any CPU-heavy code you write in C or C++ will run many times faster than the equivalent Python code.

If you haven't noticed, it's simply because, for the problems you've had to solve in Python, performance has never been an issue.

于 2013-06-12T08:44:38.610 に答える