数据结构复杂度
文章目录
- 一. 数据结构前言
- 1.1 数据结构
- 1.2 算法
- 二. 算法效率
- 2.1 时间复杂度
- 2.1.1 T(N)函数式
- 2.1.2 大O的渐进表示法
- 2.2 空间复杂度
- 2.3 常见复杂度比较
- 2.3 复杂度算法题
- 1.
- 2.
一. 数据结构前言
1.1 数据结构
什么是数据结构呢?打开一个人的主页,有很多视频,这是数据(杂乱无章)。从上到下按照顺序整齐排列,这是在管理这些视频,即结构。
数据结构是计算机存储、组织数据的方式,指一种集合:【(相互之间存在一种或多种特定关系)的数据元素的】集合。
没有一种单一的数据结构对所有用途都有用,所以我们要学各式各样的数据结构,如:线性表、树、图、哈希等
1.2 算法
对数据进行 增删查改 就是计算,算法就是定义良好的计算过程。
数据结构和算法不分家。数据结构是载体,算法是工具(让我们可以更好地从载体里面取数据)
二. 算法效率
在下面的案例中,运行(调试)成功,但是提交失败了。失败原因是:超出时间限制。这就涉及到效率问题了。

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。
时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。(现在不太关注空间复杂度,因为如今的计算机储存容量很高)
2.1 时间复杂度
2.1.1 T(N)函数式
定义:在计算机科学中,算法的时间复杂度是一个函数式T(N),它定量描述了该算法的运行时间。
那为什么不能直接计算程序的运行时间,而要用时间复杂度来衡量程序的时间效率呢?
1.因为程序运行时间和编译环境 ,运行机器的配置都有关系,
(1)同一个算法程序,老编译器和新编译器都进行编译,在同样机器下运行时间不同;同一个算法程序,用一个低配置机器和高配置机器,运行时间也不同。
2.时间只能程序写好后测试,不能在写程序之前,通过理论思想计算评估。
T(N)函数式是用来计算程序的执行次数,假设每句指令执行时间基本一样,那么执行次数和运行时间(总时间)成等比正相关。这样就可以脱离具体的编译运行环境,使得执行次数就可以代表程序时间效率的优劣。
例一:

总共执行了T(N)=N ^ 2+2N+10次。
2.1.2 大O的渐进表示法
大O符号(Big O notation):是用于描述 函数渐进 行为的数学符号。
推导大O阶规则
1.时间复杂度函数T(N)中,只保留最高阶项。(当N趋近于无穷时,低阶项影响很小)
2.如果最高阶不是常数,则去掉最高阶的系数。(当N趋近于无穷时,系数影响很小)
3.如果T(N)中只有常数项,则用常数1取代所有加法常数。O(1)
根据上面的规则,例一的时间复杂度是O(1)。
例二:


1)若要查找的字符在字符串第一个位置,则:T (N) = 1
2)若要查找的字符在字符串最后一个位置,则:T (N) = N
3)若要查找的字符在字符串第一个中间位置,则:T (N) = 1/2N [去掉系数]
所以,strchr的时间复杂度分为:最好的情况O(1),中间的情况O(N),最坏的情况O(2)
例三:

T(N)=100,如果T(N)中只有常数项,则用常数1取代所有加法常数,所以Func2的时间复杂度为: O(1)。

例四:
void BubbleSort(int* a, int n)
{assert(a);for (int end = n; end > 0; --end){int exchange = 0;for (int i = 1; i < end; ++i){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);exchange = 1;}}if (exchange == 0)break;}
}

所以,BubbleSort的时间复杂度取最差情况为: O(N^2 )
例五:
void func5(int n)
{int cnt = 1;while (cnt < n){cnt *= 2;}
}

当n接近无穷大时,底数的大小对结果影响不大。因此,一般情况下不管底数是多少都可以省略不写,即可以表示为 log n【所以:func5的时间复杂度取最差情况为:O(log n)】
例六:

