本文是我的算法整理开篇,已不看算法好多年的我,决定重新捡起来,更好的服务业务开发。
算法本质上和数学的相关性很大,即严谨又灵活。其实我不太爱算法,太烧脑,但算法设计的好坏也恰恰是衡量一个开发者能力的标准之一。
算法
本质是用于解决特定运算和逻辑问题的一套流程(这是计算机领域的算法定义),其实算法无处不在,说白了就是解决某个问题的方法步骤。
衡量算法好坏的标准有,
- 时间复杂度
时间复杂度描述的是算法耗时,推导的原则有这几点,对某段代码进行耗时计算,得出耗时公式,1假如消耗时间不随输入规模的变化而变化,那么运行时间就是常数,记为 O(1), 2.只保留公式里的最高阶项,且去除最高阶项前面的系数。例如运行时间的公式为 3n^3 + 5n +2,那么时间复杂度记为 O(n^3)。 - 空间复杂度
空间复杂度的推导类似于时间复杂度。
相比空间复杂度,大多数情况下更重注时间复杂度。
数据结构
如果说算法侧重的是逻辑思路,那么数据结构就是实现算法的基石。数据结构是数据的组织,管理和存储格式,利用数据结构能更加方便的实现算法。
根据物理与逻辑结构划分,数据结构划分如下,
- 物理结构
数组,链表。数组的存储要求连续区域,链表则正好相反,可以有效利用零散空间。 - 逻辑结构
栈,队列,树,图等。逻辑结构的数据结构很多都可以用数组和链表分别表示。并且逻辑结构的数据结构又可分为线性结构和非线性结构,例如树,图就是一对多或者多对多的非线性结构。
参考内容
「漫画算法-小灰的算法之旅」