当前位置: 首页 > news >正文

算法复杂度<数据结构 C版>

什么是算法复杂度?

        简单来说算法复杂度是用来衡量一个算法的优劣的,一个程序在运行时,对运行时间和运行空间有要求,即时间复杂度和空间复杂度。


目录

什么是算法复杂度?

大O的渐近表达式

时间复杂度示例

空间复杂度示例

 常见复杂度对比:


大O的渐近表达式

        时间复杂度,我们常常使用大O的渐近表示法

推导大O阶的规则:

●时间复杂度函数式T(N)中,只保留高阶项,去掉那些低阶项。

(因为当N不断变大时,低阶项对结果的影响越来越小,当N无穷大时,就可以忽略不计了)

●如果最高阶项存在且不是1,则去除这个项目的常数系数。

(因为当N不断变大,这个系数对结果的影响不断变小,当N无穷大时,其就可以忽略不计了)

●T(N)如果没有N相关的项目,只有常数项,那么就用常数1替代所有加法。


时间复杂度示例

1.

// 计算Func2的时间复杂度? 
void Func2(int N) 
{ int count = 0; //1次for (int k = 0; k < 2 * N ; ++ k) { ++count; //2*N次} int M = 10; while (M--) { ++count; //10次} printf("%d\n", count); 
}

 得:T(N)=1+2*N+10

由第一条和第二条规则得到时间复杂度O(N).


2.

// 计算Func3的时间复杂度? 
void Func3(int N, int M) 
{ int count = 0; for (int k = 0; k < M; ++ k) //M次{ ++count; } for (int k = 0; k < N ; ++ k) //N次{ ++count; } printf("%d\n", count); 
}

 得:T(N)=M+N

由第一条规则或第二条规则得到时间复杂度O(N).

 (因为使用N代表其中增长速度快的哪一项,则忽略掉增长速度慢的那一项,当M和N增长速度一样时为2N,则忽略系数)


3.

// 计算Func4的时间复杂度? 
void Func4(int N) 
{ int count = 0; for (int k = 0; k < 100; ++ k) //100次{ ++count; } printf("%d\n", count); 
}

 得:T(N)=100

由第三条规则得到时间复杂度O(1).


4.

// 计算strchr的时间复杂度? 
const char * strchr ( const char * str, int character)
{const char* p_begin = s;while (*p_begin != character){if (*p_begin == '\0')return NULL;p_begin++;}return p_begin;
}

①最好情况

        str的第一个字符就等于character,得:T(N)=1,则时间复杂度为O(1).

②平均情况

        要查找的字符在str的中间,得:T(N)=N/2,则时间复杂度为O(N).

③最差情况

        要查找字符在str的末尾,得:T(N)=N,则时间复杂度为O(N).

一般的我们取最差情况来表示算法的时间复杂度


★某些算法存在分情况的时间复杂度

        ●最坏情况:任意输入规模的最大运行次数(上界).

        ●平均情况:任意输入规模的平均次数.

        ●最好情况:任意输入规模的最小次数(下界).

 5.

// 计算BubbleSort的时间复杂度? 
void BubbleSort(int* a, int n) 
{ assert(a); for (size_t end = n; end > 0; --end) { int exchange = 0; for (size_t i = 1; i < end; ++i) { if (a[i-1] > a[i]) { Swap(&a[i-1], &a[i]); exchange = 1; } } if (exchange == 0) break; } 
}

通过上面的分析,我们可尝试求出三种情况:

最坏情况:倒序,O(N^2)

平均情况:平均情况,O(N^2)

最好情况:有序,O(N)


6.

void func5(int n)
{int cnt = 1;while (cnt < n){cnt *= 2;}
}

分析得T(N)=log2n,即O(logn).


7.

// 计算阶乘递归Fac的时间复杂度? 
long long Fac(size_t N) 
{ if(0 == N)return 1; return Fac(N-1)*N; 
}

时间复杂度:O(N).


空间复杂度示例

        空间复杂度的表示也使用大O表达式。

1.