但并不是递归n次复杂度就是O(1),因为调用一次函数,它里面可能有循环,导致单次递归的时间复杂度不是O(1).
2.2 空间复杂度
空间复杂度不是程序占用了多少bytes的空间,因为常规情况每个对象大小差异不会很大,所以空间复杂度算的是变量的个数。
空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。
编译期间已经申请好的栈空间不用计算,空间复杂度主要通过(函数在运行时显示申请的额外空间)来确定。【栈空间:存储参数、局部变量、一些寄存器信息】
例一:
// 计算BubbleSort的空间复杂度?
void BubbleSort(int* a, int n)
{assert(a); //断言不需要额外申请空间for (int end = n; end > 0; --end){ //end一次int exchange = 0; //exchange一次 for (int i = 1; i < end; ++i){ i一次if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);exchange = 1;}}if (exchange == 0)break;}
}
函数栈帧在编译期间已经确定好了,只需要关注函数在运行时额外申请的空间。
BubbleSort额外申请的空间有exchange等有限个局部变量,使用了3个额外空间,因此空间复杂度为 O(1)
例二:
// 计算阶乘递归Fac的空间复杂度?
long long Fac(size_t N)
{if (0 == N)return 1;return Fac(N - 1) * N;
}
第一个函数栈帧Fac(N)在编译期间已经确定了,后面的Fac(N-1)到Fac(0)是在运行时才确定的。
Fac递归调用了N次,额外开辟了N个函数栈帧,每个栈帧使用了常数个空间
因此空间复杂度为: O(N)
2.3 常见复杂度比较

2.3 复杂度算法题

之前是循环K次将数组所有元素向后移动一位,时间复杂度不通过。O(N^2)
1.
申请新数组空间,先将后k个数据放到新数组中,再将剩下的数据挪到新数组中
void rotate(int* nums, int numsSize, int k)
{int newArr[numsSize];for (int i = 0; i < numsSize; ++i){newArr[(i + k) % numsSize] = nums[i];}for (int i = 0; i < numsSize; ++i){nums[i] = newArr[i];}
}
2.

