C/C++ 时间复杂度(On)
定义:
在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
将数字从 1~100 进行排序不同的人用不同的方法写出的程序都会有所偏差,这就需要我们对编写这个算法有一定的预期,了解这部分算法的运行效果,如果运行效果不适用,就没必要使用这个算法。我们不需要知道某种算法具体的执行时间,而是用大O表示法表示时间的概念,也就是时间复杂度。
大O表示法一般就是来表示某个函数的时间复杂度,所以 O 代替了函数名字,括号里面的代数表示
函数参数。

O(1) :
每天去上班,只需要和老板一个人打招呼,不管招呼内容是什么,这件事情只需要做一次,每次花费的时间几乎是相等的,我们就可以用 O(1) 来表示这所消耗的时间。
int msg(const char * msg) {printf("%s \n", msg); // 需要执行一次
}
这里不管输入的字符串有多大,都是常量,对于程序而言,就只需要执行一次,把每次执行消耗的时间约等于相等,那么用x,y轴的形式来表示就会是一条直线,我们直接O(1)来表示这样的常量时间。

O(n):
每天去上班,需要和公司所有人都打招呼,就需要你每天和公司这n个人逐个问候,虽然与每个人打招呼时间相同,但是要进行n多次,因此我们就用O(n)来表示。
int msg(int n) {for (int i = 0; i < n; i++) { // 需要执行 (n + 1) 次printf("Hello!\n"); // 需要执行 n 次}return 0; // 需要执行 1 次
}
这个函数需要遍历数组里面所有元素,因为数组里每个元素都需要遍历一次,所以数组如果有非常多元素,就需要执行多次,也就可以用 O(n) 来表示。因为很明显是一种线性的时间,如果n越大,也就是这个数组的元素越多。消耗的时间也就是越多的。

O(n²):
公司业务扩招,现在有多个部门,你需要每天上班,先给部门A所有人逐个打招呼,然后再给部门B里面所有人逐个打招呼,剩下所有部门都是这样打招呼,我们就可以用O(n^²)来表示这所耗费的时间,因为你不止要遍历每个部门还要遍历每个部门的人。
void msg(int numberofDepartments, int numberOfPeople) {for (int i = 0; i < numberofDepartments; i++) { // 循环次数为 nfor (int j = 0; j < numberOfPeople; j++) { // 循环次数为 nprintf("Hello!\n"); // 循环体时间复杂度为 O(1)}}
}
也就是嵌套循环,这里一共有多少个部门 numberofDepartments,部门中有多少人 numberOfPeople。比方说有4个部门,每个部门有4个人,那么这里输出打招呼的信息就是 16 次,也就是 4 ² = 16 ,所以用 O(n²) 来表示.

O(log n)
2¹ = 2
2³ = 8
2⁵ = 32
2¹⁰ = 1024如果用 log 的形式写:
log₂2 = 1
log₂8 = 3
log₂32 = 5
log₂1024 = 10
这里的 2,8,32,1024 就是 n,这个n即使变得很大,结果并没有等比例增大,就是结果的增速缓慢。每次对半分的话,越到后面,需要消耗的时间相对就越少。
这里 O(log n) 并没有把底数 ₂ 写出来
#include <stdio.h>
int binary_search(int *arr,int p,int q,int ele) {int mid = 0; if (p > q) {return -1;} mid = p + (q - p) / 2; if (ele == arr[mid]) {return mid;} if (ele < arr[mid]) { return binary_search(arr, p, mid - 1, ele);}else { return binary_search(arr, mid + 1, q, ele);}
}int main()
{int arr[10] = { 10,14,19,26,27,31,33,35,42,44 };printf("%d", binary_search(arr, 0, 9, 31));return 0;
}
这是一个二分法查找,

相关文章:
C/C++ 时间复杂度(On)
定义: 在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低…...
【STM32-学习笔记-10-】BKP备份寄存器+时间戳
文章目录 BKP备份寄存器Ⅰ、BKP简介1. BKP的基本功能2. BKP的存储容量3. BKP的访问和操作4. BKP的应用场景5. BKP的控制寄存器 Ⅱ、BKP基本结构Ⅲ、BKP函数Ⅳ、BKP使用示例 时间戳一、Unix时间戳二、时间戳的转换(time.h函数介绍)Ⅰ、time()Ⅱ、mktime()…...
React 中hooks之 React.memo 和 useMemo用法总结
1. React.memo 基础 React.memo 是一个高阶组件(HOC),用于优化函数组件的性能,通过记忆组件渲染结果来避免不必要的重新渲染。 1.1 基本用法 const MemoizedComponent React.memo(function MyComponent(props) {/* 渲染逻辑 *…...
日志收集Day001
1.ElasticSearch 作用:日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml(这里yy做了别名,过滤掉空行和注释行) yy /etc/el…...
机器人“大脑+小脑”范式:算力魔方赋能智能自主导航
在机器人技术的发展中,“大脑小脑”的架构模式逐渐成为推动机器人智能化的关键。其中,“大脑”作为机器人的核心决策单元,承担着复杂任务规划、环境感知和决策制定的重要角色,而“小脑”则专注于运动控制和实时调整。这种分工明确…...
python程序跑起来后,然后引用的数据文件发生了更新,python读取的数据会发生变化吗
在 Python 程序运行过程中,如果引用的数据文件被更新,程序能否读取到更新后的数据,取决于以下几个因素: 1. 是否动态读取文件 如果 Python 程序在运行过程中动态读取文件(例如通过循环或定时机制反复打开文件读取&…...
VSCode最新离线插件拓展下载方式
之前在vscode商店有以下类似的download按钮,但是2025年更新之后这个按钮就不提供了,所以需要使用新的方式下载 ps:给自己的网站推广下~~(国内直连GPT/Claude) 新的下载方式1 首先打开vscode商店官网:vscode插件下载…...
算法题目总结-栈和队列
文章目录 1.有效的括号1.答案2.思路 2.最小栈1.答案2.思路 3.前 K 个高频元素1.答案2.思路 4.用栈实现队列1.答案2.思路 5.删除字符串中的所有相邻重复项1.答案2.思路 1.有效的括号 1.答案 package com.sunxiansheng.arithmetic.day10;import java.util.Stack;/*** Descripti…...
IO进程----进程
进程 什么是进程 进程和程序的区别 概念: 程序:编译好的可执行文件 存放在磁盘上的指令和数据的有序集合(文件) 程序是静态的,没有任何执行的概念 进程:一个独立的可调度的任务 执行一个程序分配资…...
【机器学习实战高阶】基于深度学习的图像分割
机器学习项目图像分割 你可能已经注意到,大脑如何快速高效地识别并分类眼睛感知到的事物。大脑以某种方式进行训练,以便能够从微观层面分析所有内容。这种能力有助于我们从一篮子橙子中分辨出一个苹果。 计算机视觉是计算机科学的一个领域,…...
「免填邀请码」赋能各类APP,提升转化率与用户体验
在当前移动互联网的高速发展下,用户获取和留存已成为各类APP成功的关键。传统的注册流程虽然能够有效识别用户来源并进行用户管理,但随着市场竞争的激烈,复杂的注册和绑定步骤往往会成为用户流失的瓶颈。免填邀请码技术,结合自研的…...
基于海思soc的智能产品开发(视频的后续开发)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们讨论了camera,也讨论了屏幕驱动,这些都是基础的部分。关键是,我们拿到了这些视频数据之后,…...
创建 pdf 合同模板
创建 pdf 合同模板 一、前言二、模板展示三、制作过程 一、前言 前段时间要求创建“pdf”模板,学会了后感觉虽然简单,但开始也折腾了好久,这里做个记录。 二、模板展示 要创建这样的模板 三、制作过程 新建一个“Word”,这里命…...
2024 年度学习总结
目录 1. 前言 2. csdn 对于我的意义 3. 写博客的初衷 3.1 现在的想法 4. 写博客的意义 5. 关于生活和博客创作 5.1 写博客较于纸质笔记的优势 6. 致 2025 1. 前言 不知不觉, 来到 csdn 已经快一年了, 在这一年中, 我通过 csdn 学习到了很多知识, 结识了很多的良师益友…...
CSS笔记基础篇02——浮动、标准流、定位、CSS精灵、字体图标
黑马程序员视频地址: 前端Web开发HTML5CSS3移动web视频教程https://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p70https://www.bilibili.com/video/BV1kM4y127Li?vd_source…...
C++ 面向对象(继承)
三、继承 3.1 继承的概念 基于一个已有的类 去重新定义一个新的类,这种方式我们叫做继承 关于继承的称呼 一个类B 继承来自 类 A 我们一般称呼 A类:父类 基类 B类: 子类 派生类 B继承自A A 派生了B 示例图的语法 class vehicle // 车类 {}class …...
Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测
Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测 目录 Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于RIME-CNN-BiLSTM-Attention、CNN-BiLSTM-Attention、R…...
数据结构 数组
1. 常见的错误 这里我要特别纠正一个“错误”。我在面试的时候,常常会问数组和链表的区别,很多人都回答说,“链表适合插入、删除,时间复杂度O(1);数组适合查找,查找时间复杂度为O(1)”。 实际上ÿ…...
Kivy App开发之UX控件Bubble气泡
kivy提供了一个提示气泡的小控件Bubble,使用时可以指定气泡箭头的方向以及显示的图像,还可以作为容器添加其他小控件。 常用属性如下 属性说明orientation气泡内子项的排序方式,可设置为vertical或horizontal,默认horizontalarrow_pos箭头相对于气泡的位置,可设置为left_…...
从零到一:打造属于你的AI智能体,支持本地部署
国外卷智能体,国内也都在搞 AI Agent,2025 年也将成为 Agent 的元年。构建智能体主要两种情况,一个是工作流模式,另外一种是直接开发应用,接下来分别给大家介绍一下两种产品和构建过程。工作流模式,以 Coze…...
使用 C# 删除 PDF 中的数字签名汹
一、 什么是 AI Skills:从工具级到框架级的演化 AI Skills(AI 技能) 的概念最早在 Claude Code 等前沿 Agent 实践中被强化。最初,Skills 被视为“工具级”的增强,如简单的文件读写或终端操作,方便用户快速…...
四座小水库的“智能体检”:广州创科大亚湾安全监测项目纪实
在惠州鱿鱼湾、龙尾山、格木洞、畲禾坑四座水库,如同镶嵌在群山之间的明珠,守护着下游的城镇与工业区。它们大多建于上世纪六七十年代,服役已超半个世纪。2023年冬,一场以“除险加固智慧监测”为核心的维修加固工程正式拉开帷幕。…...
OpenClaw语音控制方案:千问3.5-35B-A3B-FP8对接Whisper实现声控自动化
OpenClaw语音控制方案:千问3.5-35B-A3B-FP8对接Whisper实现声控自动化 1. 为什么需要语音控制自动化? 上周整理实验室数据时,我双手正忙着操作显微镜,突然需要查一份文献——那种"腾不出手却必须立刻操作电脑"的窘境&…...
设置echarts 图例为长方形
在 ECharts 中,要将图例(legend)的 标记(icon) 设置为 长方形(矩形),可以通过 legend 配置项中的 icon 属性来实现。✅ 方法:使用 icon: rect ECharts 内置了多种图例标记…...
嵌入式开发工具链实战指南与效率提升
1. 嵌入式开发工具全景概览在嵌入式系统开发领域,工程师们每天都要面对交叉编译、调试、性能分析等重复性工作。经过十五年的一线开发实践,我整理出一套能显著提升效率的工具组合,这些工具覆盖了从芯片选型到产品发布的完整生命周期。不同于网…...
3分钟开启浏览器编程:Core72在线IDE零配置开发指南 [特殊字符]
3分钟开启浏览器编程:Core72在线IDE零配置开发指南 🚀 【免费下载链接】core Online IDE powered by Visual Studio Code ⚡️ 项目地址: https://gitcode.com/gh_mirrors/core72/core 还在为复杂的开发环境配置而烦恼吗?Core72在线ID…...
永动虾:OpenClaw一键部署,AI智能体轻松上手,解放你的数字双手
2025年底爆火的OpenClaw(龙虾AI),凭借给大模型装上“数字手脚”、自主操控设备完成任务的强大能力,成为AI智能体领域的现象级开源项目。但原版OpenClaw复杂的部署流程、繁琐的环境配置,让不少普通用户望而却步。永动虾…...
【技术解析】NeuPAN:如何用“白盒”端到端学习重塑机器人导航的精度与实时性
1. NeuPAN如何用"白盒"端到端学习颠覆传统导航 当你在商场里看到清洁机器人灵巧地绕过人群,或在仓库中目睹AGV小车以厘米级精度穿梭于货架之间时,背后很可能隐藏着一项突破性技术——NeuPAN框架。这个由"深度展开神经编码器(DUNE)"和…...
2025年同等学力离散数学与组合数学---三、填空题:
2025年同等学力离散数学与组合数学 三、填空题: (1)A{1,2,3,4,5,6,7,8,9,10},偏序关系R是A的整除关系,该偏序…...
GitHub Copilot - 尝试使用一下GitHub Copilot SDK
1. 简单介绍 AI的浪潮奔涌向前,微软在2021年就推出了GitHub Copilot,当前AI Coding在项目开发中使用比重越来越大。在年初参加的微软会议中,有参会者的观点认为有了AI coding之后,开发者对于算法,设计模式,…...
