时间复杂度单循环与多个顺序循环

2024-04-07

今天,我和我的同事就一个特定的代码片段发生了一场小争论。代码看起来像这样。至少,他想象中是这样的。

for(int i = 0; i < n; i++) {
    // Some operations here
}

for (int i = 0; i < m; i++) { // m is always small
    // Some more operations here
}

他希望我删除第二个循环,因为它会导致性能问题。

但是,我确信由于这里没有任何嵌套循环,因此复杂性始终是O(n),无论我放置了多少个顺序循环(我们只有 2 个)。

他的论点是,如果n是 1,000,000 并且循环需要 5 秒,我的代码将需要 10 秒,因为它有 2 个 for 循环。听到这句话后我很困惑。

我从 DSA 课程中记得的是,我们在计算 Big Oh 时忽略了这些常数。

我在这里缺少什么?


Yes,
复杂性理论可能有助于比较两种不同的计算方法[?TIME][?SPACE],
but

不使用[PTIME]复杂性是效率低下的理由


Fact #1: O( f(N) )与比较复杂性相关,在附近的区域N ~ INFTY,因此可以在“那里”比较过程主要限制

Fact #2: Given N ~ { 10k | 10M | 10G },这些情况都不符合上述条件

Fact #3:如果过程(算法)允许循环合并而没有任何副作用(对资源/阻塞等)到单次传递中,则单循环处理可能总是受益于循环开销的减少。


微观基准将决定,而不是O( f( N ) ) for N ~ INFTY

由于许多附加效果会产生更强的影响 - 更好或更差的缓存行对齐以及可能的 L1/L2/L3 缓存重用量、智能利用更多/更少的 CPU 寄存器 - 所有这些都由可能的编译器驱动 -优化,并可能进一步提高小型代码的执行速度N-s,超出上面的任何预期。

So,
在争论限制之前,确实要执行一些与缩放相关的微基准测试O( f( N ) )

总是做。

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

时间复杂度单循环与多个顺序循环 的相关文章

  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ
  • 如何动态查找连接组件

    使用不相交集数据结构可以很容易地得到图的连通分量 而且 它只是支持增量连接组件 http www boost org doc libs 1 46 1 libs graph doc incremental components html 然而
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • 为什么 .each 在我的 Rails 视图中完成后会重复数组? [复制]

    这个问题在这里已经有答案了 在我的 Rails 视图页面中 我有以下循环 它应该循环遍历我的 tag list 数组并打印每个标签 由于某种原因 它在打印每个单独的标签后会重复该数组 例如 这个数组有两个元素 ruby python 每个方
  • 方法不必要地被调用?

    我有一个 BaseActivity 它可以通过其他所有活动进行扩展 问题是 每当用户离开 暂停 活动时 我都会将音乐静音 我也不再接听电话 问题是 onPause每当用户在活动之间切换时就会被调用 这意味着应用程序不必要地静音和停止tele
  • gcc 不太可能使用宏

    我正在编写一段关键代码 其逻辑大致如下 if expression is true do something with extremely low latency before the nuke blows up This branch i
  • 快速 log2(float x) 实现 C++

    我需要在 C 中非常快速地实现 log2 float x 函数 我发现了一个非常有趣的实现 而且速度非常快 include
  • VB.NET 是否优化字符串文字的串联?

    如同this https stackoverflow com questions 288794 does c optimize the concatenation of string literals问题 但对于 VB NET 来说 因为我
  • php字符串是值类型吗?

    为什么php的string是值类型 每次将参数传递给函数时 每次进行赋值时 每次连接都会导致字符串被复制时 它都会被复制到各处 我的 NET 经验告诉我 它似乎效率低下 迫使我几乎在任何地方都使用引用 考虑以下替代方案 替代方案1 This
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 线性代数如何在算法中使用?

    我的几个同行都提到 学习算法时 线性代数 非常重要 我研究了各种算法并学习了一些线性代数课程 但我没有看到其中的联系 那么线性代数如何应用在算法中呢 例如 图的连接矩阵可以带来哪些有趣的事情 三个具体例子 线性代数是现代 3D 图形的基础
  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 双端队列与队列速度

    我正在研究 LeetCode 上的一个问题 Here https leetcode com problems moving average from data stream 当我完成这个问题后 我想出了 class MovingAverag
  • 用 C 更快地读取文件

    嗯 我想知道是否有一种比使用 fscanf 更快地读取文件的方法 例如假设我有这个文本 4 55 k 52 o 24 l 523 i 首先 我想读取第一个数字 它给出了接下来的行数 令这个数称为N N 之后 我想读取 N 行 其中有一个整数
  • c++11 正则表达式比 python 慢

    嗨我想了解为什么以下代码使用正则表达式进行分割字符串分割 include
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组
  • 删除队列中的最后一个元素

    我需要删除队列的最后一个元素 我唯一可以使用的操作是 Peek 获取第一个元素而不删除它 Enqueue element 向队列末尾插入一个元素 Dequeue 删除第一个元素 IsEmpty true 或 false 队列是否为空 而且我

