数据结构(一) 绪论

一. 时间复杂度:

        (1)定义:

               时间复杂度是衡量算法执行时间随输入规模(通常用n表示)增长的变化趋势的指标,时间复杂度用O符号表示

                用于描述算法在最坏情况下或平均情况下的时间需求

                时间复杂度关注的是操作次数的增长率,而非具体执行时间

        常见的时间复杂度由小到大依次为:

                O(1) < O(log2n) < O(n) < O(nlog2n) < O(n²) < O(n³) < ...... < O(2^n) < O(n!)

        Example:

                1.若一个算法需要执行 3n² + 2n + 1 次操作,其时间复杂度为O(n²),因为最高阶项n²主导增长趋势,常数系数和低阶项容易被忽略

                2. O(1): 访问数组中的某个元素

                3. O(n): 遍历数组求和

int Sum_Array(int num[]){int sum=0;for(int i=0; i<N; i++){sum += num[i];}return sum;
}

        输入规模为n, for循环执行n次,时间复杂度为O(n)

                4.O(n²) : 冒泡排序

void bubbleSort(int arr[], int n){for(int i=0;i<n-1;i++){for(int j=0;j<n-i-1;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}
}

        for循环执行次数为n(n-1)/2,时间复杂度为O(n²)                   

        (2)如何判断时间复杂度:

                1.逐层分析代码:

                        单层循环 -> O(n)

                        双层循环 -> O(n²)

                        分治算法(归并排序) -> O(nlogn)

                2.注意循环终止条件:

                        若循环变量每次乘以2(如 i *= 2),循环次数为 O(log⁡n)

                3.递归:

                        递归调用次数和输入规模有关,斐波那契数列递归的时间复杂度为O(2^n)

二. 空间复杂度:

        (1)定义:

                空间复杂度衡量算法运行过程中临时占用的存储空间大小,同样用大 OO 符号表示。

                包括算法显式内存(变量和数据结构)和隐式占用栈空间(递归调用)

        Example:

                1.若算法需要额外创建一个长度为n的数组,则空间复杂度为O(n)

                2.O(1): 交换两个变量的值

void swap(int* a, int* b){int temp = *a;    // 仅使用一个临时变量*a = *b;*b = temp;
}

                3.O(n) : 归并排序

                4.递归栈空间O(n): 递归计算阶乘

double factorial(int n){double ans = 1;if(n == 0 || n == 1) return 1;else return n * factorial(n);    // 递归深度为n
}

                递归调用栈的最大深度为 nn,空间复杂度为 O(n)

        (2)如何判断空间复杂度:

                1.分析代码:

                        若创建与输入规模相同的数组        -> O(n)

                        若仅使用固定数量的变量                -> O(1)

                2.递归调用的深度:

                        斐波那契递归的空间复杂度为 O(n) (最大调用深度为 n)

                        快速排序的平均递归深度为 O(log⁡n), 空间复杂度为 O(log⁡n)

                3.动态内存分配

                        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络协议与系统架构分析实战:工具与方法全解

网络协议与系统架构分析实战&#xff1a;工具与方法全解 在互联网系统的开发、运维与安全分析中&#xff0c;协议解析与抓包分析是不可或缺的核心技能。本文将系统梳理主流协议解析工具、协议自动识别方案&#xff0c;并结合实际抓包案例&#xff0c;讲解如何还原和推测底层系…

发那科机器人4(编程实例)

发那科机器人4(编程实例) 一、编程实例1、直线运动实例2、圆弧运动实例3、曲线运动实例4、物料搬运实例5、异步输送带检测一、编程实例 1、直线运动实例 本节内容:直线运动实例 本次实例,采用的是基础模块,以基础模块当中的四边形为例,演示一下机器人的直线运动。 编程…

agent初识

AI Agent 时代已来&#xff1a;不止于聊天的智能体&#xff0c;将如何重塑我们的世界&#xff1f; AI Agent 时代已来&#xff1a;不止于聊天的智能体&#xff0c;将如何重塑我们的世界&#xff1f; 你是否曾惊叹于 ChatGPT 的对答如流&#xff1f;或者 Midjourney 的妙笔生花…

.Net HttpClient 使用Json数据

HttpClient 使用Json数据 现代Web项目中&#xff0c;Json是最常用的数据格式。不论是前后端的交互中&#xff0c;还是纯前端项目中&#xff0c;都是如此。因此&#xff0c;.Net HttpClient 能不能更加方便、快捷的处理Json格式数据&#xff0c;也就至关重要了&#xff01; 文末…

UDP--DDR--SFP,FPGA实现之指令监测模块实现

指令监测模块实现介绍 如下图所示&#xff0c;为指令监测模块的运行框图 将指令设置为8bytes数据&#xff0c;故需要一个64位寄存器进行缓存&#xff0c;在进行数据缓存时&#xff0c;数据不可以输出至下一级模块&#xff0c;故对数据和有效指示信号也应该进行相应延迟&#…

JavaScript双问号操作符(??)详解,解决使用 || 时因类型转换带来的问题

目录 JavaScript双问号操作符&#xff08;??&#xff09;详解&#xff0c;解决使用||时因类型转换带来的问题 一、双问号操作符??的基础用法 1、传统方式的痛点 2、双问号操作符??的精确判断 3、双问号操作符??与逻辑或操作符||的对比 二、复杂场景下的空值处理 …

智能体的典型应用:自动驾驶、智能客服、智能制造、游戏AI与数字人技术

本文为《React Agent&#xff1a;从零开始构建 AI 智能体》专栏系列文章。 专栏地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。项目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代码示​例与实战源&#xff09;。完整介绍…

Ubuntu 22.04(WSL2)使用Docker安装Redis

Ubuntu 22.04&#xff08;WSL2&#xff09;使用Docker安装Redis 本教程将指导您在运行于WSL2的Ubuntu 22.04上通过Docker安装Redis 7.4.3。您将获得一个配置了自定义设置、持久化存储和安全选项的Redis实例。 前提条件 WSL2上已安装Ubuntu 22.04。WSL2上已安装并运行Docker&…

浅谈 Redis 数据类型

浅谈 Redis 数据类型 &#xff08;一&#xff09;String 类型 Redis 的 String 类型 是二进制安全的&#xff0c;可以用来存储 文本字符串、int 类型数据和 bitmap 位图 等数据。 1. 字符串操作 适用于存储 文本、JSON、序列化数据 等任意二进制安全的内容 命令作用示例SET设…

Day1 时间复杂度

一 概念 在 C 中&#xff0c;时间复杂度是衡量算法运行时间随输入规模增长的趋势的关键指标&#xff0c;用于评估算法的效率。它通过 大 O 表示法&#xff08;Big O Notation&#xff09; 描述&#xff0c;关注的是输入规模 n 趋近于无穷大时&#xff0c;算法时间增长的主导因…

PAC文件:智能代理配置的瑞士军刀

在日常上网和企业网络环境中&#xff0c;我们经常需要配置代理服务器来访问特定资源、增强安全性或管理网络流量。Windows和macOS系统自带的代理配置通常提供全局代理或简单的排除列表&#xff0c;这在某些复杂场景下显得不够灵活。例如&#xff0c;我们可能只想代理某个特定的…

获取高德地图JS API的安全密钥和Key的方法

要使用高德地图JavaScript API&#xff0c;您需要获取API Key和安全密钥(securityJsCode)。以下是获取步骤&#xff1a; 1. 注册高德开放平台账号 首先访问高德开放平台&#xff0c;如果没有账号需要先注册。 2. 创建应用获取Key 登录后进入"控制台" 点击"应…

携程酒店 phantom-token token1004 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 部分python代码 搞APP搞的心态有点崩…

小红书多账号运营效率优化:技术方案与自动化实践

目录 一、效率瓶颈与流程优化方向 二、技术实现方案与效率提升路径 1. 多账号统一管理&#xff1a;环境隔离与批量操作 2. 自动化任务设计&#xff1a;RPA与脚本化执行 四、效果验证与数据对比 五、总结与开源工具推荐 六、下载地址&#xff1a; 一、效率瓶颈与流程优化…

FastDDS Transport功能模块初步整理

一. 总体结构 二. 主要类的功能 2.1 TransportDescriptor和TransportInterface ​ FastDDS中整个Transport类的设计遵循的是设计模式中的建造者模式&#xff0c;其中&#xff0c;TransportDescriptor就是建造者&#xff0c;而TransportInterface则是建造出来的产品。 ​ Tra…

zabbix最新版本7.2超级详细安装部署(一)

如果文章对你有用&#xff0c;请留下痕迹在配置过程中有问题请及时留言&#xff0c;本作者可以及时更新文章 目录 1、提前准备环境 2、zabbix7.2安装部署 3、安装并配置数据库 4、为Zabbix server配置数据库 5、为Zabbix前端配置PHP 6、启动Zabbix server和agent进程 7、关闭防…

CodeBlocks调试报错

尝试打断点&#xff0c;并且点击红色箭头启动debugger时&#xff0c;控制台报错 Active debugger config: GDB/CDB debugger:Default Building to ensure sources are up-to-date Selecting target: Debug Adding source dir: C:\Users\Lenovo\Desktop\exercise\ Adding source…

Manus 开放注册:AI 智能体领域的新起点

2025 年 5 月 13 日成为了一个具有特殊意义的日子 —— 备受瞩目的 AI 智能体平台 Manus&#xff08;Manus&#xff09;正式宣布开放注册。这一消息犹如一颗重磅炸弹&#xff0c;瞬间在全球科技圈引起了广泛关注和热烈讨论。在此之前&#xff0c;Manus 一直以其独特的魅力和极高…

车载网关作为车辆网络系统的核心枢纽

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…

俄罗斯方块算法2025.5.10

问题描述 俄罗斯方块&#xff08;Tetris&#xff09;作为风靡全球38年的现象级益智游戏&#xff0c;其简单易学但难于精通的特性使其成为游戏史上的不朽经典。以下是其核心游戏规则解析及我们的要求&#xff1a; 游戏界面由20行10列的可视区域组成&#xff0c;7种不同形状的四…