// 计算BubbleSort的时间复杂度? 
void BubbleSort(int* a, int n) 
{ assert(a); //1次for (size_t end = n; end > 0; --end) //一次{ int exchange = 0; //一次for (size_t i = 1; i < end; ++i) //一次{ if (a[i-1] > a[i]) { Swap(&a[i-1], &a[i]); exchange = 1; } } if (exchange == 0) break; } 
}

空间复杂度:O(1).


// 计算阶乘递归Fac的空间复杂度? 
long long Fac(size_t N) 
{ if(N == 0) return 1; return Fac(N-1)*N; 
}

开辟了N个函数栈帧,空间复杂度为O(N)


 常见复杂度对比:

  

相关文章:

算法复杂度<数据结构 C版>

什么是算法复杂度&#xff1f; 简单来说算法复杂度是用来衡量一个算法的优劣的&#xff0c;一个程序在运行时&#xff0c;对运行时间和运行空间有要求&#xff0c;即时间复杂度和空间复杂度。 目录 什么是算法复杂度&#xff1f; 大O的渐近表达式 时间复杂度示例 空间复杂度…...

【XSS】

文章目录 0x01 简介0x02 XSS Payload用法XSS攻击平台及调试JavaScript 0x03 XSS绕过XSS漏洞防御策略 跨站脚本攻击&#xff0c;Cross Site Script。&#xff08;重点在于脚本script&#xff09; 有关XSS可以造成的 危害&#xff0c;见 0x02 XSS Payload用法 分类 反射型、存储…...

Go网络编程-RPC程序设计

gRPC 通信 RPC 介绍 RPC, Remote Procedure Call&#xff0c;远程过程调用。与 HTTP 一致&#xff0c;也是应用层协议。该协议的目标是实现&#xff1a;调用远程过程&#xff08;方法、函数&#xff09;就如调用本地方法一致。 如图所示&#xff1a; 说明&#xff1a; Servi…...

Linux 性能优化:轻松入门

文章目录 前言一、磁盘性能优化1、 磁盘 RAID 模式选择2、文件系统优化 二、优化 CPU1、性能监控 &#xff1a;2、进程优先级调整 &#xff1a;3、进程与 CPU 绑定 &#xff1a; 三、优化内存四、网络性能优化1、调整 TCP 缓冲区大小2、修改系统级别的文件描述符的数量3、调整 …...

C++相关概念和易错语法(22)(final、纯虚函数、继承多态难点)

1.final final在继承和多态中都可以使用&#xff0c;在继承中是指不想将自己被继承&#xff0c;在多态中是指不想该函数被重写&#xff0c;比较简单&#xff0c;下面是一些使用例子。 2.纯虚函数 当我们需要抽象一个类的时候&#xff0c;我们就需要用到纯虚函数。所谓抽象的类…...

状态管理的艺术:探索Flutter的Provider库

状态管理的艺术&#xff1a;探索Flutter的Provider库 前言 上一篇文章中&#xff0c;我们详细介绍了 Flutter 应用中的状态管理&#xff0c;以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式&#xff1a;Provider。 Provider优缺点 基…...

玩转HarmonyOS NEXT之IM应用首页布局

本文从目前流行的垂类市场中&#xff0c;选择即时通讯应用作为典型案例详细介绍HarmonyOS NEXT的各类布局在实际开发中的综合应用。即时通讯应用的核心功能为用户交互&#xff0c;主要包含对话聊天、通讯录&#xff0c;社交圈等交互功能。 应用首页 创建一个包含一列的栅格布…...

GPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建

原文链接&#xff1a;GPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608565&idx3&snd4e9d447efd82e8dd8192f7573886dab&chksmfa826912cdf5e00414e01626b52bab83a96199a6bf69cbbef7f7fe…...

记录些MySQL题集(4)

1、数据库的三范式是什么&#xff1f; 第一范式&#xff1a;列不可再分 第二范式&#xff1a;在第一范式的基础上&#xff0c;要求数据库表中的所有非主键列完全依赖于主键&#xff0c;而不是仅依赖于主键的一部分 第三范式&#xff1a;满足第二范式的基础上&#xff0c;所有…...

pdf提取其中一页怎么操作?提取PDF其中一页的方法

