Литвек - электронная библиотека >> Дмитрий Елисеев >> Научно-популярная и научно-познавательная литература >> Рассказы о математике >> страница 17
лишь чуть-чуть. К тому же, данный код хранит весь массив в памяти, что неудобно.


И наконец, призываем “тяжелую артиллерию”: напишем программу на языке C. Код выглядит так:

#include <stdio.h>

#include <time.h>


int main()

{

clock_t start = clock();


unsigned long long int sum = 0, i;

for(i=1; i<1000001; i++) {

sum += i*i;

}


clock_t end = clock();

printf("Sum = %llu, T = %fs", sum, (float)(end - start)/CLOCKS_PER_SEC);

return 0;

}


Как можно видеть, он ненамного сложнее python-версии. Перед запуском программы, ее надо скомпилировать, выполнив команду C:\GCC\bin\gcc.exe "Appendix-2 - speedTest.c" -o"Appendix-2 - speedTest". Результат очевиден: T = 0.007 секунд. И еще чуть-чуть: добавляем флаг оптимизации по скорости, выполнив команду C:\GCC\bin\gcc.exe "Appendix-2 - speedTest.c" -o"Appendix-2 - speedTest" -O3. Результат: 0.0035 секунд, разница в быстродействии более 100 раз!


Увы, в более сложных задачах такого прироста реально не бывает (в последнем примере очень короткий код, который видимо полностью помещается в кеш-памяти процессора), но на некоторое улучшение быстродействия можно рассчитывать. Хотя переписывание программы - это крайний случай, сначала целесообразно поискать стандартные библиотеки, которые возможно уже решают данную задачу. К примеру, следующий код на языке Python, вычисляет сумму элементов массива за 0.1с:

a = range(1000001)

s = 0

for x in a:

s += x

print(s)


Можно использовать встроенную функцию sum:

a = range(1000001)

s = sum(a)

print(s)


Данный код выполняется за 0.02 секунды, т.е. в 5 раз быстрее первого варианта. Но разумеется, если заранее известно, что задача состоит в обработке большого набора чисел (например поиск простых чисел или магических квадратов), то может быть более целесообразным сразу писать программу на С или С++, в принципе это не намного сложнее, а работать программа будет быстрее.


Заключение

На этом данная книга закончена, хотя надеюсь, что не навсегда - по возможности и по мере появления новых идей, новые главы будут дописываться. Автор надеется, что хоть немного удалось познакомить читателей с увлекательным миром математики и программирования.


Продолжение следует.


Обо найденных неточностях или дополнениях просьба писать на электронную почту dmitryelj@gmail.com. Наличие новой версии можно проверить на странице https://cloud.mail.ru/public/4SGE/oE2EGEWnp.


ЛитВек: бестселлеры месяца
Бестселлер - Лорет Энн Уайт - Тайна пациента - читать в ЛитвекБестселлер - Хельга Петерсон - А я тебя нет - читать в ЛитвекБестселлер - Изабель Филльоза - Поверь. Я люблю тебя - читать в ЛитвекБестселлер - Рия Эшмар - Осколки тьмы (СИ) - читать в ЛитвекБестселлер - Дмитрий Олегович Иванов - Вася Неоник - читать в ЛитвекБестселлер - Нассим Николас Талеб - Черный лебедь. Под знаком непредсказуемости - читать в ЛитвекБестселлер - Николь Сноу - Случайный рыцарь - читать в ЛитвекБестселлер - Алексей Михайлович Семихатов - Всё, что движется - читать в Литвек