前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是算法中的大 O 符号?

什么是算法中的大 O 符号?

作者头像
小林coding
发布2024-11-05 12:26:34
发布2024-11-05 12:26:34
3400
举报
文章被收录于专栏:小林coding小林coding

大 O 符号是一种数学符号,用于计算机科学中描述算法的效率,特别是时间复杂度和空间复杂度。

它提供了一个上限,描述了随着输入数据大小增加,算法的运行时间或内存使用量的增长速度。

大 O 符号主要用于表达以下内容:

  • 时间复杂度:衡量算法的运行时间如何随着输入大小的变化而变化。例如,时间复杂度为 O(n) 的算法表示其运行时间随着输入大小的线性增长。
  • 空间复杂度:衡量算法的内存使用量如何随着输入大小的变化而变化。例如,空间复杂度为 O(n) 的算法表示其内存使用量随着输入大小的线性增长。

01 O(1) - 恒定时间

运行时间恒定,不随输入大小变化。

典型应用

  • 通过索引访问数组中的元素。
  • 插入或删除哈希表中的一个元素(平均)。

02 O(n) - 线性时间

运行时间随输入大小线性增加。

典型应用

  • 遍历列表或数组。
  • 查找未排序数组中的最大或最小元素。
  • 检查未排序数组中是否存在元素。

03 O(log n) - 对数时间

运行时间随输入大小的增加而对数增加。

典型应用

  • 排序数组上的二进制搜索。
  • 平衡二叉搜索树(如 AVL 树、红黑树)上的操作。
  • 查找二进制堆中最大或最小的元素。

04 O(n^2) - 二次方时间

运行时间随输入的大小呈二次方增长。

典型应用

  • 简单的排序算法,如冒泡排序、选择排序和插入排序。
  • 涉及输入内容嵌套循环的算法(例如,比较所有元素对)。
  • 解决某些动态编程问题,如矩阵链式乘法的 native 实现。

05 O(n^3) - 立方时间

运行时间随输入的大小呈立方增长。

典型应用

  • 更复杂的动态编程问题,如 Floyd-Warshall 最短路径算法的天真实现。
  • 使用 native 算法计算两个密集矩阵的乘法。

06 O(n log n) - 线性时间

运行时间以线性对数方式增长,结合了线性增长和对数增长。

典型应用

  • 高效排序算法,如合并排序、快速排序(平均情况)和堆排序。
  • 从排序数组构建二叉搜索树。

07 O(2^n) - 指数时间

输入每增加一个元素,运行时间就增加一倍。

典型应用

  • 将问题分成多个子问题来解决的递归算法,例如旅行推销员问题的 native 解法。
  • 利用递归解决子集和问题。
  • 生成集合的所有子集。

08 O(n!) - 因式分解时间

运行时间随输入大小的因子增长。

典型应用

  • 排列生成问题。
  • 旅行推销员问题的暴力解法。
  • 解决涉及生成集合所有可能排序的问题。

09 O(sqrt(n)) - 平方根时间

运行时间与输入大小的平方根成比例增长。

典型应用

  • 涉及在一定范围内搜索的算法,如查找 n 以内所有素数的 Eratosthenes 筛法。
  • 计算几何中的某些算法。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小林coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 O(1) - 恒定时间
    • 典型应用
  • 02 O(n) - 线性时间
    • 典型应用
  • 03 O(log n) - 对数时间
    • 典型应用
  • 04 O(n^2) - 二次方时间
    • 典型应用
  • 05 O(n^3) - 立方时间
    • 典型应用
  • 06 O(n log n) - 线性时间
    • 典型应用
  • 07 O(2^n) - 指数时间
    • 典型应用
  • 08 O(n!) - 因式分解时间
    • 典型应用
  • 09 O(sqrt(n)) - 平方根时间
    • 典型应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档