2021-10-06

本文深入探讨了算法的基本概念,包括正确性、可读性和效率,并介绍了算法设计步骤。重点分析了时间复杂度和空间复杂度,阐述了如何衡量算法效率。此外,文章还详细讲解了STL(Standard Template Library)在算法设计中的应用,包括容器、算法和迭代器的使用,强调了STL在实际编程中的便利性。最后,提供了相关学习资源,帮助读者进一步提升算法设计能力。
摘要由CSDN通过智能技术生成


一、算法

定义:算法是求解问题的一系列计算步骤,用来将输入数据转换成输出结果。

算法设计目标:

  • 正确性
  • 可使用性
  • 可读性
  • 健壮性
  • 高效率与低存储量需求

算法特征:

  • 有限性
  • 确定性
  • 可行性
  • 输入性
  • 输出性

算法设计步骤:

  1. 分析求解问题
  2. 选择数据结构和算法设计策略
  3. 描述算法
  4. 证明算法正确性
  5. 算法分析

二、算法分析

定义:算法分析是分析算法占用计算机资源的情况。主要分析两个指标:时间复杂度和空间复杂度。

2.1 时间复杂度

定义:时间复杂度是指执行算法所需要的计算工作量,用于衡量算法的效率。

计算方法:根据算法,分析问题规模n,找出基本语句,求出其运行次数f(n),最后再用渐进符号表示。

提示:一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,算法的运行时间取决于两者的综合效果。

渐进符号
上界符号:
在这里插入图片描述
在这里插入图片描述
下届符号:
在这里插入图片描述
在这里插入图片描述
同阶符号:
平均执行时间
算法执行时间

  1. 平均执行时间:
    在这里插入图片描述
  2. 最好执行时间:
    在这里插入图片描述
  3. 最坏执行时间:
    在这里插入图片描述

2.2 空间复杂度

定义:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度

计算:一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察临时变量所占空间。

在这里插入图片描述

二、算法设计工具-STL

定义:STL主要由container(容器)、algorithm(算法)和iterator(迭代器)三大部分构成,容器用于存放数据对象(元素),算法用于操作容器中的数据对象。

  1. 容器
    一个STL容器就是一种数据结构,如链表、栈和队列等,这些数据结构在STL中都已经实现好了,在算法设计中可以直接使用它们,如下图。
    在这里插入图片描述
    提示:以上示例容器的c++语言为前提,使用时要在代码头部加入命名空间 “using namespace std”

  2. 算法
    STL算法是用来操作容器中数据的模板函数,STL提供了大约100个实现算法的模版函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。
    STL算法部分主要由头文件、和组成。

  3. 迭代器
    STL迭代器用于访问容器中的数据对象。
    每个容器都有自己的迭代器,只有容器自己才知道如何访问自己的元素。
    迭代器像C/C++中的指针,算法通过迭代器来定位和操作容器中的元素。

    常用的迭代器示例:
    在这里插入图片描述

总结

算法设计与分析是计算机学科的必修课程,学算法就像修炼内功,对于后期的各个方向的研究都有着其作用。最后为最后为大家献上我老师推荐的书籍、网课与工具。
书籍:

  • 编程珠玑
  • 编程之美

中国mooc网课:

可视化算法网站:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值