声明:
● 本专栏是自己在学习慕课网Liuyubobobo老师的《算法与数据结构体系课》 时,自己做的笔记;
● 主要目的是供自己学习、总结、回顾之用,其中很多内容书写记录的时候包含了很多个人语言;
● 读者如果想更好的理解算法和数据结构的内容,可以去慕课网上观看 《算法与数据结构体系课》课程,以期更能够以“第一手”的感觉来学习,体验和效果也会更好。
● 本专栏的所有可能收益,本人会JZ给CFPA;
说明:
(1)本篇博客内容:介绍了【算法和数据结构】包括哪些内容;只是一个摘要性质的简介;
目录
一:课程内容概述:本体系课程,会系统、全面的介绍算法和数据结构的内容;
二:课程目的:不仅仅是机械性的掌握,而是要深入理解、感性认识;
三:课程特点:这个课程面向基础、图画展示,希望通过本课程构建自己的一个【算法和数据结构体系】,体验算法优化、测试等过程;
一:课程内容概述:本体系课程,会系统、全面的介绍算法和数据结构的内容;
(1)● 包括十大排序算法,也包括这些排序算法的优化;
(2)● 在介绍二分查找的时候,会介绍很多扩展内容;
● 很多问题看起来不像是查找问题,但是却可以使用二分查找法去解决;
● 在计算机的世界中,很多问题本质就是查找;有时,为了解决数据查找问题,就需要引入数据结构了;
(3) 线型数据结构是基础的;
(4)树结构是必须要深入掌握的;
(5)高级数据结构;
(6)在计算机中,处理字符串相关的算法也是很重要的;
二:课程目的:不仅仅是机械性的掌握,而是要深入理解、感性认识;
目的:不仅仅学习了一些算法、数据结构是怎么实现的;更重要的目的是,深刻理解计算机科学;
为了实现上述目的,本课程在讲解有以下特点(仅仅是举了几个例子):
(1)在介绍【二分查找】时,会涉及:
● 如何编写正确的程序;以及如何解决边界问题等;
(2)在介绍【快速排序】【归并排序】【链表】【树结构】时,会涉及:
● 如何调试递归的代码;
● 在算法优化的过程中,希望能对算法有一个感性的认识,而不仅仅是机械的掌握;
(3)在介绍【快速排序】时,会涉及:
● 这儿快排序不仅仅展示算法过程;
● 快速排序算法也会包括递归的内容,然后这儿也会涉及排序算法的优化;
● 快速排序算法本身也是一个随机随机算法,所以在介绍快排的时候,也会涉及随机算法;
(4)在介绍【哈希表】和【字符串匹配中的RK算法】时,会涉及:
● 【哈希】这个东西的使用思路、使用场景、局限性;
(5)在介绍【桶排序】和【sqrt分解】时:会涉及:
● 【分块思想】(这是计算机领域解决问题时,很重要的一个思想);
(6)在介绍【线段树】和【sqrt分解】时,会涉及:
● 当【处理区间问题、进行区间估计】的时候,经常使用的思路和需要注意的方向;
(7)在介绍【希尔排序】时,会涉及:
● 会发现希尔排序是一个没有固定写法的算法(或者说,具体实现希尔排序的时候,算法内部存在一个超参数);
● 通过分析希尔算法,会感受到:对于很多算法,其最优写法是怎样的,我们并不能确定;
(8)在介绍【KMP算法】时,会涉及:
● KMP算法有很多种实现方式,其中一种实现方式会涉及【有限状态自动机】这个概念;
(9)在介绍【B树】时,会涉及:
● 在设计算法和数据时,是分内存算法和外存算法的;
● 大多数算法是内存算法,而但当我们处理的数据是外存的时,考量可能是不同的;
即,通过本课程,更重要的目的是深入理解计算机科学;
然后,在课程内容中,除了算法与数据结构的具体实现;会涉及在计算机科学中,解决问题的思路和方法(递归、分块、哈希、DFS、BFS…)
然后,希望借由本课程能够培养一个重要的习惯、思维方式:如何编写正确的程序,如何调试程序;
最后,顺带熟悉下Java语言;
三:课程特点:这个课程面向基础、图画展示,希望通过本课程构建自己的一个【算法和数据结构体系】,体验算法优化、测试等过程;
但是,本课程不包括图论算法;
本课程某些专题中,会通过LeetCode中的题目来巩固;
至于刷题,【本课程中内容】是【刷题】的基础;但是,从本课程内容到刷题,中间还是有一个小小的鸿沟的,需要自己跨过去;