大O算法复杂度表示

article/2025/8/22 7:56:47
序言:算法的时间复杂度和空间复杂度都是用“ 大O表示法” 来表示的。其中O是个常量。

常见的 排序算法时间复杂度

                                              冒泡排序、插入排序、希尔排序、选择排序的时间复杂度是O(n^2);

                                              快速排序的时间复杂度是 O(n * log n);

                              空间复杂度:

                                              冒泡排序、插入排序、希尔排序、选择排序的空间复杂度是O(1);

                                              快速排序的空间复杂度是 O(log n);

常见的 查找算法的时间复杂度:

                        线性结构的查找的时间复杂度,如 二分查找(用于已经排好序的数据,如已序的数组);O(n)

                        非线性结构的查找的时间复杂度,如 二叉查找树 ;O(log n)

 

排序类别  时间复杂度  空间复杂度  稳定 

1 插入排序  O(n2)              O(1)         √ 

2 希尔排序  O(n2)              O(1)         × //Shell(希尔)排序是基于插入排序的,时间效率比插入、选择、冒泡高,但又比快速排序低点;

3 冒泡排序 O(n2)               O(1)         √ 

4 选择排序  O(n2)              O(1)         ×  

5 快速排序  O(Nlogn)      O(logn)     × 

6 堆排序  O(Nlogn)          O(1)          × 

7 归并排序 O(Nlogn)        O(n)          √ 

 

冒泡排序、插入排序、归并排序是稳定的,算法时间复杂度是O(n ^2);

选择排序、快速排序、堆排序、希尔排序都是不稳定的; 


一、 时间复杂度定义

定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数T(n)称为这一算法的“时间复杂性”。

当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。

二、大O表示法

我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。此外,一个问题本身也有它的复杂性,如果某个算法的复杂性到达了这个问题复杂性的下界,那就称这样的算法是最佳算法。

“大O记法" :在这种描述中使用的基本参数是n,即问题实例的规模,把复杂性或运行时间表达为n的函数。这里的“O”表示量级(order),比如说“二分检索是O(logn)的”,也就是说它需要“通过logn量级的步骤去检索一个规模为n的数组”记法O ( f(n) )表示当n增大时,运行时间至多将以正比于f(n)的速度增长。

这种渐进估计对算法的理论分析和大致比较是非常有价值的,但在实践中细节也可能造成差异。例如,一个低附加代价的O(n2)算法在n较小的情况下可能比一个高附加代价的O(nlogn)算法运行得更快。当然,随着n足够大以后,具有较慢上升函数的算法必然工作得更快。

O(1)
Temp=i;i=j;j=temp;                     
以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

O(n^2)
2.1.交换i和j的内容
     sum=0;                (一次)
     for(i=1;i<=n;i++)      (n次)
        for(j=1;j<=n;j++)(n^2次)
          sum++;       (n^2次)
解:T(n)=2n^2+n+1 =O(n^2)

2.2.   
    for (i=1;i<n;i++)
    {
        y=y+1;        ①   
        for (j=0;j<=(2*n);j++)    
           x++;        ②      
    }          
解:  语句1的频度是n-1
         语句2的频度是(n-1)*(2n+1)=2n^2-n-1
          f(n)=2n^2-n-1+(n-1)=2n^2-2
         该程序的时间复杂度T(n)=O(n^2).         

O(n)                                                           
2.3.
    a=0;
    b=1;                     ①
    for (i=1;i<=n;i++)②
    {  
      s=a+b;    ③
       b=a;     ④  
       a=s;     ⑤
    }
解:  语句1的频度:2,        
          语句2的频度:n,        
         语句3的频度:n-1,        
         语句4的频度:n-1,    
         语句5的频度:n-1,                                  
          T(n)=2+n+3(n-1)=4n-1=O(n).

 O(log2n )
2.4.
     i=1;       ①
    while (i<=n)
       i=i*2;②
解:语句1的频度是1,  
         设语句2的频度是f(n),  则:2^f(n)<=n;f(n)<=log2n    
         取最大值f(n)= log2n,
          T(n)=O(log2n )
O(n^3)
2.5.
    for(i=0;i<n;i++)
    {  
       for(j=0;j<i;j++)  
       {
          for(k=0;k<j;k++)
             x=x+2;  
       }
    }
