Github标星近4w,这应该是最全的Python学算法入门大全


作者:Leoxin
公众号:菜鸟学Python


算法是程序的灵魂,每个程序员,尤其是高手程序员,对算法的掌握应该是如数家珍,必须要熟悉。算法非常枯燥,但是研究透了对你的程序功底非常有帮助。那么用Python如何实现主流的算法呢?今天推荐一个巨牛的repo,不仅把主流的算法都讲了一遍还用Python代码实现了,一起来看一下。


01


Github标星近4万


这个repo有近23个大牛一起维护的,领头的是一个印度工程师!印度我好几年前出差还是去过,当时去的是号称是印度的“硅谷”班加罗尔,确实软件行业非常发达。来看一下这个Github上囊括了几大主流的编程语言:


有Python,Java,C,C++,Scala和C#,发现Python打头阵,非常欣慰。Python已经作为四大主流语言地位越来越稳了。因为我主要研究Python,赶紧点进去看一下Python的相关算法:



哇发现有近38000多颗星,要知道Python里面的最火的flask也才4.4w。一个算法的实现库能这么多星,真是牛逼啊!



02


主要覆盖的算法


这么火的repo到底有啥好东西,引来这么多人围观点赞呢。介绍了很多常见的排序,而且很多用动画的形式表现,代码也写的非常通熟易懂,非常适合入门新手,下面我挑几种大家看一下:


排序算法-冒泡排序:



冒泡排序,有时也称为下沉排序,是一种简单的排序算法,它反复遍历要排序的列表,比较每对相邻的项目,如果它们的顺序错误则交换它们。重复传递列表,直到不需要交换,这表明列表已排序


来看一下它的code:

代码还是写的非常工整而且很严谨,一共才20来行,而且作者非常贴心的考虑到了Python2和Python3两种版本的支持,也加了很多注释,看的出编程的习惯非常好。


堆排序

是一种基于比较的排序算法。它可以被认为是一种改进的选择排序。它将其输入划分为已排序和未排序的区域,并通过提取最大元素并将其移动到已排序区域来迭代缩小未排序区域。


看一下堆排序的代码,写的还是很巧妙的,其实就是构造一个完全二叉树的,即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字堆分为大顶堆和小顶堆。


上面只是挑选了2个比较典型的算法实现,还有很多经典的排序算法,比如桶排序,鸡尾酒排序,插入排序,归并排序,选择排序;以及搜索算法,比如线性搜索

线性搜索顺序搜索是用于在列表中查找目标值的方法。它按顺序检查列表中的每个元素的目标值,直到找到匹配或直到搜索完所有元素。线性搜索在最差的线性时间运行并且最多进行n次比较,其中n是列表的长度。


其实就是在Python里面一个遍列列表而已:


快速选择排序:

快速选择是一种选择算法,用于查找无序列表中的第k个最小元素。它与快速排序算法有关。像quicksort一样,它是由Tony Hoare开发的,因此也被称为Hoare的选择算法。[1] 像quicksort一样,它在实践中很有效并且具有良好的平均情况性能,但是具有差的最坏情况性能。Quickselect及其变体是最常用于高效实际实现的选择算法。


还有有趣的RSA加密算法:



除了上面的各种算法之外,还有很多机器学习和人工智能的代码,比如神经网络的代码实现:


总之,这个repo还是不错,有兴趣的小伙伴,可以点击阅读原文去看一下,吸取里面的精华,也许这个repo很快会突破4w颗星!



最后安利一下小灰创建的免费知识星球

每天都有许多有趣的抢答活动和各种奖品,

关键是不要钱!欢迎大家扫码加入: