时间复杂度(Time Complexity)

时间复杂度

1. 什么是时间复杂度?

时间复杂度(Time Complexity)是计算算法执行时间随输入规模(n)增长的变化趋势。它衡量算法的效率,通常使用大 O 记号(Big-O notation)表示,忽略低阶项和常数系数。

2. 时间复杂度的用途

  • 评估算法性能:帮助选择更高效的算法,提高程序执行速度。
  • 预测程序运行时间:根据输入规模预估代码的执行时间。
  • 优化代码:通过分析时间复杂度找到瓶颈,优化算法。

3. 常见时间复杂度及其排序

按照执行速度从快到慢排序如下:

时间复杂度说明示例
O(1)常数时间直接访问数组元素 arr[i]
O(log n)对数时间二分查找
O(n)线性时间遍历数组
O(n log n)线性对数时间快速排序、归并排序
O(n²)平方时间冒泡排序、选择排序
O(n³)立方时间三重嵌套循环
O(2ⁿ)指数时间递归求解斐波那契数列
O(n!)阶乘时间旅行商问题(TSP)暴力解法

4. 如何计算时间复杂度?

方法 1:统计基本操作次数

基本操作指的是影响运行时间的核心代码(如循环、递归调用等)。

方法 2:忽略常数项

时间复杂度关注增长趋势,忽略常数。例如:

  • O(2n) 简化为 O(n)
  • O(3n² + 5n + 10) 简化为 O(n²)

方法 3:只保留最高阶项

例如:O(n² + n) 取最高阶项 O(n²)。

5. 计算示例

示例 1:遍历数组

