【第一次学习:算法概述及复杂度分析】


算法概述

1.1概念:

简单理解为:算法是解决问题的方法步骤的描述。即“一个算法,就是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型问题的运算序列。”

1.2算法特性:

  1. 输入
  2. 输出
  3. 确定性
  4. 有限性
  5. 可行性

1.3程序=算法+数据结构

1.4算法描述方式

  • 自然语言
  • 程序流程图
  • 程序设计语言(代码)
  • 伪代码

1.5算法设计过程

  1. 理解问题(抽象成高中的题目)
  2. 问题建模(找到规律总结成类似高中公式)
  3. 算法设计(转换成算法实现步骤)
    例子
    1.求a1到an共n个连续整数的和→充分理解问题:起始数字a1,步长为1,结束数字为n,目标为a1+(a1+1)+(a1+2)……+an的值。
    2.问题建模:可以直接用目标表达式进行重复加法计算,或者整理一下得到sum=na1+n(n-1)/2,或者等差数列求和公式。
    3.算法设计:
    ①输入a1,an,n;
    ②计算连加和sum
    ③返回结果sum
    ④检验算法正确性
    ⑤算法分析用等差数列只要加乘除各一次,耗时为O(1)。

1.6算法分析

1.概念

①算法分析概念:对算法所需计算机资源的量(时间复杂度和空间复杂度)的分析。
②问题规模n:输入的数据量大小。对于不同的算法,定义也不相同。例如在这里插入图片描述

2.时间复杂度(O(n))

容易和T(n)混淆,他们是f(n)和n的关系,T(n)是运行时间。例如T(n)=f(O(n))=f(2n2)=4n2;看下面就懂了 具体的式子在经过求极限简化(渐近时间复杂性)后得到式子f(n),则将O(f(n))表示为时间复杂度→书面语为:“算法分析中,算法的时间复杂度和算法的渐近时间复杂性往往不加区分,并常用后者时间复杂性来对算法的时间复杂度进行衡量”

T(n)=3n3+5n→T*(n)=n3→时间复杂度T(n)=O(n3)
运行时间长短:O(1)<O(logn)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

比较了多少次就是多少,例如二分查找:假如有9个数据最好情况一次就中,则为O(1),最差比较三次后直到right=left,即为O(logn=log29=3)。所以综上所述为logn

粗暴一点就是一个for循环就是n,嵌套for循环就是n2.

3.空间复杂度(S(n))

算法在运行过程中所占用储存空间的大小

算法本身(代码长度成正比)+输入输出(问题决定)+运行过程中所需的辅助变量所占用的储存空间(算法不同而不同)。所以由辅助空间决定空间复杂度

4.渐进复杂性(T(n)的表达式忽略常数和低阶项)

上面的时间复杂度其实求的是每一行代码的,例如二分查找的logn就是其中执行次数最多的mid=right+left;为什么没有其它代码的呢?因为对于大规模的n来说,我们采用求极限思想,保留最大的,其它例如运行时间Ta=10n3+2n2+8,我们只要T*a=n3即可。我们***常用渐进复杂性衡量时间复杂度***

5.渐进意义下的记号

渐进上界/下界/精确界记号(额,实际计算中没看出用在那了。难道是“采用渐近符号表示T(n)”?)
6算法的运行时间T(n)建立依据

在这里插入图片描述
在这里插入图片描述

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
深度学习算法复杂度分析主要关注模型的计算和存储资源的需求。深度学习算法中最常见的复杂度分析是针对神经网络模型的计算复杂度和存储复杂度。 1. 计算复杂度:计算复杂度主要关注前向传播和反向传播过程中的计算量。前向传播是指将输入数据通过神经网络进行推理或预测的过程,而反向传播是指根据预测结果和实际标签进行参数更新的过程。 前向传播过程的计算复杂度取决于网络的层数、层的神经元数量和神经元之间的连接情况。常见的计算复杂度表示方法是浮点运算次数(FLOPs)或乘法-加法运算次数(MACs)。 反向传播过程的计算复杂度也与网络的层数、神经元数量和连接情况相关,但通常比前向传播复杂度高,因为需要计算梯度并更新参数。反向传播的计算复杂度通常与前向传播的计算复杂度相当。 2. 存储复杂度:存储复杂度主要关注模型参数和中间结果的存储需求。模型参数是指神经网络中的权重和偏置,而中间结果是指在前向传播和反向传播过程中产生的临时变量。 模型参数的存储需求取决于网络的层数和每层的神经元数量。通常,模型参数是以浮点数形式存储的,所以存储复杂度可以通过参数数量和每个参数的字节数来估计。 中间结果的存储需求取决于网络的层数、每层的神经元数量和数据类型。在深度学习中,中间结果通常是以张量(tensor)形式存储的,所以存储复杂度可以通过中间结果的维度、数据类型和字节数来估计。 需要注意的是,深度学习算法复杂度分析并不像传统算法那样严格,因为深度学习算法中存在许多不确定性因素,如批量大小、激活函数、优化器等。因此,在实际应用中,更常见的做法是通过实验或模型推理工具来估计深度学习算法复杂度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值