经典数据结构和算法。你知道多少?想去大厂面试?想成为一名算法工程师?接受这份综合审查材料。不想当底层码农,不想当前端抠图高手或者后台“增删改查”的小王子?然后你可能需要复习算法和数据结构。如果你想成为一名算法工程师,基础知识是一座无法逃脱的大山。本次要推荐的项目是一个数据结构和算法的开源项目合集,涵盖了多种主流语言,实现了各种经典的数据结构和算法。项目地址:https://github.com/trendingTheAlgorithms项目介绍TheAlgorithms项目首页介绍,这是一个使用多种编程语言实现经典数据结构和算法的开源项目集合。这里的“anyProgrammingLanguage”真的没有虚假宣传。我们可以看到,从比较流行的Python、Java、C、C++到C#、Go、Rust和Kotlin语言,TheAlgorithms应有尽有。当然,一些编程语言实现了算法。没那么丰富,其中Python和Java维护的比较好。本文以TheAlgorithms的Python项目为例。截至目前,该项目拥有超过70000个star,涵盖加密算法、图像处理、动态规划、线性代数、经典机器学习算法、搜索算法、排序算法以及各种数据结构等,仅列举实现算法才600多行……当然,项目作者也指出,项目的主要目的是作为各种算法的学习资料,项目中的一些实现可能没有项目中的效率高Python标准库。项目地址:https://github.com/TheAlgorithms/PythonPartialAlgorithmsDemonstration这个项目的吸引力不仅在于丰富的算法实现,还有一些算法的相关解释、维基百科链接和交互式网页链接。我们选择了一些算法实现进行演示。排序算法1.冒泡排序冒泡排序是一种简单的排序算法。它迭代遍历要排序的列表,一次比较两个元素,如果顺序错误则交换它们。重复上述过程,直到没有需要交换的元素,即完成排序。该算法名称的由来是较小的元素会通过交换慢慢“浮”到序列的顶部。算法复杂度:worstO(n^2)bestO(n)averageO(n^2)互动网址:https://www.toptal.com/developers/sorting-algorithms/bubble-sort2。插入排序插入排序的工作原理是构造一个有序的序列。对于未排序的数据,在已排序的序列中从后往前扫描,找到对应的位置插入。插入排序在实现上通常采用原地排序,因此在从后向前扫描的过程中,需要将已排序的元素一步步向后重复移动,为最新的元素提供插入空间。算法复杂度:worstO(n^2)bestO(n)averageO(n^2)交互网址:https://www.toptal.com/developers/sorting-algorithms/insertion-sort3.merge归并排序是一种基于归并操作的高效排序算法,由约翰·冯·诺依曼首先提出。该算法是分治法的一个非常典型的应用,每一层的分治递归可以同时进行。算法复杂度:worstO(nlogn)bestO(n)averageO(n)互动网页地址:https://www.toptal.com/developers/sorting-algorithms/merge-sort4。快速排序速度快排序算法最早是由TonyHall提出的。使用分而治之的策略,将一个序列分成2个子序列,越来越小,然后对这两个子序列进行递归排序。算法复杂度:worstO(n^2)bestO(nlogn)orO(n)averageO(n^2)互动网址:https://www.toptal.com/developers/sorting-algorithms/quick-排序5。希尔排序希尔排序又称为递减增量排序算法,是一种效率更高的插入排序的改进版本,以其设计者希尔(DonaldShell)命名,创建于1959年发表。希尔排序是一种不稳定的排序算法。算法复杂度:最差O(nlog22n)最佳O(nlogn)平均复杂度取决于步长序列交互网址:https://www.toptal.com/developers/sorting-algorithms/shell-sort搜索算法1。线性搜索算法线性搜索也称为顺序搜索,它使用循环顺序遍历整个数组,将每个元素与要搜索的值进行比较,并在找到该值或遇到数组末尾时停止。算法特点:WorstalgorithmcomplexityO(n)BestalgorithmcomplexityO(1)AveragealgorithmcomplexityO(n)WorstspacecomplexityO(1)2.BinarysearchalgorithmBinarysearchalgorithm也叫二进制搜索算法,对数搜索算法,是一种用于在有序数组中查找特定元素的搜索算法。查找过程从数组的中间元素开始,如果中间元素恰好是要查找的元素则结束;如果某个元素大于或小于中间元素,则在大于或小于中间元素的数组的一半中搜索,并像开始时一样从中间元素开始比较。如果在某一步数组为空,则表示找不到。这种搜索算法每次比较都会将搜索范围缩小一半。算法特点:WorstalgorithmcomplexityO(logn)BestalgorithmcomplexityO(1)AveragealgorithmcomplexityO(logn)WorstspacecomplexityO(1)关于作者这个项目的作者是一个印度工程师,非常迷恋技术开发,并坦言自己是个很有“野心”的人,未来想成为一名企业家。从技术角度来说,作者对全栈开发、android开发、深度学习、区块链等技术感兴趣。目前,他曾在3家初创公司工作,在开发领域拥有2年的经验。从过往经历来看,这位印度小哥的工作经历还是非常“丰富多彩”的,从一开始定位自己是一名软件工程师,到目前在Gojek担任产品工程师。Gojek是印度尼西亚第一家独角兽公司,于2010年在印度尼西亚成立。可以将该公司视为一个呼叫中心,将消费者与送货和两轮叫车服务联系起来。该公司在印度尼西亚、越南、新加坡、泰国和菲律宾也有大量业务发展。
