Big O 表示法中的复杂度顺序是什么?

2023-11-23

Question

您好,我想了解大 O 表示法的复杂性顺序。我读过很多文章,但还没有找到任何可以准确解释“复杂性顺序”的内容,即使是这里对 Big O 的有用描述。

我对大O已经了解的事情

我已经理解的部分。关于 Big O 表示法的一点是,我们根据输入大小 n 的增长来衡量算法的时间和空间复杂度。我还了解某些排序方法对于 Big O 有最好、最差和平均的情况,例如 O(n) 、O(n^2) 等,并且 n 是输入大小(要排序的元素数量)。

任何简单的定义或例子将不胜感激,谢谢。


Big-O 分析是运行时分析的一种形式,它根据算法运行所需的时间(作为输入大小的函数)来衡量算法的效率。它不是一个正式的基准,只是在处理非常大的输入大小时根据相对效率对算法进行分类的简单方法。

更新: 任何运行时分析的最快可能运行时间为 O(1),通常称为恒定运行时间。具有恒定运行时间的算法总是花费相同的时间 无论输入大小如何,都可以执行。这是算法的理想运行时间,但很少可以实现。 大多数算法的性能取决于输入的大小 n。算法可以按照性能从最好到最差进行如下分类:

O(log n) — 如果算法的运行时间与输入大小成对数比例增加,则该算法被称为对数算法。

O(n) — 线性算法的运行时间与输入大小成正比。

O(n log n) — 超线性算法介于线性算法和多项式算法之间。

O(n^c) — 多项式算法根据输入的大小快速增长。

O(c^n) — 指数算法的增长速度甚至比多项式算法还要快。

O(n!) — 阶乘算法增长最快,即使 n 值很小,也会很快变得无法使用。

随着 n 变大,不同阶算法的运行时间迅速分开。考虑每个算法类的运行时间

   n = 10:
   log 10 = 1
   10 = 10
   10 log 10 = 10
   10^2 = 100
   2^10= 1,024
   10! = 3,628,800
   Now double it to n = 20:
   log 20 = 1.30
   20 = 20
   20 log 20= 26.02 
   20^2 = 400
   2^20 = 1,048,576 
   20! = 2.43×1018

