数据结构和算法算是密不可分的。单独了解数据结构也是可以,但会有夸夸其谈,很空泛的感觉,结合算法后,看到比较具体的应用场景和实例,也有助于理解和使用数据结构和算法。
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法主要有五个特性:输入/输出、有穷性、确定性、可行性。
输入输出很好理解,我们预设一个或多个条件输入后,就要能输出一个或多个的结果。
有穷性就是指算法的步骤是有限的,不能出现输入条件后,一直循环不出来,不产生结果。
确定性是指算法的每个步骤要无二义性,有且只有一个含义。
算法的每一步都是可行的,能执行完的。
设计算法的要求有以下几个:
分为时间复杂度和空间复杂度。这里不展开讨论,就贴一下定义吧。
时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
常见的时间复杂度如下图:
所耗时间从小到大:
空间复杂度:算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)= O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。
个人认为,可以简单理解为,数据结构主要是关联和存储数据,而算法是用最优方式关联、存储和获取到这些数据。算法和数据结构是密不可分的。