作为一名技术爱好者,看到好的开源项目总是忍不住想要推荐给身边的朋友。最近小编也一直想要重新写一些算法相关的内容,就看到了github
的hello-algo
项目。这个项目将算法学习的书籍搬到了线上进行开源。虽然相对于以前打ACM时用到的一些大佬的模板来说(例如邝斌的模板
),算法体量小很多,但是这个项目讲解得更为详细,支持的语言也蛮多,对于算法体量来说只是一个补充的时间问题。感兴趣的朋友可以关注一下。
Hello-algo项目简介
正如这个项目的名字一样,这个项目在介绍的时候也提到了适用范围:
❝若您是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之间反复横跳,那么这本书正是为您量身定制!如果您已经积累一定刷题量,熟悉大部分题型,那么本书可助您回顾与梳理算法知识体系,仓库源代码可以 被当作“刷题工具库”或“算法字典”来使用。
❞
内容下载
该项目的链接为:https://github.com/krahets/hello-algo,可以直接fork一把,然后git clone
下来,关于git的使用方法,可以看小编的这篇文章git配置密钥及提交代码到仓库
在线学习的网站链接为:https://www.hello-algo.com/
同时,项目提供了下载的pdf,地址为:https://github.com/krahets/hello-algo/releases。
如果有朋友无法前往下载,也可以在本公众号回复消息【算法】关键字进行下载。
内容介绍
我们从书中的内容来看
一共包含15章的算法内容,分别是初识算法
讲算法是什么,复杂度分析
主要讲时间复杂度和空间复杂度,以及如何使用时间换空间或者空间换时间。这两种时间复杂度的相互转换需要根据当时场景中对应的痛点进行分析。数据结构
这一篇里面包含的内容是数组、链表和列表,这些基本的数据结构是构成任何一种复杂的数据结构的基础,吃透这几个基础数据结构是很有必要的。栈和队列
这一篇包含栈、队列和双向队列,在我们的计算机中,栈和队列使用得是非常多的,例如,理解栈和队列,也有助于拓宽我们的思维方式和逻辑。哈希表
这一篇包含哈希排序、哈希冲突等内容,哈希表其实是一个伟大的发明,它可以有效减少空间,小编使用过一种名叫布隆过滤器的哈希算法,将几千万量级的存储空间压缩到一个几百位的空间中进行实现,但正如内容讲到的一样,哈希算法是存在位置冲突的,需要掌握它的优缺点。树、图、堆
这些算法是数据结构算法的延伸算法,在工作中用得蛮多的。搜索算法
主要讲的是二分查找算法,二分搜索主要是针对单调递增或者递减的方式的问题求解,对应二分搜索,还有三分搜索算法,求解的是极值问题,即具有最大值和最小值的单峰问题。排序
部分讲了十几种排序算法,排序算法的学习过程可以先由高时间复杂度逐步转向到低时间复杂度的过程,注重理解计数排序和基数排序的区别。分治和回溯
递归求解子问题,分治其实是一种思维方式,一个问题是由一个或多个子问题构成。动态规划
目前只涉及背包问题,可能未来会更新。最后是贪心,贪心其实不是一种算法,只是一种思维方式。
总的来说,现目前的阶段,整个项目还是起步阶段,算法的内容缺失蛮多的,拿来做算法的入门还是不错的,想要更进一步的学习,还是需要看算法导论或者找一些ACM大佬总结的各类算法模板。