图解算法 使用Java
图解算法ISBN:978-7-121-37618-4
作者:吴灿铭、胡昭民
页数:275页
阅读时间:2022-04-22
推荐指数:★★★★★
从计算思维开始介绍,再到算法的概念、经典的算法介绍等,再走进数据结构的世界。后面就是围绕数据结构进行展开讲解,整体还是比较流畅的,而且里面的例子都是用Java来描述,写的也非常详细。而且里面有很多图例进行讲解,也比较适合初学者来看。还是比较推荐阅读的。
1. 计算思维
- 分解:将一个复杂问题分割成小问题。
- 模式识别:在一组数据中找出特征或规则。
- 模式概括与抽象:过滤或忽略不必要的特征。
- 算法:一种计划。
2. 算法的条件
特性 | 说明 |
---|---|
输入 | 0个或多个输入数据 |
输出 | 至少有一个输出结果,不能没有结果 |
明确性 | 每一条指令或每一个步骤必须是简洁明确的 |
有限性 | 在有限步骤后一定会结束,不能无限循环 |
有效性 | 步骤清晰可行 |
3. 算法复杂度
究竟什么是时间复杂度,怎么求时间复杂度,看这一篇就够了 - 知乎 (zhihu.com)
算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度。)
4. 经典算法
4.1 分治法
将一个难以解决的大问题依照相同的概念分割成两个或更多的子问题,以便各个击破。
4.2 递归法
和分治法类似,将一个复杂算法问题进行分解,让规模越来越小,最终使子问题容易求解。
4.3 动态规划法
类似于分治法,如果一个问题的答案与子问题相关,就能将大问题拆解成各个小问题,其中与分治法最大的不同是可以让每一个子问题的答案被存储起来,以供下次求解时直接使用。
4.4 迭代法
需要使用重复结构(循环)重复执行一段程序代码来得到答案。
4.5 枚举法
又称穷举法,逐一列举问题的解答,或者为了便于解决问题把问题分为不重复、不遗漏的有限种可能,最终来解决问题。
4.6 回溯法
枚举的一种,可以找出所有或一部分解的一般性算法,同时避免枚举不正确的数值。一旦发现不正确的数值,就不再递归到下一层,而是回溯到上一层,以节省时间,是一种不通就退回再走的方式。
4.7 贪心法
又称贪婪算法,以尽可能快的方式求得更好解(不能保证是最优解,因为会过早做出决定)。就是在每一步骤的时候选择当前状态下最优的选择,不断的改进解答。
5. 常见的数据结构
数组、链表、堆栈、队列、树、图、哈希表
6. 常见的排序算法
冒泡排序、选择排序、插入排序、希尔排序、快速排序、合并排序、基数排序、堆积树排序。