强者一出,谁与争锋?与Python相比,C+的运行速度究竟有多快?|python|编程语言|字符串|示例|算法

  对于数据科学家而言,热爱Python的理由数不胜数。但你是否也曾问过这样的问题:Python和C或C++等更专业的低级编程语言究竟有何不同呢?我想这是很多数据科学家或者Python用户曾经问过或者将来会问自己的问题。

  Python和C++类语言之间存在许多区别,本文将通过一个十分简单的例子向你展示,与Python相比,C++究竟有多快。

  

  为了说明这种区别,本文选择一个简单实用而非想象虚构的任务:生成固定值为“k”的所有可能DNA k-mers。选择该示例,是因为与基因组相关的许多数据处理和任务分析(例如k-mers生成)都是计算密集型的,而这同样也是很多生物信息学领域的数据科学家对C++感兴趣的原因。

  请注意,本文目标并不是以最有效的方式比较C++和Python。这两种代码均可采用更高效的方式和更优化的方法编写。本文的唯一目标,就是比较这两种语言在使用完全相同的算法和指令时的速度。

  DNA K-mers简介

  DNA是一种称为核苷酸的长链单位。在DNA中,共有4种核苷酸类型,分别用字母A、C、G和T表示。人类(更准确地说是智人)拥有核苷酸对30亿个。例如,人类DNA的一小部分可能类似于:

  ACTAGGGATCATGAAGATAATGTTGGTGTTTGTATGGTTTTCAGACAATT

  在此示例中,如果从该字符串中选择任意4个连续的核苷酸(即字母),它将是一个长度为4的k-mer(可称之为4-mer)。以下便是从此示例中衍生出来的一些4-mers例子:ACTA,CTAG,TAGG,AGGG,GGGA等。

  

  难点挑战

  本文以生成所有可能的13-mers为例,从数学上讲,这是一个带有替换的排列问题。因此,共有4¹³个(67108864)可能的13-mers。下面将使用一个简单的算法在C++和Python中生成结果。

  方案比较

  为了方便比较C++和Python在此特定挑战中的优劣,我在两种语言中使用了完全相同的算法。这两种代码均有意设计地简单而相似。同时,避免使用复杂的数据结构或第三方包或库。第一段代码采用Python编写。

  

  运行Python代码,生成全部13-mers共6700万个大约需要61.23秒。为了公平比较,我注释掉了显示k-mers的行。如果想在生成k-mers时显示它们,也可以取消对这两行的注释。注意,显示全部k-mers耗时很长。如有需要,请操作CTRL+C中止代码。

  

  现在,来看看C++中同样的算法:

  

  

  编译后,运行C++代码,生成全部13-mers共6700万个大约需要2.42秒。这意味着运行相同算法,Python用时是C++的25倍多。然后,对14-mers和15-mers重复进行此实验。汇总结果如下表所示:

  

  比较生成13-、14-和15-mers的Python和C++运行结果。

  显然,C++比Python快得多。对于大多数程序员和数据科学家而言,这是共识。但该示例表明,这种差异十分显著。

  本示例并没有使用CPU或GPU并行化,因其必须针对相应类型的问题(密集并行难题)进行。此外,示例也没有大量涉及内存。如果将运行结果进行存储(出于某些特定原因),那么使用内存管理在运行C++和Python时,将产生更显著的差异。

  此示例和数以千计的其他事实表明,在处理大量数据或指数增长的过程中,身为数据科学家,你应该了解C++类语言。

  

(0)