void reverse(int* nums, int begin, int end)
{while (begin < end) {int tmp = nums[begin];nums[begin] = nums[end];nums[end] = tmp;begin++;end--;}
}
void rotate(int* nums, int numsSize, int k)
{k = k % numsSize;reverse(nums, 0, numsSize - k - 1);reverse(nums, numsSize - k, numsSize - 1);reverse(nums, 0, numsSize - 1);
}
相关文章:
数据结构复杂度
文章目录 一. 数据结构前言1.1 数据结构1.2 算法 二. 算法效率2.1 时间复杂度2.1.1 T(N)函数式2.1.2 大O的渐进表示法 2.2 空间复杂度2.3 常见复杂度比较 2.3 复杂度算法题1.2. 一. 数据结构前言 1.1 数据结构 什么是数据结构呢?打开一个人的主页,有很…...
MySQL基础篇
一、MySQL概述 MySQL是一个数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle推出的产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(关系数据库管理系统) ,…...
详解C++中的四种强制转换reinterpret_cast / const_cast / static_cast / dynamic_cast
目录 1.reinterpret_cast 2.const_cast 3.static_cast 4.dynamic_cast 例子 C中存在四种强制转换:reinterpret_cast / const_cast / static_cast / dynamic_cast 1.reinterpret_cast 格式 : reinterpret_cast<type_id> (expression) 用于类型…...
Word中加载Mathtype后粘贴复制快捷键(Ctrl+C/V)不能使用
操作环境 windows 11操作系统 word版本2021 mathtype版本7.4 这个问题只出现在word中,在excel和ppt中都不存在这个问题,而且之前在另一台电脑中使用word2016版本并没有这种问题的,然后网上搜了一下有不少人有这种问题,word直接取…...
Linux硬件-bios
作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 在Linux的服务器领域,我们能接触的到硬件其实挺多的,但是在这些硬件我们根据我们的需要去使用的时候…...
VisionPro二次开发学习笔记12-使用CogToolGroup控件进行图像检测
本示例演示了如何通过图像数据库使用 CogImageFileTool,并将其放入 CogToolGroup 中,对于数据库中的每个图像运行一次检测. 当用户按下 RunTest 按钮时,程序执行以下操作: 如果工具组中没有 CogImageFileTools,它将显…...
mfc140u.dll丢失的科学修复手段,简单又方便的mfc140u.dll修复
遇到 "缺失 mfc140u.dll 文件" 的提示时可能会让你疑惑,但不用担心。这个文件是 Microsoft Visual C 2015 的重要组成部分,对运行特定程序非常关键。幸运的是,解决这一问题并不难。本文将简单指导你如何恢复或修复丢失的 mfc140u.d…...
RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
文章目录 一、kafka和rabbitmq全面对比分析1.1 简介1.2 kafka和rabbitmq全面对比分析1.3 影响因素 二、RabbitMQ、Kafka主要区别2.1 详解/主要区别2.1.1 设计目标和适用场景2.1.2 架构模型方面2.1.3 吞吐量和性能2.1.4 消息存储和持久化2.1.5 消息传递保证2.1.6 集群负载均衡方…...
【案例35】销售订单公式问题导致系统宕机
问题现象 经过顾问反馈,发现系统现在出现卡顿,NCC一直在转圈。 问题分析 远程排查,发现在服务器从机上defalut-7发生了内存溢出,宕机。 生成了宕机日志。分析结果如下: 销售订单相关操作,vo太多了导致…...
编程-设计模式 4:建造者模式
设计模式 4:建造者模式 定义与目的 定义:建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。目的:该模式主要用于创建复杂对象时,这些对象的创建过程可能涉及多个步骤,…...
百度文心一言API调用,千帆大模型获取API Key和API Secret图解
百度文心一言大模型调用教程,获取文心一言API Key和API Secret的方法,码笔记mabiji.com告诉大家在百度智能云的千帆大模型平台创建应用,即可获取文心一言的API Key和API Secret,详细流程如下: 1、在百度智能云的千帆大…...
kafka下载|安装
1、下载kafka https://kafka.apache.org/downloads 2、安装kafka 解压下载的kafka安装包即可 tar -xvf kafka_2.13-3.7.0.tgz -C /usr/local/3、查看kafka目录 bin目录:存放了脚本 config目录:主要存放了配置文件...
贪心算法part03
134 加油站 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行…...
以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展
在科技日新月异的今天,AI技术如同一股不可阻挡的潮流,正深刻改变着我们的世界,尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者,树莓集团始终站在时代前沿,积极探索AI技术如何为数字媒体产业注入新活力。 在树…...
package.json的 和 的区别,以及|| 和 | 的区别
在 package.json 文件中的 scripts 字段里,&& 和 & 用于连接不同的命令,它们的区别在于命令执行的方式和效果: &&: 用于串联两个命令,第一个命令成功(退出码为 0)后&#x…...
Wireshark_DNS_v7.0
Wireshark_DNS_v7.0 一、 nslookup 前置 nslookup 是一个网络命令行工具,用于查询域名系统(DNS)中的域名解析记录。通过使用 nslookup,你可以获取某个域名的IP地址,或者获取与某个IP地址关联的域名信息。 查看域名…...
阿里云的CentOS系统上安装Docker
在阿里云的CentOS系统上安装Docker的详细步骤如下: 一、前置条件 确保系统内核版本:Docker要求CentOS系统的内核版本高于3.10。你可以通过执行uname -r命令来查看当前系统的内核版本。卸载旧版本的Docker(如果已安装)࿱…...
力扣面试经典100题
进阶,其他解法 数组 88. 合并两个有序数组 - 力扣(LeetCode) 1、按非递减顺序合并两个数组 从末尾开始,用while分没到两个数组头,到第一个数组头,到第二个数组头三种情况 class Solution { public:voi…...
python打怪练习
1. 求一个数的幂值 def mi(a, b):c afor i in range(b-1):a a * creturn aprint(mi(2, 4))2. 输出斐波那契数列 def feibonaqi(n):l []a 1b 1for i in range(n):l.append(a)l.append(b)a b ab a bprint(l)feibonaqi(5)3. 输出特定字典数据 keys [name, old, score…...
excel下载模板,0KB或者乱码问题
Sptingboot项目 — maven打包,云效,docker,k8s 场景 — 导出excel模板 问题 1.乱码 2.下载为0KB,打开没有数据 模板内容 测试代码 测试方法 方法过程结果问题原因将文件直接放到服务器使用接口下载数据正常,排除文件问题排…...
构建包容性界面:Vant Weapp无障碍设计全流程解析
构建包容性界面:Vant Weapp无障碍设计全流程解析 【免费下载链接】vant-weapp 轻量、可靠的小程序 UI 组件库 项目地址: https://gitcode.com/gh_mirrors/va/vant-weapp 一、设计理念:无障碍设计的核心价值 无障碍设计不是可选功能,而…...
5分钟搞定Node.js+ws搭建实时聊天室(附完整前端代码)
5分钟实现高互动WebSocket聊天室:Node.jsws全栈实战指南 从零构建实时通信系统 在数字化协作时代,实时通信已成为在线应用的基础能力。想象这样一个场景:团队远程协作时,成员间的消息需要毫秒级同步;在线教育平台中&am…...
重新定义零代码开发:H5-Dooring的反常识实践指南
重新定义零代码开发:H5-Dooring的反常识实践指南 【免费下载链接】h5-Dooring H5 Page Maker, H5 Editor, LowCode. Make H5 as easy as building blocks. | 让H5制作像搭积木一样简单, 轻松搭建H5页面, H5网站, PC端网站,LowCode平台. 项目地址: https://gitcode…...
怎样快速掌握Pine Script交易策略编程:5个高效上手的秘诀
怎样快速掌握Pine Script交易策略编程:5个高效上手的秘诀 【免费下载链接】awesome-pinescript A Comprehensive Collection of Everything Related to Tradingview Pine Script. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-pinescript 你是否曾…...
突破城通网盘限速限制:ctfileGet工具的直连解析解决方案
突破城通网盘限速限制:ctfileGet工具的直连解析解决方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在数字化时代,文件传输已成为日常工作与学习的基础需求。城通网盘作为国…...
告别‘Setup is running...’卡死!保姆级PowerBuilder 9.0安装避坑指南(附安全模式备用方案)
PowerBuilder 9.0安装全攻略:从卡死困境到流畅部署的终极解决方案 如果你曾经在安装PowerBuilder 9.0时遭遇过"Setup is running..."的无限卡死,那么这篇文章就是为你量身定制的救星。作为一款经典的企业级开发工具,PowerBuilder至…...
SDMatte企业级应用:结合数据库实现大规模图片素材管理
SDMatte企业级应用:结合数据库实现大规模图片素材管理 1. 引言:企业图片管理的痛点与机遇 电商公司每天要处理上千张商品图片,设计师团队经常加班到深夜手动抠图。市场部门需要快速调用不同版本的素材,却总在混乱的文件夹里迷失…...
Nano-Banana在.NET开发中的应用:智能业务逻辑实现
Nano-Banana在.NET开发中的应用:智能业务逻辑实现 将AI能力无缝集成到企业级应用中,让智能业务逻辑开发变得简单高效 1. 开篇:当.NET遇见AI智能业务逻辑 如果你正在开发.NET企业级应用,可能会遇到这样的场景:需要智能…...
YOLOv8鹰眼快速入门:三步完成图像上传、检测与结果查看
YOLOv8鹰眼快速入门:三步完成图像上传、检测与结果查看 1. 引言:为什么选择YOLOv8鹰眼目标检测 在计算机视觉领域,目标检测技术正变得越来越重要。无论是安防监控、自动驾驶还是工业质检,快速准确地识别图像中的物体都是核心需求…...
OpenClaw故障排查指南:Qwen3.5-9B-AWQ-4bit接口连接失败解决方案
OpenClaw故障排查指南:Qwen3.5-9B-AWQ-4bit接口连接失败解决方案 1. 问题背景与典型症状 上周我在本地部署Qwen3.5-9B-AWQ-4bit模型时,遇到了OpenClaw连接失败的棘手问题。明明模型服务已经启动,但OpenClaw始终报错"Model provider un…...
