数据结构与算法
day01
初步理解
数据结构与算法相当于咱们作战时候的兵法
这是咱们程序员开发的基本功,但需要日积月累才能够得到成长
算法的概念:
算法是独立存在的一种解决问题的方法和思路
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。
算法的五大特性:
- 输入: 算法具有0个或多个输入(代表是否需要一些额外的输入)
- 输出: 算法至少有1个或多个输出
- 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
- 确定性:算法中的每一步都有确定的含义,不会出现二义性
- 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
算法的效率衡量:
程序的执行时间 = 基本的运算总数 * 基本运算的单位时间
基本运算的执行时间 与咱们程序的运行的计算机环境相关,而衡量的标准基本是 运行的运算总数
时间复杂度:这里可以根据问题规模来去考虑,我们考虑的也是基本的运算总数 假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=g(n)=O(g(n)),则称O(g(n))为算法A的渐近时间复杂度,简称时间复杂度,记为T(n)
时间复杂度的计算规则
- 基本操作,即只有常数项,认为其时间复杂度为O(1)
- 顺序结构,时间复杂度按加法进行计算
- 循环结构,时间复杂度按乘法进行计算
- 分支结构,时间复杂度取最大值
- 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
- 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
空间复杂度
空间复杂度S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数,渐近空间复杂度也常常简称为空间复杂度
当然啦,我们现在是很少去考虑空间复杂度的概念,因为当今的设备完全可以忽略掉这个的影响
O ( 1 ) < O ( log n ) < O ( n ) < O ( nlogn ) < O