空间复杂度与顺序表的具体实现操作(1)
最近更新的少,主要是因为参加了ACM竞赛
空间复杂度
空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。
空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。
空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。
注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。也就是说数据源的空间不能计算在内。
时间一去不复返,也就是说不能够重复利用;但是空间用了之后就能够归还,因此空间可以重复利用,比如下面这个例子:

上面这个的空间复杂度就是O(N),因为我要运行这个算法在这个过程当中,我需要去额外开辟空间,这是跟我的数据源无关的,我额外开辟的空间。

当前函数在调用的时候,为开辟对应的函数栈帧,如果函数里面又会调用函数,那么当前函数的函数栈帧并不会被销毁,上面这个的空间复杂度也是O(N)

那么重头戏来了,这个的空间复杂度是多少?首先的话必须要了解到底函数的调用顺序是怎么样的?就看我的这张图:

这种函数执行的顺序有点类似于深度优先搜索,到底了之后那个函数执行结束之后就会销毁函数栈帧,接下来再去调用函数,对于总的空间来说已经不会再增加,因此空间复杂度就是O(N)。
虽然说空间复杂度统计的是变量的个数,如果说函数里面并没有创建变量,那么我们认为在这个函数栈帧里面的空间大小为一个常数,也就是O(1)。
对于数组而言,有几个元素就表示所谓的变量个数。

线性表
数据结构的作用:在内存当中存储与管理数据。
线性表是n个具有相同特性的数据元素的有限序列,线性表是一种常用的数据结构。比较常见的线性表有:顺序表,链表,栈,队列,字符串.......。我们说线性表在逻辑上是线性结构,也就是说好比一条连续的直线。但是在物理结构上并不一定是连续的。在物理上存储时,通常以数组和链式结构的形式存储

顺序表(SeqList)
顺序表就是写一个结构体,然后通过这个结构对数组进行管理,存储数据就是用数组存储