相关推荐

  • 实现一个算法,确定一个字符串 s 的所有字符是否全都不同

    示例 1: 输入: s = "leetcode" 输出: false 示例 2: 输入: s = "abc" 输出: true 限制: 0 <= len( ...

  • 真正的革命性技术——生物计算,或将彻底改变人们的生活方式

    我把生物计算称为一场革命,就像1765年的工业革命,1870年的第二次工业革命,现代的计算机和互联网的第三次和第四次革命. 影响大众的革命性创新已经好久没有出现了.苹果现在也已经开始挤牙膏:在新发布的 ...

  • 清理数据的重要性

    介绍 在精神上和卫生上进行清洁的概念在任何健康的生活方式中都是非常有价值的. 数据集有些是相同的.如果没有在数据科学生命周期中进行清理或作为日常活动进行清理,那么出于任何目的的代码将根本无法工作. 在 ...

  • ​LeetCode刷题实战266:回文排列

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • NAR:SNPs如何用于检测疾病途径

    伊利诺伊大学Urrina ChanaPig的研究人员已经开发出一种新的计算工具,可以使用单核苷酸多态性来识别与疾病相关的途径,包括乳腺癌和前列腺癌.单核苷酸多态性是指人的DNA突变,是人类最常见的遗传 ...

  • Python|比特位计数

    引言力扣(LeetCode),未来不止于此!问题描述给定一个非负整数num.对于0 ≤ i ≤ num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回.示例1:输入:2输出:[ ...

  • LeetCode面试系列 第6天:No.9 - 回文数

    上一篇面试题中,我们使用了 埃拉托斯特尼筛法 去统计给定范围内质数的个数(LeetCode No.204),还是有点烧脑的.今天我们来分析一道相对轻松的字符串面试题吧,恰好大家从Python 100天 ...

  • ​LeetCode刷题实战205:同构字符串

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战383:赎金信

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 各省最美女星对比,湖北一出仙气十足,山东一出谁与争锋?

    各省最美女星对比,湖北一出仙气十足,山东一出谁与争锋?

  • 3.3秒破百!奥迪这新车一出 谁与争锋?

    说到新能源跑车你能想到什么?   保时捷Taycan?   宝马i8?   今天要介绍的这一辆车,跟保时捷有千丝万缕的关系--奥迪RS e-tron GT   在3月初,奥迪RS e-tron GT ...

  • 唢呐一出谁与争锋 堪称乐界流氓

    唢呐是一种我国传统的乐器,但是唢呐却有一个很奇葩的形容,叫做"乐界流氓",这可能本身不是什么好话,说唢呐是乐器界的流氓到底是怎么回事? 流氓一词一般都是形容一些脸皮很厚,说话做事都 ...

  • 汽车下乡,祥菱一出谁与争锋 | 卡车之友网

    作者:熊悦 尽管城镇化已成为我国现代经济发展中不可逆的显著现象,但毋庸置疑的是,农村仍然是支撑我国经济发展实现长治久安的柱石.为了更好地实施扩大内需战略,进一步促进释放农村消费潜力,国家适时推出了新一 ...

  • 2750mm轴距的“卡罗拉” 2.6L油耗的RAV4!丰田绝招一出谁与争锋?

    欢迎大家来到[教授撩车]不常规评车时间,今天给大家科普下这个鸭的种类:小黄鸭.可达鸭.北京烤鸭.你有没有想我鸭-开始说正经事啦 说起丰田这个国际汽车品牌,几乎可以无人不知晓来形容,在全世界范围内推出 ...

  • Ryzen Threadripper 2990WX/2950X首发评测:32核一出谁与争锋

    十多年前AMD还是有能力和Intel在高性能计算市场叫板,然而在Intel的Core架构推出之后AMD就开始走下坡路,随后推土机架构性能疲软,有一段时间直接退出HEDT市场,直到去年锐龙线程撕裂者的横 ...

  • 鸭舌一出,谁与争锋

    一种小巧.精细.层次分明的小食 Y字型的两条须十分细长,紧裹一圈瘦肉 两条须连接处有些复杂的小骨头 肉质坚实柔然,入口已渐入佳境 接下来的舌面就是最美味的部分 咬破的瞬间丰腴嫩滑.鲜辣微甜 它是有内蕴 ...

  • 看动图涨球技:横拉一出,谁与争锋

    王皓拥有世界上最强大的直板横打技术,其中直板横拉是横打很大的技术亮点,王皓在比赛中使用该技术的频率比横板选手还要高.王皓的直板横拉弧线稳定,并且有很强的旋转和较快的速度. 标准远台反手横拉 引拍充分, ...