算法系统学习-牛刀小试几个小Case(非递归算法)

简介: 该系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点

算法的空间复杂度


  1. 输入数据所占的空间
  2. 算法程序本身所占的空间
  3. 辅助变量所占的空间

拓展:

算法本身所占空间虽然和算法有关,但一般大小是相对固定的。所以在研究算法的空间复杂度时,只需分析除数据和算法本身之外的辅助空间即可。算法的空间复杂度一般指的是算法执行过程中所占的辅助空间大小,用S(n)表示,与时间复杂度一样,也可以用S(n)=O(n)表示,当然这里的n也是随着问题的规模增大,算法运行所在需存储量的增长率与g(n)的增长率相同(空间复杂度相对于时间复杂度,没那么重要)


牛刀小试


非递归算法分析

仅仅依赖于问题规模的时间复杂度,这类问题的操作都具有普遍性,也就是说对所有的数据均等价地处理。(这里问题较为容易)

Case1:

Temp =i;
i=j;
j=temp;
复制代码


分析:

以上三条单个语句的频度都是为1,该算法段的执行时间是一个与问题规模n无关的常数,所以算法的时间复杂度为常数阶 ,即T(n)=O(1);注意:只要不随问题规模n的增加而增长,即使算法中有上千条语句,时间复杂度仍然是一个比较大的常数而已。因此此类算法的时间复杂度为O(1)


Case2:

x=0;y=0;
for(k-1;k<=n;k++){
    x++;
    for(i=1;i<=n;i++){
      for(j=1;j<=n;j++){
            y++;
        }
    }
}
复制代码

分析:

当有若干个循环语句时,算法的时间复杂度是由于嵌套层数最多的循环语句中最内成循环的频度 f(n)决定的。因此该算法段的时间复杂度为 T(n)=O(n^3)


Case3:

x=1;
for(i=1;i<=n;i++){
      for(j=1;j<=n;j++){
           for(k=1;k<=n;k++){
               x++;
           }
        }
    }
复制代码

分析:

首先该算法的频度最大的语句是 x++;频度为3,从内层循环向外层循环分析该语句执行的次数为:[n(n+1)(2n+1)/6+n(n+1)/2]/2 因此结合时间复杂度的规律 T(n)=O(n^3/6+低次项)=O(n^3)

即时间复杂度为T(n)=O(n^3)


Case4:

i=1;
while(i<=n){
    i=i*2;
}
复制代码

分析:

设定以上while循环为k次,那么2^k 则2^k=n ,所以循环的次数为 log2n,因此算法的时间复杂度为O(log2n)


Case5(算法时间复杂度有时还会与输入实例的初始状态有关。):


在数值A【0,n-1】中查找给定值k的算法如下:
i=n-1;
while(i>=0 and A [i] <>k ){
    i=i-1;
    return i;
}
复制代码

分析:

该算法不仅仅与问题规模有关,还与输入的实例A的各元素取指以及k的取值有关

  1. 若A中没有与k相等的元素,这语句while的频度f(n)=n;这是最坏的情况
  2. 若A中的第一个元素等于k,这语句while的频度f(n)为常数1,这是最好的情况

在求平均情况时,一般地假设查找不同元素的概率P是相同的,则算法的平均复杂度为1/n(1+2+3+4+....+n)=n+1/n=O(n)

若查找不同元素的概率p不相同时,其算法复杂度就只能做近似分析或在构造更好的算法或存储结构后,做比较准确的分析。

目录
相关文章
|
7小时前
|
机器学习/深度学习 算法 网络架构
什么是神经网络学习中的反向传播算法?
什么是神经网络学习中的反向传播算法?
9 2
|
7小时前
|
算法 网络协议
【计网·湖科大·思科】实验三 总线型以太网的特性、集线器和交换机的区别、交换机的自学习算法
【计网·湖科大·思科】实验三 总线型以太网的特性、集线器和交换机的区别、交换机的自学习算法
5 1
|
7小时前
|
机器学习/深度学习 算法
应用规则学习算法识别有毒的蘑菇
应用规则学习算法识别有毒的蘑菇
|
7小时前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
7小时前
|
机器学习/深度学习 算法 调度
基于改进鲸鱼优化算法的微网系统能量优化管理matlab
基于改进鲸鱼优化算法的微网系统能量优化管理matlab
|
7小时前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
7小时前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
|
7小时前
|
机器学习/深度学习 算法
m基于深度学习的QPSK调制解调系统频偏估计和补偿算法matlab仿真
MATLAB 2022a中展示了基于深度学习的QPSK调制解调系统频偏估计和补偿算法仿真结果。该算法运用神经网络模型实时估计并补偿无线通信中的频率偏移。QPSK调制将二进制信息映射到四个相位状态,解调通常采用相干解调。深度学习算法通过预处理、网络结构设计、损失函数选择和优化算法实现频偏估计。核心程序生成不同SNR下的信号,比较了有无频偏补偿的误码率,显示了补偿效果。
12 1
|
7小时前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
7小时前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。