C++ vs Python: сравнение скорости | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Java Developer. Basic C++ Developer. Professional Web-разработчик на Python MS SQL Server Developer Android Developer. Basic Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов React.js Developer Node.js Developer Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" C++ Developer. Basic
Инфраструктура
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
Разработчик IoT
-13%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Базы данных Network engineer Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Reverse-Engineering. Professional Внедрение и работа в DevSecOps Administrator Linux. Advanced Infrastructure as a code in Ansible Супер-практикум по использованию и настройке GIT Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

C++ vs Python: сравнение скорости

Если вы Data scientist, у вас есть множество причин любить «Пайтон». Но почему же многие ученые, работающие с обработкой и анализом данными, в дополнение к Python интересуются еще и C++? Ответ прост — скорость.

Давайте сравним скорость Python и C++ на простом примере, используя для обоих языков одинаковый алгоритм. Рассмотрим задачу из биоинформатики, связанную с генерацией всех возможных k-мер ДНК для фиксированного значения k. Для начала сделаем небольшое теоретическое отступление.

Два слова про k-меры ДНК

Как известно, ДНК представляет собой длинную цепь нуклеотидов. Данные нуклеотиды бывают 4-х типов: A, C, G и T. У Homo Sapiens порядка 3 млрд пар нуклеотидов. Вот как выглядит, к примеру, часть человеческого ДНК:

Screenshot_1-1801-5e870c.png

Для получения из него k-мер следует разбить строку на части:

Screenshot_2-1801-429a99.png

Эти последовательности, состоящие из 4-х символов, называют k-мерами, причем их длина равняется четырем (4-меры).

В чем заключается задача?

Будут сгенерированы все возможные 13-меры. С точки зрения математики, речь идет о перестановке с проблемой замены. Таким образом, мы имеем 4 в 13-й степени вариантов 13-меров (67 108 864).

Сравниваем скорость С++ и Python

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

Вот что у нас получилось на Python:

Screenshot_3-1801-25563a.png

Данная программа выполнится за 61.23 секунды. В течение данного времени будет сгенерировано более 67 млн 13-меров. Дабы не увеличивать время работы программы, код, выводящий результаты, был закомментирован (строки 25 и 37). Если же вы этот код раскомментируете, то учтите, что процесс может занять много времени. Впрочем, всегда можно остановить выполнение программы, нажав CTRL+С на клавиатуре.

Теперь пришла очередь языка C++:

Screenshot_4-1801-5886f5.png

Код, указанный выше, после компиляции выполнится за 2.42 секунды. Из этого следует вывод: «Пайтону» понадобилось в 25 раз больше времени на решение задачи. Если же повторить данный эксперимент с 14 и 15-мерами, то мы снова убедимся, что производительность Python и C++ при выполнении одинаковой задачи существенно отличается.

1_jdvvzZ9EN1YjuXoT79nxsA_1-1801-d375ac.png

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

Таким образом, можно подытожить: дата-сайентистам действительно стоит обращать внимание на C++, если предстоит работа с большими массивами данных, требующими повышенной производительности процесса обработки.

По материалам статьи «How fast is C++ compared to Python?».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться