当前位置: 首页 > article >正文

数据结构算法和算法分析

算法的描述:

1:自然语言:英语,中文

2:流程图:传统流,NS流程图

3:伪代码:类语言,类c语言

4:程序代码:c语言程序,java语言程序

算法:

       是解觉问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法

程序

       是用某种程序设计语言对算法的具体实现。

程序=数据结构+算法

算法的定义

       1:有穷性

       2:确定性

       3:可行性

       4:输入,输出。

算法设计的要求

     1:正确性

     2:可读性

     3:健壮性

     4:高效性。

若是以上都要求:则主要考虑算法的效率

    时间效率:算法所耗费的时间

    空间效率:算法所耗费的存储空间

算法的时间效率度量:两种

        事后统计:将算法实现测算其时间和空间开销

        事前分析:对算法所耗资源的一种估算方法

一个算法运算时间:

          每条语句频率(每条语句执行的次数)* 该语句执行一次所要的时间

          算法的执行时间大致上等于其所有语句执行时间的总和。

算法的时间复杂度定义:

          一般情况下,算法中基本语句重复执行的次数是问题规模n的每个函数f(n),算法的时间量度记作:T(n)=O(f(n))

算法的时间复杂度分析:

        1:找出所有语句中语句频率最大的那条语句作为最基本语句,

        2:计算基本语句的品读得到问题规模你的每个函数f(n)

        3:取其数量级用符号“O”表示即可。

若是f(n)是一个m次多项式,则T(n)=O(n的m次方)。

平方实例:

      (1) x=0;y=0;       

      (2) for (k=1;k<=n;k++)      //执行n次

      (3)      x++;                        //执行n次

      (4)  for(i=1;i<=n;i++)           //执行n次

      (5)     for(j=1;j<=n;j++)         //执行n次

      (6)          y++;                       //执行n*n次

所以综上所述频率最大的语句是(6),其频道为f(n)=n*n,所以该算法的时间复杂度为:T(n)=O(n*n),称为平方阶。

算法空间复杂度:

关于算法的存储空间要求

S(n)=O(f(n)),其中n为问题的规模(或大小)

例题(二):

i=1;

while(i<=n)

    i=i*2;

以上若是执行一次为2,两次为2的平方,三次为2的3次方,若是循环x次则为:i=2的x次方

因为:i<=n , 所以:2的x次方<=n , 所以 x<=log以2为底n的对数

即f(n)<=log以2为底n的对数。最大值:f(n)=log以2为底n的对数。

T(n)=O(log以2为底n的对数)


http://www.kler.cn/news/302729.html

相关文章:

  • 数据结构第二周做题总结_顺序表
  • [000-01-008].第05节:OpenFeign高级特性-日志打印功能
  • C语言宏参数的使用
  • 【排序算法】之基数排序
  • 运维学习————GitLab的搭建和使用
  • 数组去重、数组扁平化
  • 解锁数字信任之门:SSL证书的安全之旅
  • uniapp业务实现
  • MATLAB-基于高斯过程回归GPR的数据回归预测
  • 解决CORS问题的两种方式——Django+vue
  • Linux中的scp 如何使用
  • 【STM32 Blue Pill编程】-定时器输入捕获与频率计数
  • 总结拓展九:SAP数据迁移(2)
  • Oracle Linux 8.10安装Oracle19c(19.3.0)完整教程
  • 视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践
  • HarmonyOS开发5.0【应用程序包】
  • AI大模型的架构演进与最新发展
  • git解决同时编辑一个文件的冲突
  • 设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)
  • 【Python】Python办公自动化案例(一):对比两个word文档并找出不同
  • Vue的slot插槽(默认插槽、具名插槽、作用域插槽)
  • 零宽字符应用场景及前端解决方案
  • 面试真题 | web自动化关闭浏览器,quit()和close()的区别
  • SpringBoot之基础Web开发
  • ubuntu22安装docker
  • iPhone 16正式亮相:5款配色 群青色抢眼
  • C++ 中的默认删除特征:管理资源与防止意外拷贝
  • 【通俗理解】二项分布的均值与方差——从成功与失败的概率看分布
  • python如何加速计算密集型任务2?
  • 【C#】DrawCurve的用法