找到一种在超线性时间内或更好的算法可以对应用程序的性能产生巨大的影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Big O 表示法中的复杂度顺序是什么? 的相关文章

  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • 如何在 Java 中对字符串的 ArrayList 进行排序?

    I have String被放入一个ArrayList随机的 private ArrayList
  • 在 Perl 中确定范围重叠的最快方法

    我有两组范围 每个范围都是一对整数 开始和结束 表示单个较大范围的某些子范围 两组范围的结构与此类似 当然 将替换为实际数字 a ranges a 1 gt start gt end gt a 2 gt start gt end gt a
  • Java 中类似 HashMap 的可排序数据结构?

    Java 中是否有某种类似于 HashMap 的数据结构 可以按键或值排序 在 PHP 中 您可以拥有可排序的关联数组 Java中有这样的东西吗 HashMaps 几乎按照定义是未排序的 一个好的哈希函数会产生看似随机的密钥分布 如果你想使
  • Pandas:根据其他多级列对最里面的列进行分组排序

    考虑下面的 df In 3771 df pd DataFrame A a 11 B b 11 C C1 C1 C2 C1 C3 C3 C2 C3 C3 C2 C2 D D1 D2 D1 D3 D3 D2 D4 D4 D1 D2 D3 E v
  • Haskell:先进先出队列算法的复杂性

    这是我对 FIFO 队列的尝试 type Queue a a gt a empty Queue a empty id remove Int gt Queue a gt a Queue a remove n queue take n queu
  • Perl:散列 2 中数组的数值排序(施瓦茨变换)

    这实际上是该线程的后续内容 Perl 散列中数组的数字排序 https stackoverflow com questions 7914931 perl numerical sort of arrays in a hash 我无法编辑原始问
  • 给定一个数字 0-9 的数组和一个整数 n,找到可由输入数组组成且小于 n 的所有整数

    问题是这样的 给你一个数字 0 9 的数组和一个整数n 该数组可能包含任何给定数字的重复项 找到所有可以通过连接输入数组中的数字形成的整数并且小于n 输入数组中的数字可以在输出的元素中重复 例如 输入为 2 5 8 且 n 223 则输出应
  • 加密单个int的方法

    如何以廉价的方式对 32 位 int 进行双向加密 使每个数字都映射到该空间中的其他 int 并以难以预测的方式映射回来 当然 并且不需要在映射表中预先存储 42 9 亿个整数 您想要的是 32 位分组密码 不幸的是 大多数分组密码都是 6
  • 二指针算法

    我想了解两指针算法方法 所以我一直在阅读本文 https tp iiita quora com The Two Pointer Algorithm 所以这是问题 假设我们有一个包含 N 个元素的数组 我们想要找到该数组中最大的连续元素序列
  • 缓存施瓦茨变换

    我正在学习 中级 Perl 它非常酷 我刚刚读完 施瓦茨变换 部分 在理解它之后 我开始想知道为什么变换不使用缓存 在具有多个重复值的列表中 转换会重新计算每个值的值 因此我想为什么不使用哈希来缓存结果 这是一些代码 a place to
  • 有向无环图的拓扑排序为阶段

    是否有一种算法 给定一个未加权的有向无环图 将所有节点排序到节点集列表中 使得 拓扑顺序被保留 即 对于所有边u gt v v出现在列表中更靠下的集合中u and 列表的长度是最小的 这个问题有名字吗 Example 下图的一种可能的排序是
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • 用于查找遍历图中所有顶点的路线的更好算法是什么?

    所以我有以下问题 给定 x x y 维度的网格 计算路线数 穿过它 从一个角开始 假设左上角 并结束于 另一个 右下 并穿过每个顶点 因此 我当前的方法只是通过尝试每条可能的路径并计算到达终点并遍历每个节点的路径来进行暴力破解 虽然它有效
  • 期望最大化抛硬币的例子

    我最近一直在自学期望最大化 并在这个过程中给自己举了一些简单的例子 http cs dartmouth edu cs104 CS104 11 04 22 pdf http cs dartmouth edu cs104 CS104 11 04
  • 去除 OCR 图像处理中的背景颜色

    我正在尝试删除背景颜色 以提高 OCR 对图像的准确性 示例如下所示 我会将所有字母保留在后处理图像中 同时仅删除浅紫色纹理背景 是否可以使用一些开源软件如Imagemagick将其转换为二值图像 黑 白 来实现这一目标 如果背景有不止一种
  • 如何跟踪此对象图深度优先搜索算法中的深度?

    我有这段代码 它迭代一棵树 进行深度优先搜索 每个元素都只处理一次 非常好 void iterateOverTree TreeNode node NSMutableArray elements NSMutableArray array el
  • 动态规划二维平面算法的递归关系帮助

    所以我一直在研究一种算法 我想要完成的任务是 考虑一个 2D 平面 其中有随机分布在 y 上限和下限之间的目标 该集合为T T1 标有坐标 X Y 有一组 S 个传感器 保证覆盖每个目标 每个传感器的半径为 1 坐标为 X Y 每个目标都有
  • 检查列表是否已排序的 Pythonic 方法

    有没有一种Python式的方法来检查列表是否已经排序ASC or DESC listtimestamps 1 2 3 5 6 7 就像是isttimestamps isSorted 返回True or False 我想输入一些消息的时间戳列
  • 找出区间内绝对差值最小的两个元素

    我给定了一个数组和一个 L R 类型的查询列表 这意味着找到任何两个数组元素之间的最小绝对差 使得它们的索引在 L 和 R 之间 其中数组的起始索引是 1 而不是 0 例如 采用包含元素 2 1 8 5 11 的数组 a 则查询 1 3 将

随机推荐