1.创建一个顺序表
//创建一个结构体
typedef int SLDataType;
typedef struct SeqList
{SLDataType* p;size_t size;size_t capacity;
}SeqList;2.顺序表的初始化
#define INIT_CAPACITY 5
void SeqListInit(SeqList* ps)
{ps->p = (SeqList*)malloc(sizeof(SLDataType) * INIT_CAPACITY);if (ps->p = NULL){perror("SeqListInit::Malloc:");return;}ps->size = 0;ps->capacity = INIT_CAPACITY;
}3.顺序表使用结束后的销毁
void SeqListDestroy(SeqList* ps)
{free(ps->p);ps->p = NULL;ps->capacity = 0;ps->size = 0;
}4.打印顺序表
void SeqlistPrint(SeqList* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", *(ps->p + i));}printf("\n");
}5.顺序表的尾插
void SeqListPushBack(SeqList* ps, SLDataType x)
{if (ps->size == ps->capacity){SLDataType* pp = (SLDataType*)realloc(ps->p, sizeof(SLDataType) * ps->capacity * 2);if (pp == NULL){perror("SeqListPushBack::Realloc");return;}ps->p = pp;}*(ps->p + ps->size) = x;ps->capacity *= 2;ps->size++;
}6.顺序表的尾删
void SeqListPopBack(SeqList* ps)
{assert(ps->size > 0);ps->size--;
}未完,待续........
相关文章:
空间复杂度与顺序表的具体实现操作(1)
最近更新的少,主要是因为参加了ACM竞赛空间复杂度空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量…...
【springmvc】Rest ful风格
RESTful 1、RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 a>资源 资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一…...
华为OD机试真题Python实现【用户调度】真题+解题思路+代码(20222023)
用户调度 题目 在通信系统中有一个常见的问题是对用户进行不同策略的调度,会得到不同系统消耗的性能。 假设由N个待串行用户,每个用户可以使用A/B/C三种不同的调度策略。 不同的策略会消耗不同的系统资源,请你根据如下规则进行用户调度,并返回总的消耗资源数。 规则是: …...
JavaSE学习笔记总结day19
今日内容 二、线程安全的集合 三、死锁 四、线程通信 五、生产者消费者 六、线程池 零、 复习昨日 创建线程的几种方式 1) 继承 2) 实现Runnable 3) callable接口 Future接口 4) 线程池 启动线程的方法 start() 线程的几种状态 什么是线程不安全 setName getName Thread.curr…...
FreeSql使用
目的: 1.方库分表 2.主从分离 3.分布式事务 过程: 官网:指南 | FreeSql 官方文档 1.Startup.cs 添加配置(本地数据库MySql) ConfigureServices: Func<IServiceProvider, IFreeSql> fsql r >{IFreeSql …...
Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决
Hadoop集群搭建,基于3.3.4hadoop和centos8【小白图文教程-从零开始搭建Hadoop集群】,常见问题解决Hadoop集群搭建,基于3.3.4hadoop1.虚拟机的创建1.1 第一台虚拟机的创建1.2 第一台虚拟机的安装1.3 第一台虚拟机的网络配置1.3.1 主机名和IP映…...
UE4 材质学习 (焚烧材质)
效果步骤随便从网上下载一张图片(地址:链接/链接),导入UE中新建一个材质函数这里命名为“E_Function”双击打开该材质函数,由于需要输出变发光和变透明两种效果,因此这里需要两个输出节点:分别命…...
【c++】STL常用算法2—常用查找算法
文章目录常用查找算法findfind_ifadjacent_findbinary_searchcountcount_if常用查找算法 算法简介: find//查找元素 find_if//按条件查找元素 adjacent_find//查找相邻重复元素 binary_search//二分查找法 count//统计元素个数 count_if//按条件统计元素个数find …...
史上最全最详细的Java架构师成长路径图,程序员必备
从新手码农到高级架构师,要经过几步?要多努力,才能成为为人倚重的技术专家?本文将为你带来一张程序员发展路径图,但你需要知道的是,天下没有普适的道理,具体问题还需具体分析,实践才…...
第五章 事务管理
1.事务概念 *什么是事务:事务是数据库操作最基本单元,逻辑上是一组操作,要么都成功,要么都失败 *事务的特性(ACID):原子性、隔离性、一致性、持久性 2.搭建事务操作环境 *模拟场景ÿ…...
Redis:主从同步
Redis:主从同步一. 概述二. 原理(1) 全量同步(2) 增量同步(3) 优化Redis主从集群三. 总结一. 概述 引入: Redis主从集群采用一个Master负责写,多个Slave负责读的方式(读多写少),那么如何让读取数据时多个从…...
Unity Animator.Play(stateName, layer, normalizedTime) 播放动画函数用法
原理 接口: public void Play(string stateName, int layer -1, float normalizedTime float.NegativeInfinity);参数含义stateName动画状态机的某个状态名字layer第几层的动画状态机,-1 表示播放第一个状态或者第一个哈希到的状态normalizedTime从s…...
python学习——【第三弹】
前言 上一篇文章 python学习——【第二弹】中学习了python中的运算符内容,这篇文章接着学习python中的流程控制语句。 流程控制指的是代码运行逻辑、分支走向、循环控制,是真正体现我们程序执行顺序的操作。流程控制一般分为顺序执行、条件判断和循环控…...
科技云报道:AI大模型背后,竟是惊人的碳排放
科技云报道原创。 自从ChatGPT这样的大型语言模型在全球引起轰动以来,很少有人注意到,训练和运行大型语言模型正在产生惊人的碳排放量。 虽然OpenAI和谷歌都没有说过他们各自产品的计算成本是多少,但据第三方研究人员分析,ChatG…...
如何根据实际需求选择合适的三维实景建模方式?
随着实景三维中国建设的推进,对三维实景建模的数字化需求大幅增加。由于三维实景建模具有采集速度快、计算精度高等建模优势,引起了各个行业的高度关注。三维实景建模是一种应用数码相机或者激光扫描仪对现有场景进行多角度环视拍摄,然后利用…...
CENTO OS上的网络安全工具(十八)ClickHouse及编程环境部署
这篇其实去年就写好了,孰知就在12月31日那一天打进决赛圈,一躺,二过年,三休假,四加班,居然到了三个月以后,才有机会将它发出来…… 一年也就四个季度不是,实在是光阴荏苒,…...
Java中class文件的格式
常见的class文件格式如下图所示,下面我将对一下格式一一作出解释。 一、magic 该部分主要是对语言类型的规范,只有magic这个部分是CAFEBABE时才能被检测为Java语言,否则则不是。 二、minor version和major version minor version主要表示了…...
C++排序算法
排序算法复习 冒泡排序 链接:https://www.runoob.com/w3cnote/bubble-sort.html 每次循环对比【相邻】两个元素,将最大的元素放到数组最后 void bubbleSort(int* arr, int n){//每次确认一个元素的最终位置,循环n-1次即可确认全部元素的最…...
JAVA后端部署项目三步走
1. JAVA部署项目三步走 1.1 查看 运行的端口 lsof -i:8804 (8804 为端口) 发现端口25111被监听 1.2 杀死进程,终止程序 pid 为进程号 kill -9 pid 1.3 后台运行jar包 nohup java -jar -Xms128M -Xmx256M -XX:MetaspaceSize128M -XX:MaxM…...
php使用zookeeper实现分布式锁
介绍 一、zookeeper和redis实现分布式锁的对比 1、redis 分布式场景应用比较广泛,redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能;zk分布式锁,获取不到锁,注册个监听器即可,不需要不…...
FPGA在软件无线电系统中的并行处理与动态重配置技术
1. FPGA在软件无线电系统中的核心价值FPGA(现场可编程门阵列)已成为现代软件无线电(SDR)系统的核心处理引擎。与传统DSP处理器相比,FPGA凭借其并行架构和可重构特性,在实时信号处理领域展现出独特优势。在典…...
CoPaw个人AI工作站:私有化部署与智能体集成实战指南
1. 项目概述:你的个人AI工作站 如果你正在寻找一个能真正为你所用、在你掌控之下的AI助手,而不是一个用完即走的聊天机器人,那么CoPaw的出现,可能正是你等待已久的答案。简单来说,CoPaw是一个开源的、可私有化部署的“…...
AI编程助手Code-Buddy:本地优先、插件化架构与工程实践全解析
1. 项目概述:一个为开发者量身打造的智能代码伙伴 最近在逛GitHub的时候,发现了一个挺有意思的项目,叫 runkids/code-buddy 。光看名字,“代码伙伴”,就让人感觉这应该是个能帮我们写代码、解决开发问题的工具。点进…...
从AceForge看一体化AI平台:如何实现模型部署与运维的平民化
1. 项目概述:从“AceForge”看开源AI工具链的平民化革命最近在GitHub上闲逛,发现一个叫“AceForge”的项目,作者是sudokrang。点进去一看,简介写得挺有意思,大意是说这是一个“一站式、开箱即用的AI应用开发与部署平台…...
Sprout OS:为创意工作者打造的Linux开源操作系统部署与优化指南
1. 项目概述:一个为创意工作者量身定制的操作系统如果你是一名设计师、视频剪辑师、音乐制作人或者任何需要高性能计算和稳定创作环境的创意专业人士,那么你肯定对“创作环境”这四个字又爱又恨。爱的是,它是你挥洒才华的舞台;恨的…...
Homepage:构建个人统一仪表盘,聚合数字服务与状态监控
1. 项目概述:为什么我们需要一个统一的“数字家园”仪表盘?如果你和我一样,每天的工作和生活被几十个网页应用、服务状态、待办事项和书签链接所淹没,那么你一定能理解那种在浏览器标签页海洋里“迷路”的烦躁感。今天要聊的这个项…...
开源智能抓取框架:为低成本机械爪赋予视觉与决策能力
1. 项目概述:当“机械爪”遇上“超能力”最近在机器人抓取与操作领域,一个名为openclaw-superpowers的项目引起了我的注意。这个项目名本身就充满了想象力——“OpenClaw”暗示着一个开源的机械爪平台,而“Superpowers”则直指为其赋予超越常…...
基于Claude API的AI应用开发:claude-toolshed框架实战指南
1. 项目概述与核心价值最近在折腾AI应用开发,特别是围绕Claude API构建一些自动化工具时,发现了一个挺有意思的开源项目——aksh-3141/claude-toolshed。这名字直译过来是“Claude的工具棚”,听起来就挺接地气的。简单来说,它不是…...
085、命令行工具开发:argparse模块实战笔记
085、命令行工具开发:argparse模块实战笔记 昨天帮同事调试一个数据清洗脚本,问题出在参数解析上。脚本接收三个输入路径,结果他少传了一个参数,程序直接崩溃报“IndexError”。这种体验太糟糕了——用户不知道哪里错了,也不知道该怎么用。这就是为什么我们需要专业的命令…...
Discord服务器日活破5万后ChatGPT机器人崩了?百万级消息队列+状态分片架构设计(附GitHub星标1.2k的开源模板)
更多请点击: https://intelliparadigm.com 第一章:Discord服务器日活破5万后ChatGPT机器人崩了? 当 Discord 社区日活跃用户突破 5 万时,一个基于 OpenAI API 的 ChatGPT 机器人在高峰时段突然出现 98% 的请求超时与 429…...
