0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Если вы Data scientist, у вас есть множество причин любить "Пайтон". Но почему же многие ученые, работающие с обработкой и анализом данными, в дополнение к Python интересуются еще и C++? Ответ прост -<strong>скорость</strong>.</p>
1
<p>Если вы Data scientist, у вас есть множество причин любить "Пайтон". Но почему же многие ученые, работающие с обработкой и анализом данными, в дополнение к Python интересуются еще и C++? Ответ прост -<strong>скорость</strong>.</p>
2
<p>Давайте сравним скорость Python и C++ на простом примере, используя для обоих языков одинаковый алгоритм. Рассмотрим задачу из биоинформатики, связанную с генерацией всех возможных k-мер ДНК для фиксированного значения<em>k</em>. Для начала сделаем небольшое теоретическое отступление.</p>
2
<p>Давайте сравним скорость Python и C++ на простом примере, используя для обоих языков одинаковый алгоритм. Рассмотрим задачу из биоинформатики, связанную с генерацией всех возможных k-мер ДНК для фиксированного значения<em>k</em>. Для начала сделаем небольшое теоретическое отступление.</p>
3
<h2>Два слова про k-меры ДНК</h2>
3
<h2>Два слова про k-меры ДНК</h2>
4
<p>Как известно, ДНК представляет собой длинную цепь нуклеотидов. Данные нуклеотиды бывают 4-х типов: A, C, G и T. У Homo Sapiens порядка 3 млрд пар нуклеотидов. Вот как выглядит, к примеру, часть человеческого ДНК:</p>
4
<p>Как известно, ДНК представляет собой длинную цепь нуклеотидов. Данные нуклеотиды бывают 4-х типов: A, C, G и T. У Homo Sapiens порядка 3 млрд пар нуклеотидов. Вот как выглядит, к примеру, часть человеческого ДНК:</p>
5
<p>Для получения из него k-мер следует разбить строку на части:</p>
5
<p>Для получения из него k-мер следует разбить строку на части:</p>
6
<p>Эти последовательности, состоящие из 4-х символов, называют<strong>k-мерами</strong>, причем их длина равняется четырем (4-меры).</p>
6
<p>Эти последовательности, состоящие из 4-х символов, называют<strong>k-мерами</strong>, причем их длина равняется четырем (4-меры).</p>
7
<h2>В чем заключается задача?</h2>
7
<h2>В чем заключается задача?</h2>
8
<p>Будут сгенерированы все возможные 13-меры. С точки зрения математики, речь идет о перестановке с проблемой замены. Таким образом, мы имеем 4 в 13-й степени вариантов 13-меров (67 108 864).</p>
8
<p>Будут сгенерированы все возможные 13-меры. С точки зрения математики, речь идет о перестановке с проблемой замены. Таким образом, мы имеем 4 в 13-й степени вариантов 13-меров (67 108 864).</p>
9
<h2>Сравниваем скорость С++ и Python</h2>
9
<h2>Сравниваем скорость С++ и Python</h2>
10
<p>Как уже было сказано выше, воспользуемся одним и тем же алгоритмом для обоих языков. Код написан аналогично и максимально просто, без сложных структур данных и сторонних библиотек.</p>
10
<p>Как уже было сказано выше, воспользуемся одним и тем же алгоритмом для обоих языков. Код написан аналогично и максимально просто, без сложных структур данных и сторонних библиотек.</p>
11
<p>Вот что у нас получилось на Python:</p>
11
<p>Вот что у нас получилось на Python:</p>
12
<p>Данная программа выполнится за 61.23 секунды. В течение данного времени будет сгенерировано более 67 млн 13-меров. Дабы не увеличивать время работы программы, код, выводящий результаты, был закомментирован (строки 25 и 37). Если же вы этот код раскомментируете, то учтите, что процесс может занять много времени. Впрочем, всегда можно остановить выполнение программы, нажав CTRL+С на клавиатуре.</p>
12
<p>Данная программа выполнится за 61.23 секунды. В течение данного времени будет сгенерировано более 67 млн 13-меров. Дабы не увеличивать время работы программы, код, выводящий результаты, был закомментирован (строки 25 и 37). Если же вы этот код раскомментируете, то учтите, что процесс может занять много времени. Впрочем, всегда можно остановить выполнение программы, нажав CTRL+С на клавиатуре.</p>
13
<p>Теперь пришла очередь языка C++:</p>
13
<p>Теперь пришла очередь языка C++:</p>
14
<p>Код, указанный выше, после компиляции выполнится за 2.42 секунды. Из этого следует вывод: "Пайтону" понадобилось в 25 раз больше времени на решение задачи. Если же повторить данный эксперимент с 14 и 15-мерами, то мы снова убедимся, что<strong>производительность Python и C++ при выполнении одинаковой задачи существенно отличается</strong>.</p>
14
<p>Код, указанный выше, после компиляции выполнится за 2.42 секунды. Из этого следует вывод: "Пайтону" понадобилось в 25 раз больше времени на решение задачи. Если же повторить данный эксперимент с 14 и 15-мерами, то мы снова убедимся, что<strong>производительность Python и C++ при выполнении одинаковой задачи существенно отличается</strong>.</p>
15
<p>Конечно, оба варианта кода неидеальны и могут быть оптимизированы. К примеру, мы не используем параллельные вычисления, не сохраняем результаты и т. д. Но общей сути это не меняет.</p>
15
<p>Конечно, оба варианта кода неидеальны и могут быть оптимизированы. К примеру, мы не используем параллельные вычисления, не сохраняем результаты и т. д. Но общей сути это не меняет.</p>
16
<p>Таким образом, можно подытожить: дата-сайентистам действительно стоит обращать внимание на C++, если предстоит работа с большими массивами данных, требующими повышенной производительности процесса обработки.</p>
16
<p>Таким образом, можно подытожить: дата-сайентистам действительно стоит обращать внимание на C++, если предстоит работа с большими массивами данных, требующими повышенной производительности процесса обработки.</p>
17
<p><em>По материалам статьи "<a>How fast is C++ compared to Python?</a>".</em></p>
17
<p><em>По материалам статьи "<a>How fast is C++ compared to Python?</a>".</em></p>
18
18