首页 > 其他分享 >数据结构学习笔记-day2

数据结构学习笔记-day2

时间:2023-03-11 15:55:23浏览次数:39  
标签:语句 ++ 复杂度 day2 笔记 算法 时间 频度 数据结构

Day2

一、算法和算法分析

  1. 算法特性:有穷性、确定性、可行性、输入、输出。

2.算法的时间复杂度:(影响算法时间代价的最主要因素是问题规模)

                问题规模:是算法求解问题输入量的大小,是问题的本质表示,一般用n

代表。

     算法执行时间=所有(语句频度*语句执行时间)的总和

     语句频度:一条语句重复执行的次数。

3.算法的时间复杂度定义(用基本语句执行次数来度量算法工作)

    基本语句:指的是算法中重复执行次数和算法时间成正比的语句。

 

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

                       T(n)=O(f(n))

它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度。

           

数学符号O定义为:若T(n)和f(n)是定义在整数合集上的两个函数,则T(n)=O(f(n))表示存在正的常数C和n0,使得当n>=n0时都满足0<=T(n)<=Cf(n)。

4.算法的时间复杂度分析举例

   △找出所有语句中语句频度最大的那条语句作为基本语句,计算其语句频度得到f(n),取其数量级用符号“O”表示。

 

定理1:若f(n)=amn^m+a(m-1)n^(m-1)+……+a1n+a0是一个m次多项式,则T(n)=O(n^m)。

 

 

例1.

     {x++;s=0;}

两语句频度均为1,算法执行时间是与问题规模n无关的常数,所以算法的时间复杂度为T(n)=O(1),称为常量阶。

若算法执行时间不随问题规模n的增加而增长,算法语句频度就是某个常数,即使这个常数再大,算法的时间复杂度都为O(1).

 

 

           例2.

               For(i=0;i<=10000;i++){x++;s=0;}

               两基本语句的频度均为f(n)=n,所以T(n)=O(n)。(线性阶)

 

 

           例3.

               x=0;y=0;

               for(k=1;k<=n;k++)

                    x++;

               for(i=1;i<=n;i++)

                   for(j=1;j<=n;j++)

                      y++;

               频度最大语句y++语句频度为f(n)=n^2,所以T(n)=O(n^2)。(平方阶)

 

 

           例4.

                x=1;

                for(i=1;i<=n;i++)

                    for(j=1;j<=i;j++)

                        for(k=1;k<=j;k++)

                            x++;

                时间复杂度T(n)=O(n^3)。(立方阶)

 

 

          例5.

              for(i=1;i<=n;i=i*2){x++;s=0;}

              有2^f(n)<=n,则f(n)<=log2n,所以T(n)=O(log2n)。(对数阶)

 

 

         △常见时间复杂度按数量级递增排列:

           常量阶O(1)<对数阶O(log2n)<线性阶O(n)<线性对数阶O(nlog2n)<平方阶O(n^2)<立方阶O(n^3)<………k次方阶O(n^k)<指数阶O(2^n)

 

          随着n的增长,T(n)增长较缓慢的算法为较优算法。

      

  1. 某些算法其基本语句的频度不仅仅与问题规模n有关,还依赖于其他因素。

最好情况下的时间复杂度为最好时间复杂度;

最坏情况下的时间复杂度为最坏时间复杂度;

算法的平均时间复杂度为算法所有情况下算法计算量的加权平均值。

  1. 算法的空间复杂度

渐进空间复杂度:作为算法所需存储空间的量度,简称空间复杂度,也是问题规模n的函数,记:

                   S(n)=O(f(n))

分析算法实现所需的辅助空间即可,若辅助空间相对于输入数据而言是个常量,则称这个算法原地工作,辅助空间为O(1)。

 

详例见书本

标签:语句,++,复杂度,day2,笔记,算法,时间,频度,数据结构
From: https://www.cnblogs.com/k4fk4-shaw/p/17206225.html

相关文章

  • 用Maui META 3G找不到NVRAM_EF_SML_LID数据结构
    用MauiMETA3G查看锁网信息时,找不到NVRAM_EF_SML_LID的数据结构请在 nvram_editor_data_item.h 中找到以下部分:#ifdefined(__NVRAM_SML_IN_DB__)LID_BITVER_L......
  • Gin学习笔记--多数据格式返回请求结果
    一个完整的请求包含请求,处理请求和结果返回三个步骤,在服务器端对请求处理完成后,会将结果返回给前端。1.[]byte通过context.Writer.Write方法写入[]byte数据。Writer是gin......
  • go学习 day207 继承
    编写一个学生考试系统packagemainimport( "fmt")//编写一个学生考试系统typestudentstruct{ Namestring Ageint Scoreint}//将Pupil和Graduate......
  • linux笔记
    centos8.3镜像地址:https://mirrors.aliyun.com/centos/8.3.2011/isos/x86_64/一,安装1,制作安装盘文件打开centos7.iso本地目录选中U盘,“写入硬盘映像”,写入方式“USB-HDD+......
  • 入门笔记
    Unity  1.基本介绍1.1Unity的安装与汉化_引擎安装与基础操作安装时先安装UnityHub,再安装Unity.汉化在UnityHub的Installs中找到对应版本的Unity,左上角的设置按......
  • 我的c语言笔记
    1.进制转换二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。如:1010.1101=1×23 +0×22 +1×21 +0×20 +1×2-1 +1×2-2 +0×2-3 +1......
  • 新概念2册L55笔记(定语从句_关系副词、of+n.=adj.)
    L55notagoldmineInspiteofthis,manypeopleareconfidentthat'TheRevealer’mayrevealsomethingofvaluefairlysoon.ofvalue=ofn.=adj.单词理解课......
  • 操作系统学习笔记2-进程和线程
    2.进程和线程2.0引入2.0.1顺序执行特征顺序性封闭性:独占整机资源可再现性:只要在相同的环境与初始条件下,执行结果相同顺序执行的场合:单道批处理系统2.0.2并......
  • MOOC数据结构
    mooc摘记第一讲1.捕捉程序的运行时间2.解决问题方法的效率与①数据的组织方式②空间的利用效率③算法的巧妙程度第二讲PTA练习摘记01-复杂度1最大子列和问题最......
  • 代码随想录day24|回溯基础、77. 组合
    回溯法,一般可以解决如下几种问题:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的......