初探数据结构与算法:第三部分,算法概念解析

发表时间: 2024-04-16 09:40

数据结构和算法算是密不可分的。单独了解数据结构也是可以,但会有夸夸其谈,很空泛的感觉,结合算法后,看到比较具体的应用场景和实例,也有助于理解和使用数据结构和算法。

算法

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

算法主要有五个特性:输入/输出、有穷性、确定性、可行性。

  • 输入输出

输入输出很好理解,我们预设一个或多个条件输入后,就要能输出一个或多个的结果。

  • 有穷性

有穷性就是指算法的步骤是有限的,不能出现输入条件后,一直循环不出来,不产生结果。

  • 确定性

确定性是指算法的每个步骤要无二义性,有且只有一个含义。

  • 可行性

算法的每一步都是可行的,能执行完的。

设计算法的要求有以下几个:

  • 正确性:即应具备上述特性,能应付各种条件,能得到确定答案的。
  • 可读性:要尽量便于阅读、理解和交流。
  • 健壮性:输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
  • 效率高,消耗少:时间效率高和占用存储和cpu低。

算法的复杂度

分为时间复杂度和空间复杂度。这里不展开讨论,就贴一下定义吧。

时间复杂度:在进行算法分析时,语句总的执行次数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所占存储空间的函数。

个人认为,可以简单理解为,数据结构主要是关联和存储数据,而算法是用最优方式关联、存储和获取到这些数据。算法和数据结构是密不可分的。