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

黑龙江省建设部网站免费中文网页模板

黑龙江省建设部网站,免费中文网页模板,全球外贸网站制作教程,wordpress for windows数据结构笔记之时间复杂度O(n)中的O是什么的缩写,为什么要用O这个字母? code review! 参考笔记 1.数据结构笔记之时间复杂度O(n)中的O是什么的缩写,为什么要用O这个字母? 2.时间复杂度和空间复杂度探究 文章目录 数据结构笔记之时间复杂度O(n)中的O是什么的缩写,为什么要…

数据结构笔记之时间复杂度O(n)中的O是什么的缩写,为什么要用O这个字母?

code review!

参考笔记
1.数据结构笔记之时间复杂度O(n)中的O是什么的缩写,为什么要用O这个字母?
2.时间复杂度和空间复杂度探究

文章目录

  • 数据结构笔记之时间复杂度O(n)中的O是什么的缩写,为什么要用O这个字母?
    • 1.时间复杂度中的O
      • 1.1.为什么用`O`?
      • 1.2.常见时间复杂度的例子
    • 2.某个函数 f(n) 的增长速度
      • 2.1.增长速度的直观理解
      • 2.2.常见增长速度的比较
      • 2.3.为什么分析增长速度很重要?
    • 3.具体的函数表达式
      • 3.1.常数时间复杂度 O(1)
      • 3.2.对数时间复杂度 O(log n)
      • 3.3.线性时间复杂度 O(n)
      • 3.4.线性对数复杂度 O(n log n)
      • 3.5.二次方时间复杂度 O(n²)
      • 3.6.指数时间复杂度 O(2ⁿ)
      • 3.7.阶乘时间复杂度 O(n!)
    • 4.不同增长速度的直观比较
    • 5.常见困惑
      • 5.1.for循环的时间复杂度
      • 5.2.遍历一个数组的时间复杂度和空间复杂度是多少?
      • 5.3.C++中基本类型的空间复杂度是多少?
      • 5.4.C++的时间复杂度和空间复杂度和栈内存,堆内存有没有关系?

1.时间复杂度中的O

时间复杂度中的 O“Order”(阶) 的缩写,表示算法运行时间或空间占用与输入规模之间的增长关系。它起源于数学中的“大 O 表示法”(Big-O Notation),用于描述函数的渐近行为。

1.1.为什么用O

  1. 来源于数学符号
    大 O 表示法最早由德国数学家 Paul Bachmann 在 1894 年的数学文献中提出,并由 Edmund Landau 进一步推广,用于描述函数的增长速度。
    O 在数学中代表 Order of Magnitude(数量级),表示随着输入规模增大,函数的增长趋势如何。

  2. 表示一种上界(Upper Bound)
    在算法分析中,O(f(n)) 表示某算法的运行时间不会超过某个函数 f(n) 的增长速度(在输入规模很大的情况下)。这非常符合算法复杂度分析的需求。

  3. 简洁且通用
    用一个单一字母 O 表达增长趋势简单明了,避免了复杂的数学符号,让计算机科学家和工程师能更方便地分析和描述算法性能。

1.2.常见时间复杂度的例子

  • O(1): 常数时间,比如直接访问数组元素。
  • O(n): 线性时间,比如遍历一个长度为 n 的数组。
  • O(n²): 二次方时间,比如双重嵌套循环。
  • O(log n): 对数时间,比如二分查找。
  • O(n log n): 比线性增长稍快,比如快速排序的平均时间复杂度。

总结:O 来自数学中的“大 O 表示法”,表示算法复杂度的增长趋势。它之所以被使用,是因为其来源于数学且能够直观地描述算法性能。

2.某个函数 f(n) 的增长速度

函数 f(n) 的增长速度是指 f(n) 随输入规模 n 增大的变化趋势,也就是描述 f(n) 如何随着 n 增大而增长。它通常用于分析算法的时间复杂度或空间复杂度,帮助我们理解算法在大输入规模下的表现。

2.1.增长速度的直观理解

假设有几个不同的函数 f(n),我们可以观察它们在输入规模 n 增大时的变化情况:

f(n)增长速度描述举例 (n = 1, 10, 100, 1000)
O(1)常数增长,不随 n 增大而变化1, 1, 1, 1
O(log n)对数增长,增长速度极慢0, 1, 2, 3
O(n)线性增长,增长速度与 n 成正比1, 10, 100, 1000
O(n log n)线性对数增长,比线性略快1, 23, 664, 9966
O(n²)二次方增长,增长速度随 n² 增大1, 100, 10000, 1000000
O(2ⁿ)指数增长,增长速度非常快2, 1024, 超大, 超级大
O(n!)阶乘增长,增速极快,远超指数增长1, 3628800, 超级大, 超级大

