2016-06-16 2 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++ с помощью цикл каждого элемента в массиве по сравнению с использованием метода max() в Python.

Затем я запустил код на терминале, чтобы найти время его выполнения и выяснил, что он занимает приблизительно 0,006 с (C++) и 0.032s (Python). Есть ли способ сократить время выполнения Python?

+7

«* Найти максимальное значение в C++ медленнее, чем в Python3 *" ... Это * противоположное * то, что говорят ваши данные. –

+0

Вы также можете использовать 'std :: max_element' для соответствия однострочному слою Python, который не включает повторно изобретенный код. – chris

+0

Вы проверили это с помощью кода, который скомпилирован с включенными оптимизациями? Если нет, это бессмысленно. Отправьте команду, которую вы использовали для компиляции вашего примера. Если это Visual Studio, создайте сборку «Release», а не «Debug». – PaulMcKenzie

ответ

-1

Предполагая, что вы используете более крупный вектор, чем приведенный выше пример игрушки, я бы дал несколько выстрелов.

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

max_val = np.max(a) 

Очень быстро относительно петли.

Мой компьютер показывает примерно в 12 раз быстрее, чем np.max, чем встроенная функция max() в python. C++ будет еще быстрее, поскольку это скомпилированный язык. (Numpy обертывает пакеты с низким уровнем, которые оптимизированы на C-коде.)

0

Python - это язык, который интерпретируется. Python должен прочитать текстовый файл с кодом python, проанализировать его и только затем начать его выполнять.

К моменту выполнения кода на C++ компилятор C++ уже сделал весь тяжелый подъем компиляции C++ в собственный код машинного языка, который напрямую выполняется ЦП.

Можно предварительно скомпилировать код Python; это сэкономит некоторые накладные расходы, но код C++ по-прежнему получит преимущество оптимизации времени компиляции на C++. С небольшим размером массива агрессивный компилятор C++, скорее всего, разворачивает цикл и, возможно, даже вычисляет максимальное значение во время компиляции, а не во время выполнения; так что все, что вы в конечном итоге выполняете, это:

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

Это то, что теоретически может и Python; однако это займет еще больше циклов процессора, чтобы выяснить, во время выполнения.

Смежные вопросы