pdf提取其中一页怎么操作&#xff1f;需要从一个PDF文件中提取特定页码的操作通常是在处理文档时常见的需求。这种操作允许用户选择性地获取所需的信息&#xff0c;而不必操作整个文档。通过选择性提取页面&#xff0c;你可以更高效地管理和利用PDF文件的内容&#xff0c;无论是…...

godot使用ws

go服务端 package mainimport ("encoding/json""fmt""github.com/gorilla/websocket""net/http" )var upgrader websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024, }// 处理函数 func handleWebSocket(w http.Respo…...

Windows FFmpeg 开发环境搭建

FFmpeg 开发环境搭建 FFmpeg命令行环境搭建使用FFmpeg官方编译的库Windows编译FFmpeg1. 下载[msys2](https://www.msys2.org/#installation)2. 安装完成之后,将安装⽬录下的msys2_shell.cmd中注释掉的 rem set3. 修改pacman 镜像源并安装依赖4. 下载并编译源码 FFmpeg命令行环境…...

链路聚合概述

目录 技术背景&#xff1a; 基本概念&#xff1a; 链路聚合的工作模式&#xff1a; 简介&#xff1a; 1&#xff09;Manual Load-balance&#xff08;手动负载分担&#xff09; 简介&#xff1a; 配置实施&#xff1a; 2&#xff09;LACP&#xff08;链路聚合控制协议&#xff…...

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路&#xff1a; 找到链表的中间节点&#xff0c;然后逆置链表的后半部分&#xff0c;再一一遍历链表的前半部分和后半部分&#xff0c;判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…...

合成复用原则

合成复用原则 (Composite Reuse Principle, CRP) 合成复用原则&#xff08;Composite Reuse Principle, CRP&#xff09;&#xff0c;也被称为组合/聚合复用原则&#xff0c;是面向对象设计中的一条重要原则。它的核心思想是&#xff1a;优先使用对象组合/聚合&#xff0c;而不…...

安卓自带camera hal3 实例README.md翻译

最近&#xff0c;遇到一个这样的问题&#xff0c;临时了解下这个驱动实现架构和特点&#xff0c;翻译如下 V4L2相机HALv3 camera.v4l2库使用视频Linux 2&#xff08;V4L2&#xff09;接口实现了camera HAL v3。这使得它在理论上可以与各种设备配合使用&#xff0c;尽管V4L2的…...

ActiViz实战:ActiViz中的自己实现鼠标双击事件

文章目录 1、添加鼠标事件2、网上实现双击事件的方式3、增加双击的时间限制4、补充说明1、添加鼠标事件 已知在C#中观察者/命令模式会报错,正常添加鼠标事件如下: private void VtkInteractorStyleTest() {vtkInteractorStyle style = vtkInteractorStyle.New();style.LeftB…...

Linux-交换空间(Swap)管理

引入概念 在计算机中&#xff0c;硬盘的容量一般比内存大&#xff0c;内存&#xff08;4GB 8GB 16GB 32GB 64GB…&#xff09;&#xff0c;硬盘&#xff08;512GB 1T 2T…&#xff09;。 冯诺依曼的现代计算机结构体系里面的存储器就是内存 内存是一种易失性存储器&#xff0c…...

扫描某个网段下存活的IP:fping

前言&#xff1a; 之前用arp统计过某网段下的ip&#xff0c;但是有可能统计不全。网络管理平台又不允许登录。想要知道当前的ip占用情况&#xff0c;可以使用fping fping命令类似于ping&#xff0c;但比ping更强大。与ping需要等待某一主机连接超时或发回反馈信息不同&#x…...

【深度学习】PyTorch框架(3):优化与初始化

1.引言 在本文中&#xff0c;我们将探讨神经网络的优化与初始化技术。随着神经网络深度的增加&#xff0c;我们会遇到多种挑战。最关键的是确保网络中梯度流动的稳定性&#xff0c;否则可能会遭遇梯度消失或梯度爆炸的问题。因此&#xff0c;我们将深入探讨以下两个核心概念&a…...

nli-distilroberta-base实战教程:使用/app.py启动NLI服务并集成到Flask后端

nli-distilroberta-base实战教程&#xff1a;使用/app.py启动NLI服务并集成到Flask后端 1. 项目概述 自然语言推理(Natural Language Inference, NLI)是自然语言处理中的一项重要任务&#xff0c;用于判断两个句子之间的逻辑关系。nli-distilroberta-base是基于DistilRoBERTa…...

从服务边界到性能边界:理解 ABAP CDS View 里的窄投影及其重要性

结论先讲清楚 在 ABAP CDS 语境里,很多开发者口中的 窄投影,本质上并不是一个独立的官方语法关键字,而是一种建模策略:在 CDS projection view 这一层,只暴露某个具体业务服务真正需要的那一小部分字段、关联、行为和注解,不把底层业务对象里所有能拿到的内容一股脑端出…...

基于SpringBoot+Vue的AI智能客服系统开发实战:从H5输入到语言提问的完整实现

最近在做一个AI智能客服项目&#xff0c;客户要求既要能在H5页面里打字提问&#xff0c;又要能直接语音对话&#xff0c;后台还得有个清晰的管理界面。这听起来简单&#xff0c;但真做起来&#xff0c;从技术选型到具体实现&#xff0c;坑可真不少。今天就把这次从零到一搭建“…...

复现瓦斯抽采钻孔间距优化的二维数值模拟研究模型

复现论文《瓦斯抽采钻孔间距优化三维数值模拟量化研究》模型 模型为二维 不是论文的三维图 钻孔间距优化的数学建模手记 最近在复现某篇瓦斯抽采钻孔优化的论文时&#xff0c;发现原论文的三维模型对计算资源要求太高。为了快速验证核心结论&#xff0c;我决定将模型简化到二维…...

基于STM32定时器外部触发模式的高精度频率计实现

1. 为什么需要高精度频率计 在嵌入式开发中&#xff0c;频率测量是个常见但棘手的问题。我遇到过不少开发者&#xff0c;他们用普通IO口配合中断来计数&#xff0c;结果发现测量1MHz以上的信号时误差大得离谱。后来改用STM32的定时器外部触发模式&#xff0c;精度直接提升了一个…...

完整环视系统搭建指南:从零开始快速实现车辆360度全景视图

完整环视系统搭建指南&#xff1a;从零开始快速实现车辆360度全景视图 【免费下载链接】surround-view-system-introduction 项目地址: https://gitcode.com/gh_mirrors/su/surround-view-system-introduction 想要为你的车辆实现专业的360度环视系统吗&#xff1f;sur…...

批量发短信接口的数据格式设计:CSV、JSON还是XML?

在开发者对接批量发短信接口的实际开发中&#xff0c;数据格式的选型是核心技术环节&#xff0c;CSV、JSON、XML三种主流格式各有技术特性&#xff0c;适配不同的业务场景。选品不当易导致数据解析效率低、接口调用失败、批量发送卡顿等问题。本文将从接口对接的核心诉求出发&a…...

中国有实力的科技公司有哪些

中国有实力的科技公司有哪些3中国有实力的科技公司全景分析&#xff1a;从互联网巨头到硬科技领军者本文基于2025-2026年最新产业数据&#xff0c;梳理中国具备全球竞争力的科技公司矩阵。文章采用结构化数据呈现方式&#xff0c;重点分析华为、腾讯、阿里巴巴、比亚迪及美的集…...

金融行业大模型呼叫系统架构与API集成案例

合规化成为金融AI外呼核心需求 随着《个人信息保护法》《反电信网络诈骗法》等法规实施&#xff0c;金融外呼面临严格合规要求。2026年行业数据显示&#xff0c;不合规外呼导致平均投诉率高达18%&#xff0c;单次罚款可达年营收1%。技术化合规成为金融机构数字化转型的关键。 …...

终极指南:如何用SilentPatch彻底修复你的经典GTA游戏

终极指南&#xff1a;如何用SilentPatch彻底修复你的经典GTA游戏 【免费下载链接】SilentPatch SilentPatch for GTA III, Vice City, and San Andreas 项目地址: https://gitcode.com/gh_mirrors/si/SilentPatch 还在为经典GTA游戏的各种bug和兼容性问题烦恼吗&#xf…...