随机推荐

  • 如何在 Windows 脚本宿主中使用 jQuery?

    我正在编写一些需要解析大量包含 HTML 片段的文件的代码 看起来 jQuery 对此非常有用 但是当我尝试将 jQuery 加载到 WScript 或 CScript 之类的内容中时 由于 jQuery 对窗口对象的许多引用 它会抛出错误
  • 访问 Node JS Lambda 中的 AWS SSM 参数

    我能够在 NodeJS 中本地从 AWS SSM 参数存储中检索数据 但当我将代码移至 Lambda 时却无法检索数据 我搜索过 但没有找到很多使用 NodeJS 设置 Lambda 且不使用 无服务器 框架的示例 我知道我错过了一些简单的
  • Polymer + Dart2js 不工作

    当我使用 Polymer 库创建新应用程序时 它会生成一个示例项目 该项目在 Dartium 中运行得很好 但是当我编译它时 使用pub build 它不再起作用了 我收到两个 404 错误和一个未捕获的类型错误 这是我在 Chrome 中
  • 使用 JNI 链接静态库

    Java 8 之前的 Java 版本要求本机代码位于共享库中 但我读到 在 Java 8 中可以将静态链接库与 JNI 一起使用 我搜索过示例但找不到任何示例 如何将 JNI 库静态链接到我的 java 应用程序中 Java SE 8规范已
  • asp.net web 表单中的 ASP.Net 路由

    我正在为我的网站使用 ASP Net Web 表单路由 但我想让它更具结构性并使用适当的结构隐藏所有查询字符串 ID 例如Language Category PageName Title例子 www abc com en sports cr
  • 将图像保存到文件

    我正在开发一个基本的绘图应用程序 我希望用户能够保存图像的内容 我想我应该使用 System Drawing Drawing2D GraphicsState img drawRegion CreateGraphics Save 但这对我保存
  • GWT获取应用程序的路径

    我有一个 GWT 应用程序 当我在运行应用程序后部署本地主页时 其主页为 localhost 8888 myapp html 但当我们将其部署到服务器时 在应用程序运行后其主页为 107 20 239 198 8080 myapp myap
  • 如何使用 3rd 方 SDK 遵循 MVP 架构?

    我看过很多项目展示如何在 MVP 中实现登录 但找不到任何与 Google Facebook 登录相关的内容 当登录流程与Android组件生命周期强绑定时我们该怎么办 我看到 MVP 的主要好处是我们在上面构建了一个抽象Context 但
  • 如何在eclipse中添加sbteclipse插件

    我正在使用 sbt 0 13 我想添加 sbteclipse 插件 以便 eclipse 导入我的 sbt 项目 我可以轻松编写我的 scala 代码 在互联网上搜索时我得到了this https github com typesafehu
  • 我有两个带有相应值的 data.frame 索引向量(行、列),构建新 data.frame 的最快方法是什么?

    我有一个包含 3 列的数据框 df1 其中两个表示新 data frame df2 的索引 其余列包含应放置在 df2 中的值 如果我忽略了正确的答案 我很抱歉 df1 lt data frame row c 1 3 1 2 3 col c
  • GRPC:客户端超时

    我正在尝试让客户端在超时的情况下工作 为此 我修改了 async greeter server cpp 和 async greeter client cpp 文件来测试这个概念 我在客户端 在客户端上下文上 设置截止日期 如果超时 我会等待
  • Flex Box 超出边界? [复制]

    这个问题在这里已经有答案了 Hello I have been trying to make a flex box in CSS like the image below but I have a problem that s look l
  • Django 自定义用户模型和用户管理器

    我正在使用 Django 1 5 构建一个 Web 应用程序 我正在使用带有自定义 UserManager 的自定义用户模型 我遵循 Django 官方文档的说明和示例 现在 当我尝试通过以下方式创建新用户时UserManager crea
  • Codeigniter URL 重定向和路由

    我正在尝试使用 Codeighiter 路由重定向 URL 我无法为以下内容编写路由 如果 URL 带有 api some some我想将其重定向到api some some 否则我想将 URL 重定向到 home index 即如果任何
  • AngularJS 指令不起作用

    请在下面找到我写的指令 angular module netVogue directives directive set First Active function return function scope element attrs a
  • 更快的循环方法(“for”和“foreach”)? [复制]

    这个问题在这里已经有答案了 这个问题源于我问上一个问题的原因foreach循环 我有一个很大的字符串数组 比如说数千个 我想迭代该数组并且还能够根据特定条件进行突破 并且我需要最佳性能 一些示例代码 for int i 0 i lt arr
  • 单击按钮的用户脚本

    我想使用greasemonkey 单击 立即购买 按钮 UserScript name script namespace sc include version 1 require http ajax googleapis com ajax
  • 理解 kubernetes 容器上的“stdin: true tty: true”?

    我已经在网上到处做好了准备 但答案并没有得到彻底的解释 我希望这个问题如果得到解答 可以提供对此事的更新和彻底的解释 为什么有人会使用以下参数定义容器 stdin true tty true Also if docker run it 将执
  • jQuery 将光标向后移动“X”个空格

    我需要它 以便当按下按钮时 光标将 1 找到句子的结尾 2 将光标从句末向后移动 x 多个空格 x为变量 这是一个小提琴 gt jsFiddle http jsfiddle net jcP9q HTML span From the end
  • 时间复杂度单循环与多个顺序循环

    今天 我和我的同事就一个特定的代码片段发生了一场小争论 代码看起来像这样 至少 他想象中是这样的 for int i 0 i lt n i Some operations here for int i 0 i lt m i m is alw