数据结构学习笔记(二)

本文深入探讨了算法的基础概念,包括算法的定义、特性以及设计目标。重点阐述了好算法应具备的正确性、可读性、健壮性、高效率和低存储需求。同时,详细解释了时间复杂度和空间复杂度作为衡量算法效率的重要指标,通过实例解析如何计算和简化时间复杂度表达式,并分析了不同情况下的空间复杂度。此外,文章还提供了多个练习题以加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

算法基本概念知识图谱:
在这里插入图片描述

算法是什么

  • 程序=数据结构+算法——先设计数据结构,在根据实际问题需求,设计相应的算法,形成一个程序。
  • 数据结构:现实世界问题信息化(逻辑结构),信息存储入计算机(存储结构),实现对数据结构的基本操作(数据运算)
  • 算法:处理信息,解决实际问题

算法特性

  1. 有穷性
    在这里插入图片描述
  2. 确定性
    在这里插入图片描述
  3. 可行性、输入以及输出
    在这里插入图片描述

好算法特质——设计算法的追求目标

  1. 正确性——正确解决问题
  2. 可读性——可让他人能够理解,无歧义描述解决问题步骤
  3. 健壮性——对非法输入做出反应或处理,要有检测非法输入的逻辑
  4. 高效率——执行速度快,时间复杂度低
  5. 低存储量需求—— 不费内存,空间复杂度低

算法效率度量

时间复杂度:(低时间复杂度很重要,算法性能将在问题规模很大时体现)
在这里插入图片描述
空间复杂度:
在这里插入图片描述

时间复杂度

  • 评估算法时间开销要注意:
    在这里插入图片描述
  • 时间复杂度——在算法运行之前,预估算法时间开销问题规模之间的关系

在算时间复杂度时会有两个问题,问题如下:

  1. 简化时间复杂度表达式:——只考虑阶数,用大O记法表示
    当问题规模足够大时,可以只考虑表达式中阶数最高部分
    在这里插入图片描述
    在这里插入图片描述
    数量级之间的比较关系如下(常对幂指阶):
    在这里插入图片描述
  2. 多行代码该怎么考虑时间复杂度表达式:——只考虑最深层循环次数与问题规模间关系
    在这里插入图片描述
  • 下面将展示几个计算时间复杂度的练习题:
    练习1
    在这里插入图片描述
    练习2
    在这里插入图片描述

空间复杂度

  • 程序运行时,将代码装入内存中,当算法所需内存空间为常量时,叫算法原地工作。下面将介绍几个因变量导致的内存开销的空间复杂度计算例子:
    例子1
    在这里插入图片描述
    例子2
    在这里插入图片描述
    例子3
    在这里插入图片描述
    例子4
    在这里插入图片描述
  • 一般程序代码在内存中占据的空间是固定的,与问题规模无关;计算空间复杂度时,主要要注意的是分配的变量是否与问题规模有关系,一个好的数据结构将帮助程序节省空间复杂度。
  • 除了变量会带来内存开销外,函数递归也会带来内存开销。下面将介绍几个函数递归方面的空间复杂度计算例子:
    例子1:函数递归中,内存开销主要与递归深度有关联。在这个例子中,每一层函数的变量所占用的空间大小一样,问题规模则与递归深度有关。
    在这里插入图片描述
    例子2:在这个例子中,每一层递归函数数组占用空间都是变化的,变量存储空间随着递归深度而改变。问题规模不仅和变量有关,还和递归深度有关。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值