【数据结构】算法的时间复杂度与空间复杂度

embedded/2024/9/23 8:15:02/

计算机考研408-数据结构笔记本之——第一章 绪论

1.2 算法和算法评价

1.2.2 算法效率的度量

算法效率的度量是通过时间复杂度和空间复杂度来描述的。

1.时间复杂度

时间复杂度T(n)是事前预估算法时间开销T(n)问题规模 n 的关系(T 表示 “time”),通常将算法中基本运算的执行次数的数量级作为该算法的时间复杂度,记为:T(n) = O(f(n)) 

2.计算时间复杂度

以【算法表白——爱你n遍】举例。

算法1中,语句频度: ① ——1次 ② ——3001次 ③④ ——3000次 ⑤ ——1次 (注:一个语句的频度是指该语句在算法中被重复执行的次数),易得:问题规模 n = 3000,时间开销T(n) = 1 + 3001 + 3000 + 1 = 3n + 3

这样就简单计算出了算法1的T(n).

当遇到复杂的算法时,这样的粗暴计算难免会很麻烦,是否可以忽略表达式某些部分?

答:可以。如同上面提到的,只考虑阶数,用大O记法 O(f(n)) 来表示T(n) ,下图是一个简单的演示:

简单总结就是,只取最高阶项,并视最高阶项系数为1.  并遵循下列两个规则:

那么,如何知道哪一项是算式中的最高阶呢?请记住下表(可以用求极限的方法来判断,平常使用记住即可):(口诀:从小到大,常对幂指阶

但是,如果有好几千行代码,难道依然要像算法1一样一行一行看,计算每一行的语句频度么?

答:当然不。只需考虑最深层循环的循环次数与 n 的关系即可。

如下图:

结论1:顺序执行的代码只会影响常数项,可以忽略

结论2:只需挑循环中的一个 基本操作分析它的执行次数与 n 的关系即可

结论3:如果有多层嵌套循环,只需关注最深层循环循环了几次

一眼不能看出最深层循环频度时,可像下图一样,设置一个x求时间复杂度

当时间复杂度如算法4一样受概率或其他因数影响大小时,我们将最坏情况时间复杂度视为该算法时间复杂度。

补充:三种时间复杂度


http://www.ppmy.cn/embedded/90579.html

相关文章

C语言第13篇

1.下面程序是计算n个数的平均值,请填空.______ #include<stdio.h> void main( ) { int i,n; float x,avg0.0; scanf("%d",&n); for(i0;i<n;i) { scanf("%f",&x); avgavg______; } avg________; printf("avg%f\n",avg); } A) …

000009 - Hadoop序列化

Hadoop序列化 1. 序列化概述2. 自定义 bean 对象实现序列化接口&#xff08;Writable&#xff09;3. 序列化案例3.1 需求3.2 需求分析3.3 代码实现 1. 序列化概述 1&#xff09;什么是序列化 序列化就是把内存中的对象&#xff0c;转换成字节序列&#xff08;或其他数据传输协…

软件测试基础概念

前言&#x1f440;~ 上一章我们介绍了什么是软件测试&#xff0c;今天我们讲解测试的一些基础概念 软件测试的生命周期 如何描述一个bug 如何定义bug的级别 bug的生命周期&#xff08;重要&#xff09; 和开发产生争执怎么办&#xff1f; 如何开始第一次测试&#xff1f…

分布式存储Raft

文章目录 前言一、记录各个类作用1.raftRpcUtil类2.Persister类3.ApplyMsg类 二、待续 前言 分布式存储Raft 一、记录各个类作用 1.raftRpcUtil类 RaftRpcUtil 类在这段代码中扮演着一个客户端的角色&#xff0c;它负责与 Raft 集群中的其他节点进行 RPC 通信。这个类通过维…

C++面试基础算法的简要介绍

C是一种广泛使用的编程语言&#xff0c;尤其在算法和数据结构的实现中占据重要地位。以下是对C基础算法的一些介绍&#xff0c;涵盖了排序、查找、搜索算法以及基本的遍历算法等方面。 排序算法 快速排序&#xff08;Quick Sort&#xff09; 快速排序是一种分而治之的排序算法…

Linux--应用层协议HTTP

HTTP协议 HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最为广泛的一种网络协议&#xff0c;它基于TCP/IP通信协议来传送数据&#xff0c;规定了浏览器与服务器之间数据传输的规则&#xff0c;确保数据能够在网络源头…

Navicat—如何查看历史日志

第一种方式&#xff1a; 连接mysql&#xff0c;点击工具-历史日志 或者ctrlh快捷键也是可以的 第二种方式&#xff1a; 点击左上角的【工具】&#xff0c;选择历史日志选项&#xff0c;也是一样的。 第三种方式&#xff1a; 正常情况下&#xff0c;为了保证数据库的性能&a…

第1天:Python基础语法(五)

正文&#xff1a; 在之前的文章中&#xff0c;我们已经学习了Python的基本语法集合和集合的一些常用操作。 在本篇文章中&#xff0c;我们将继续学习其他类型 字符串格式化 使用操作符%s来实现 ➢ 几个%s就几个变量 ➢ 超过一个变量时&#xff0c;需要用元组%&#xff08;…