解:当i=m, j=k的时候,内层循环的次数为k当i=m时, j可以取0,1,...,m-1 ,  所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次所以,i从0取到n,则循环共进行了: 0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/6所以时间复杂度为O(n^3).
                                   
我们还应该区分算法的最坏情况的行为期望行为

快速排序的最坏情况运行时间是O(n^2),但期望时间是O(nlogn)。通过每次都仔细地选择基准值,我们有可能把平方情况(即O(n^2)情况)的概率减小到几乎等于0。在实际中,精心实现的快速排序一般都能以(O(nlogn)时间运行。


三、图例

数据结构操作:


数组排序算法:


图操作:


堆操作:


大o复杂度图表:



http://chatgpt.dhexx.cn/article/yx4a3JA9.shtml

相关文章

数据结构学习笔记:算法复杂度的度量之“大O记号”

分析算法复杂度的非常重要的方法&#xff1a;大O记号&#xff01;&#xff01; 下面来让我们看一下到底什么是大O记号 举个例子&#xff1a; 用一个直尺去评价算法复杂度&#xff0c;上面的刻度就相当于大O记号&#xff0c;我们不一定要一味的强调刻度的精细程度&#xff0c;没…

算法复杂度渐进符号(大O、Ω和θ)的个人理解

做软考习题时&#xff0c;碰到了这样的一道题&#xff1a; 关于算法复杂度渐进符号&#xff08;O、Ω、θ&#xff09;&#xff0c;详细解释可参考&#xff1a; 【双语字幕】什么是算法复杂度渐进符号&#xff1f;阿布老师算法课11 这里节选总结了视频的重点内容&#xff0c;…

数据结构考研:大O表示法最浅显易懂且详细深入的解释及与小o表示法的区别(十分钟必懂)

大O表示法的背景 作为软件工程专业的学生&#xff0c;在我们学习数据结构的时候&#xff0c;总是会碰见对各种算法时间复杂度和空间复杂度的大O表示法的描述。我们只是将信将疑的用着&#xff0c;并不知道大O表示法的准确含义&#xff0c;今天博主李同学在查阅各方资料后进行详…

算法的时间复杂度(大O表示法)

首先我们先来看个例子, 我想找个1&#xff5e;100的数字&#xff0c;你的目标是以最少的次数猜到这个数字。你每次猜测后&#xff0c;我会说小了、大了或对了。下面我们来看下两种简单的方法&#xff08;方法有很多种&#xff09;&#xff0c;再来引入算法的运行时间&#xff0…

算法时间复杂度分析——大O、大Ω、大θ、小o,小ω

最近开始转战传统算法分析的研究工作了&#xff0c;重新拾起以前学过的一些内容。 目录 一、概述 二、对常见的Ο和Ω进行分析 2.1 大O表示法 2.2 大Ω表示法 三、P问题&#xff0c;NP问题&#xff0c;NP-hard问题&#xff0c;NPC问题 3.1 P问题和NP问题 3.2 NPC问题和N…

复杂度分析(大O表示法)

复杂度分析 前文提要 本文完完全全引用极客时间的文章《数据结构与算法之美》&#xff0c;作者王争。 数据结构是作为程序猿绕不过的一道坎&#xff0c;所以萌生了学习的想法&#xff0c;试读了几篇文章后发现讲的很好&#xff0c;也有很多人订阅&#xff0c;于是不回头的走…

big O notation - 大 O 表示法

big O notation - 大 O 表示法 Big O notation (with a capital letter O, not a zero), also called Landau’s symbol. 大 O 表示法 (大写字母 O&#xff0c;不为零)&#xff0c;也称为 Landau’s symbol。 Big O notation is a mathematical notation that describes the l…

算法分析:大O符号/大Ω符号/大Θ符号/小o符号/小w符号

感谢作者分享&#xff0c;原文链接&#xff1a;http://blog.csdn.net/u012816041/article/details/49888631 大O&#xff0c;渐进表示法&#xff0c;接下来我尝试用最简单的方式进行说明。 学习算法我经常听到这个词汇&#xff0c;我一开始很难理解&#xff0c;什么鬼&#xff…

算法分析—大O、大Ω、大θ

前言 在算法的学习中&#xff0c;最开始便是要学习算法的分析。学习算法分析时&#xff0c;我们便会接触到这么几个符号&#xff1a;大O、大Ω、大θ&#xff0c;常常让人难以理解。 在通常的算法分析时&#xff0c;我们可以明白&#xff0c;在输入规模较小&#xff0c;各种算…

算法分析——大O标记法

目录 一. 运行时间 二. 大O 表示法 2.1 示例 三. 总结 五. 扩展 一. 运行时间 每次介绍算法时&#xff0c;我们都将讨论其运行时间。一般而言&#xff0c;应选择效率最高的算法&#xff0c;以最大限度地减少运行时间或占用空间。 可是&#xff0c;如果代码都还没有运行&a…

Oracle数据库查询语句

1 oracle数据库查询表的所有数据–select * from 表名;&#xff08;* 代表所有&#xff09; 2 oracle数据库查询表中指定字段的值–select 字段名1&#xff0c;字段名2&#xff0c;……from 表名&#xff1b; 3 oracle数据库往表中添加数据信息–&#xff08;添加信息使用inser…

Access数据库的查询

内容很简单&#xff0c;我搭建access数据库就是为了简单测试access语句的对错&#xff0c;以及学习access数据库的语法。 1.打开access数据库。 2.主页->空数据库 3.创建数据 4.创建->查询设计 5.【显示表】中的【表】【查询】【两者都有】&#xff0c;都可以。点击添加…

数据库查询语句SQL中like、%、-的区别

数据库查询语句SQL中like、%、-的区别 数据库查询语句SQL中like、%、-的区别 %百分号通配符:表示任何字符出现任意次数(可以是0次) SQL 语句选取 name 以字母 "k" 结尾的所有客户: SELECT * FROM Websites WHERE name LIKE %k; 执行输出结果: 下划线通配符:表示…

使用oracle数据库分页查询语句,各种数据库的分页查询语句

各种数据库的分页查询语句 1.oracle数据库分页select * from (select a.*,rownum rc from 表名 where rownum=endrow) a where a.rc=startrow2.DB2数据库分页Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by 列名) as 各种数据库的分页…

解决数据库查询语句where条件为空查询全部数据,不为空按照条件查询

问题&#xff1a;在用查询语句查询电影类型&#xff0c;电影年代&#xff0c;电影区域的时候&#xff0c;要返回全部的数据&#xff0c;就是where条件为空&#xff0c;返回所有的数据 解决&#xff1a;select * from 表 where (字段条件 or 条件‘’) 代码&#xff1a; const …

数据库内外联接查询语句

建立如下表并插入数据&#xff1a; create table s(sid varchar2(10) primary key,sname varchar2(50),sage number(30));insert into s values(111,小红,20);insert into s values(222,小红,20);insert into s values(333,小红,20);insert into s values(555,小红,20);create…

SQL Server数据库的查询语句

select version; #查询数据库的版本 select servername; #查询服务名 select host_name(); #查询主机名&#xff0c;如果是用navicat远程连接的话&#xff0c;主机名是本地的名字 select db_name(); #查询当前数据库名 select db_name(1); #查询第一个数据库名 select db_name(…

数据库去重语句整理

示例数据 Test表中有id和name两个字段&#xff0c;id各不相同&#xff0c;name有重复。 现在需要去除重复的数据&#xff0c;只保留重复的里面id最大的数据。 一、去重语句一(通用型)&#xff1a; SELECT * FROM test c where c.id in( SELECT b.id from test a,test b wher…

数据库查询中的in语句

数据库查询中的in语句 在数据库中也有运算符&#xff0c;比如<、>、、之类的&#xff0c;还有一些or、and之类的&#xff0c;下面我们来学习关于in语句的方法&#xff0c;in在数据库中到底起怎样的作用&#xff1f; 如上图&#xff0c;我通过where语句限制年龄&#xff0…

数据库查询语句(二)-条件查询

文章目录 前言一、单条件查询二、多条件查询 前言 1. 熟练掌握where子句各类运算符的使用 2. 熟练掌握多条件查询and、or的使用 一、单条件查询 在SQL中&#xff0c;insert、update、delete和select后面都能带where子句&#xff0c;用于插入、修改、删除或查询指定条件的记…