void loop(int arr[], int n) {for (int i = 0; i < n; i++) {  // n 次执行printf("%d", arr[i]); // O(1)}
}
  • 时间复杂度:O(n)

示例 2:嵌套循环

void nestedLoop(int n) {for (int i = 0; i < n; i++) {      // O(n)for (int j = 0; j < n; j++) {  // O(n)printf("%d", i * j); // O(1)}}
}
  • 时间复杂度:O(n²)

示例 3:对数复杂度

void logComplexity(int n) {for (int i = 1; i < n; i *= 2) { // i 每次翻倍printf("%d", i);}
}
  • 时间复杂度:O(log n)

示例 4:递归复杂度

int fibonacci(int n) {if (n <= 1) return n;return fibonacci(n - 1) + fibonacci(n - 2);
}
  • 时间复杂度:O(2ⁿ)

6. 复杂度增长趋势(直观理解)

时间复杂度增长趋势
O(1)超快,固定时间
O(log n)很快,数据翻倍时时间增加一点
O(n)线性增长,数据翻倍,时间也翻倍
O(n log n)接近线性,常见于高效排序
O(n²)慢,多用于暴力解法
O(2ⁿ)很慢,指数爆炸
O(n!)超级慢,几乎无法计算大规模数据

7. 总结

  • 遍历数组:O(n)
  • 嵌套循环:O(n²)
  • 二分查找:O(log n)
  • 递归斐波那契:O(2ⁿ)
  • 高效算法应尽量选择 O(n log n) 或更快的算法! 🚀

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

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

相关文章

树莓派:更新源

发行版本 Debian 一直维护着至少三个发行版本&#xff1a;“稳定版&#xff08;stable&#xff09;”&#xff0c;“测试版&#xff08;testing&#xff09;”和“不稳定版&#xff08;unstable&#xff09;”。 发行版目录 下一代 Debian 正式发行版的代号为 bullseye — 发布…

K8s 1.27.1 实战系列(八)Service

一、Service介绍 1、Service 的作用与核心功能 Service 是 Kubernetes 中用于抽象一组 Pod 并提供稳定访问入口的资源。它解决了以下问题: ​Pod IP 不固定:Pod 可能因故障、扩缩容或更新导致 IP 变化,Service 通过 ClusterIP(虚拟 IP)提供固定访问地址。​负载均衡:自动…

RocketMQ性能优化篇

在分布式消息系统中&#xff0c;RocketMQ以其高性能、高可靠性和高可扩展性而被广泛应用。然而&#xff0c;为了充分发挥其性能优势&#xff0c;需要进行一系列的性能测试和优化。本文将从性能测试方法和优化实践两个方面&#xff0c;详细介绍如何对RocketMQ进行性能优化。通过…

CSS 知识点总结1

CSS 知识点总结&#xff11; 今天写了两个页面,用到的知识点,总结一下 1. Flexbox 布局 display: flex;&#xff1a;启用 Flexbox 布局&#xff0c;用于创建灵活的容器。flex-direction: column;&#xff1a;将子元素垂直排列。justify-content&#xff1a;控制子元素在主轴…

双指针算法专题之——复写零

文章目录 题目介绍思路分析异地复写优化为就地复写 AC代码 题目介绍 链接: 1089. 复写零 思路分析 那么这道题我们依然可以使用双指针算法来解决 异地复写 先不考虑题目的要求&#xff0c;直接就地在原数组上修改&#xff0c;可能不太好想&#xff0c;我们这里可以先在一个…

Python控制语句 ——break和continue

1.以下关于Python循环结构的描述中,错误的是() 。 A、break用来结束当前当次语句,但不跳出当前的循环体。 B、遍历循环中的遍历结构可以是字符串、文件、组合数据类型和range函数等。 C、Python通过for,while等保留字构建循环结构。 D、continue只结束本次循环。 答案:A。在…

搭建阿里云专有网络VPC

目录 一、概述 二、专有网络vpc 2.1 vpc基本信息 2.2 vpc资源管理 2.3 vpc网段管理 三、交换机 四、NAT网关 4.1 绑定弹性公网IP 4.2 NAT网关信息 4.3 绑定的弹性公网IP 4.4 DNAT 4.5 SNAT 五、弹性公网IP 六、访问控制ACL&#xff08;绑定交换机&#xff09; 6…

阿里巴巴发布 R1-Omni:首个基于 RLVR 的全模态大语言模型,用于情感识别

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

《深度剖析:鸿蒙系统下智能NPC与游戏剧情的深度融合》

在游戏开发领域&#xff0c;鸿蒙系统的崛起为开发者们带来了前所未有的机遇与挑战。尤其是在开发基于鸿蒙系统的人工智能游戏时&#xff0c;实现智能NPC的行为逻辑与游戏剧情紧密结合&#xff0c;成为了打造沉浸式游戏体验的关键。 鸿蒙系统作为一款面向全场景的分布式操作系统…

聚划算!三个模型对比预测!CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测

聚划算&#xff01;三个模型对比预测&#xff01;CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测 目录 聚划算&#xff01;三个模型对比预测&#xff01;CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 CNN-GRU、GRU、CN…

C# 的 ManualResetEvent(线程同步操作) 类详解

C# 的 ManualResetEvent 类详解 作用 ManualResetEvent 是用于线程同步操作的类&#xff0c;允许一个或多个线程等待特定信号&#xff0c;以协调多个线程的执行顺序。它通过事件通知机制实现&#xff0c;确保线程在收到信号前保持阻塞&#xff0c;直到其他线程显式发出信号。…

小白学习:提示工程(什么是prompt)

课程链接 https://www.bilibili.com/video/BV1PX9iYQEry/?spm_id_from333.337.search-card.all.click 一 什么是提示工程 【提示工程】也叫【指令工程】 prompt就是给大模型发的指令&#xff0c;如“给我讲个笑话” 懂得提示工程原理会带来什么优势 懂得原理 为什么有的指…

Docker Compose 之详解(Detailed Explanation of Docker Compose)

Docker Compose 之详解 当容器数量逐渐增多&#xff0c;你是否感到手忙脚乱&#xff1f;面对复杂的部署场景&#xff0c;是时候祭出神器Docker Compose了&#xff01;它能帮你优雅地管理多容器应用&#xff0c;一键启动、停止所有服务&#xff0c;不再为复杂的手动操作焦头烂额…

C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷一)

目录 1. 内存和地址 2. 指针变量和地址 2.1 取地址操作符&#xff08;&&#xff09; 2.2 指针变量 2.3 解引用操作符 &#xff08;*&#xff09; 3. 指针的解引用 3.1 指针 - 整数 3.2 void* 指针 4. const修饰指针 4.1 const修饰变量 4.2 const修饰指针变量 5…

【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目

【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目 在Azure Web应用上,您可以使用Python的OpenAI包方便快捷地调用官方API,上传您的训练数据,并利用他们的算法进行处理。本教程提供了一个逐步指南,帮助您在Azure Web应用上部署您的OpenAI项目,涵盖了从资源设置到…

机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结

红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…

uni-app学习笔记——自定义模板

一、流程 1.这是一个硬性的流程&#xff0c;只要按照如此程序化就可以实现 二、步骤 1.第一步 2.第二步 3.第三步 4.每一次新建页面&#xff0c;都如第二步一样&#xff1b;可以选择自定义的模版&#xff08;vue3Setup——这是我自己的模版&#xff09;&#xff0c;第二步的…

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了&#xff0c;虽然经过扩容和调整&#xff0c;但反应依旧不稳定&#xff0c;甚至小圆圈转半天最后却提示“服务器繁忙&#xff0c;请稍后再试。” 故此&#xff0c;本文通过讲解在本地部署 DeepSeek并配合python代码实现&#xff0c;让你零成本搭建自己的AI…

Vue3计算属性深度解析:经典场景与Vue2对比

一、计算属性的核心价值 计算属性&#xff08;Computed Properties&#xff09;是Vue响应式系统的核心特性之一&#xff0c;它通过依赖追踪和缓存机制优雅地解决模板中复杂逻辑的问题。当我们需要基于现有响应式数据进行派生计算时&#xff0c;计算属性总能保持高效的性能表现…

python-leetcode-删除链表的倒数第 N 个结点

LCR 021. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 可以使用双指针方法来解决这个问题&#xff0c;这样可以在一次遍历内完成删除操作&#xff0c;从而达到 O(n) 的时间复杂度。以下是 Python 代码实现&#xff1a; 解题思路&#xff1a; 初始化快…