纵观时代的发展,从具体到抽象,从计算机到万维网;时代的脚步一直在向前进步,而我们要么引领时代要么紧随时代,再要么落后时代,想必没有谁愿意落后,要做的大多数是紧随时代脚步,正如华为老总任正非所说:没有成功的企业,只有踩对时代节拍的公司。现如今信息发达,大数据时代来临,身为IT从业人员,哪能不去学习了解;而且当了解(掌握)了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。因为这样的你,就像是站在巨人的肩膀上,拿着生存利器行走世界。数据结构与算法,会为你的编程之路,甚至人生之路打开一扇通往新世界的大门。
先看入门书籍:《大话数据结构》《算法图解》
数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。
想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的概念——复杂度分析。
初级学习者,只有逐一攻克20个最常用、最基础数据结构与算法的知识点就足够了。
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树;10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、回溯算法、动态规划、字符串匹配算法。
数据结构和算法本身解决的是“快”和“省”的问题。如何做到更快更省,就要对时间、空间复杂度分析必须了解。复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半。
大O复杂度表示法
算法的执行效率,粗略地讲,就是算法代码执行的时间。
T(n)表示代码执行的时间;n表示数据规模的大小;f(n)表示每行代码执行的次数总和。因为这是一个公式,所以用f(n)来表示。公式中的O,表示代码的执行时间T(n)与f(n)表达式成正比。
时间复杂度分析
1.只关注循环执行次数最多的一段代码
我们在分析一个算法、一段代码的时间复杂度的时候,也只关注循环执行次数最多的那一段代码就可以了。
2.加法法则:总复杂度等于量级最大的那段代码的复杂度
3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
空间复杂度分析
时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。类比一下,空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。
还有4个复杂度分析的知识点:
最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst case time complexity)、平均情况时间复杂度(average case time complexity)、均摊时间复杂度(amortized time complexity)。