2.2.常见增长速度的比较

按增长速度从慢到快排序:

  1. O(1): 常数复杂度,最优增长速度(不随输入规模变化)。
  2. O(log n): 对数复杂度,增长速度极慢,比如二分查找。
  3. O(n): 线性复杂度,比如遍历一个数组。
  4. O(n log n): 线性对数复杂度,比如归并排序或快速排序的平均复杂度。
  5. O(n²): 二次复杂度,比如双重循环的算法。
  6. O(2ⁿ): 指数复杂度,比如递归解决子集问题。
  7. O(n!): 阶乘复杂度,比如全排列或旅行商问题的暴力解法。

2.3.为什么分析增长速度很重要?

  1. 预测性能:增长速度直接影响算法在大规模数据上的运行时间。
  2. 选择更优算法:通过比较增长速度,可以选择更高效的算法。例如,面对大规模数据时,选择 O(n log n) 的排序算法明显优于 O(n²) 的排序算法。
  3. 优化程序:了解增长速度可以帮助我们找出算法瓶颈,优化关键部分的实现。

总结
函数 f(n) 的增长速度描述了其随输入规模 n 增大的趋势。在算法分析中,我们用大 O 表示法来简化描述,重点关注输入规模很大时的表现。通过比较不同增长速度的函数,我们可以更好地选择和优化算法。

3.具体的函数表达式

如果你想要一些具体函数表达式作为例子,以下是常见的函数增长速度及其具体的数学表示:

3.1.常数时间复杂度 O(1)

  • 函数表达式:
    ( f(n) = 5 ) 或 ( f(n) = 100 )
    解释:不管输入规模 ( n ) 的大小,运行时间始终是常数,不会随着 ( n ) 增大而增长。

3.2.对数时间复杂度 O(log n)

  • 函数表达式:
    ( f(n) = \log_2 n ) 或 ( f(n) = \log_{10} n + 3 )
    解释:随着 ( n ) 增大,运行时间增长很慢,增长速度是对数级别。例如,二分查找的时间复杂度就是 ( O(\log n) )。

示例:

  • 当 ( n = 1 ): ( \log_2(1) = 0 )
  • 当 ( n = 10 ): ( \log_2(10) \approx 3.32 )
  • 当 ( n = 100 ): ( \log_2(100) \approx 6.64 )

3.3.线性时间复杂度 O(n)

  • 函数表达式:
    ( f(n) = n ) 或 ( f(n) = 3n + 5 )
    解释:运行时间与输入
http://www.dtcms.com/a/480022.html

相关文章:

  • 交互式网站备案分类信息网站建设系统
  • PostgreSQL REST API 介绍
  • 做网站刷流量挣钱吗大学生实训网站建设心得
  • 哪些网站可以做招商广告crm管理系统定制
  • 东莞网站seo公司平台网站开发简报
  • 云南建设工程网站发稿媒体平台
  • 网站设计需求表西北电力建设甘肃工程公司网站
  • windows10如何修改mac地址
  • ◆comfyUI教程◆第2章05节 comfyui的控制约束-controlnet基础与应用
  • 许昌做网站九零后网站关键词百度自然排名优化
  • 百度注册网站简单网页
  • 美容营销型网站中国建筑网官网查询阮国方
  • 天津网站制作免费高清logo在线
  • 网站系统重要性做设计找图片的网站有哪些
  • 台州企业网站的建设厦门公司注册名称查询系统
  • 东阳畅销自适应网站建设婚庆策划公司招聘
  • 扁平式网站seo 内链哪里有网络课程平台网站_就是帮老师建设一个教学的网站
  • 简易制作网站wordpress 随机浏览量
  • 网站后台添加文章后怎么不显示百度推广一个月费用
  • 计算机类本科毕业设计论文大纲设计及论文撰写指南
  • 网站建设学习培训建设网站招标
  • qq群推广网站运营的工资一般是多少
  • Go语言Slice的一道骚题
  • 做网站如何语音泉州哪个公司网站做的好
  • 校园电商平台网站建设自己怎么个人网站
  • 宣城网站seo诊断河北新增9个中风险地区
  • 懒人手机网站模板电子商务开发公司
  • 什么是偏自相关函数PACF
  • 网站建设费应计入什么科目手机礼品网站模板
  • 潍坊快速网站排名上海外贸财经大学