此 for 循环的时间复杂度: for (i = 2; i < N; i = i * i)?

2023-12-27

我们现在正在学习时间复杂度,而我在这个例子中遇到了很多麻烦。

for (i = 2; i < n; i = i * i)
{
     ... do something ...
}

教授说这是 O(sqrt(N)),但我不确定我是否相信。毕竟,如果 N=16,它只运行 2 次,而不是 4 次,对吧?

我的解决方法: 2^(2k) = N,其中 k 是循环运行的次数。 除去常数因子,k 运行 log(N) 次。 我这里哪里出错了?感谢您对此事的任何建议。


你是正确的,你的老师是错误的(至少,他们的界限不严格),我喜欢你所做的分析,但我认为你在最后一步得出了错误的结论。

很高兴您一路上查看了所有中间值。你是正确的,j 所采用的值序列是 2、4、16、256 等。如果我们将其重写为 2 的幂,请注意该序列采用的值

21, 22, 24, 28, ...

More generally, after k iterations of the loop, the value of j is 22k (as opposed to 22k, as you initially wrote). This means that to determine the number of loop iterations, you want to determine when

22k = n.

在这里,你必须采取two对数来解决这个问题:

22k = n

2k = lg n

k = lg lg n

所以循环的迭代次数为O(log log n),低于你的老师给你的 O(√n) 和你想出的 O(log n)。

物有所值,当您重复计算一个数字的平方根时,您经常会看到 O(log log n) 的行为 https://stackoverflow.com/questions/16472012/what-would-cause-an-algorithm-to-have-olog-log-n-complexity(你可以在一个数下降到一个常数之前对其求平方根 O(log log n) 次),所以如果你反向运行这个并继续对一个值进行平方,你会看到 O(日志日志n)出现。

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

此 for 循环的时间复杂度: for (i = 2; i < N; i = i * i)? 的相关文章

  • 关于比奈公式的一些知识

    为什么比奈公式 O LogN 但不完全是 在时间上比迭代方法 O n 效果更差 static double SQRT5 Math Sqrt 5 static double PHI SQRT5 1 2 public static int Bi
  • 确定递归函数的复杂性(大 O 表示法)

    我明天有计算机科学期中考试 我需要帮助确定这些递归函数的复杂性 我知道如何解决简单的情况 但我仍在努力学习如何解决这些更困难的情况 这些只是我无法解决的一些示例问题 任何帮助将不胜感激 并对我的学习有很大帮助 谢谢 int recursiv
  • 指数时间复杂度的真实示例

    我正在寻找一个直观的 现实世界的问题示例 该问题需要 最坏情况 指数时间复杂度来解决我正在做的演讲 以下是我提出的其他时间复杂度的示例 其中许多取自这个问题 https stackoverflow com questions 1592649
  • 如何将两个已排序数组合并为一个已排序数组? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这是我在采访中被问到的问题 这是我提供的解决方案 public static int merge int a int b int an
  • 我可以检查子序列是否比 O(n*n) 更快

    所以我的问题是主题的名称 是否存在一种算法可以比 O N 2 更快地检查 B 是否是 A 的子序列 例如 O NlogN 或简单的 O N 找到的唯一方法是简单的暴力 for int i 0 i lt a Length b Length i
  • 在对数时间内找到未排序数组中的最小值

    是否有一种算法方法可以在对数时间 O logn 内找到未排序数组的最小值 或者只能在线性时间内实现 我不想并行 Thanks Michael 如果列表未排序 则您的搜索必须至少是线性的 每个项目你必须至少看一遍 因为任何你没看过的东西mig
  • 计算数组中向量之间的最大距离

    假设我们有一个包含 n 个向量的数组 我们想要计算这些向量之间的最大欧氏距离 最简单 天真的 的方法是迭代数组 并为每个向量计算其与所有后续向量的距离 然后找到最大值 然而 这个算法会增长 n 1 相对于数组的大小 对于这个问题还有其他更有
  • lseek() 的复杂度是 O(1) 吗?

    我知道我的问题在这里有答案 QFile 寻道性能 https stackoverflow com questions 6171403 qfile seek performance 但我对这个答案并不完全满意 即使在查看了以下实现之后gene
  • 检查一个列表是否是另一个可处理重复项的列表的轮换

    我有这个函数来确定一个列表是否是另一个列表的旋转 def isRotation a b if len a len b return False c b 2 i 0 while a 0 c i i 1 for x in a if x c i
  • 面临减法时的算法复杂性

    我必须简化以下公式才能获得算法的时间复杂度 n 2 n 3 是否有任何适用的规则可以让我进一步简化这个表达式为更 常见 的 n 2 或类似的东西 我假设这就是结果 可能是错误的 我根本不知道如何处理这里的减法 通常 如果两个值相加 您只考虑
  • 对 Big O 表示法仍然有点困惑

    所以我一直在尽力理解 Big O 表示法 但仍然有一些事情我感到困惑 所以我一直读到如果某件事是 O n 那么它usually指的是算法的最坏情况 但它不一定要指最坏的情况 这就是为什么我们可以说插入排序的最佳情况是 O n 但是 我无法真
  • Big O 用于有限、固定大小的可能值集

    这个问题 https stackoverflow com questions 12305028 java what is the best way to find first duplicate character in a string引
  • Java TreeMap时间复杂度-lowerKey

    时间复杂度是多少lowerKey Java实现中的操作TreeMap 我认为它是 log n 但我在文档中找不到它 更基本操作的复杂性已有详细记录 此实现提供了有保证的 log n 时间成本 containsKey 获取 放置和删除操作 顺
  • O(mn) 比 O((m+n)^2) 更好吗?

    算法的输入是m and n 我的算法的时间复杂度是O mn 我有一个时间复杂度为的基准算法O m n 我的实现在时间复杂度方面是否优于基准 许多评论者和回答者希望只考虑以下情况 m n或者至少当它们通过一个常数因子相关时 这不是它的工作原理
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • PHP 内置函数复杂性(isAnagramOfPalindrome 函数)

    我在过去的两个小时里一直在谷歌搜索 但找不到 php 内置函数时间和空间复杂度的列表 我有回文字谜 https stackoverflow com questions 4628386 what is the best algorithm t
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 渐近符号的除法运算

    Suppose S n Big Oh f n T n Big Oh f n both f n 相同地属于同一类 我的问题是 为什么S n T n Big Oh 1 是不正确的 考虑S n n 2 and T n n 然后两个S and T
  • JavaScript 数组扩展语法的时间复杂度是多少?

    我想知道在 JavaScript 中使用数组扩展的时间复杂度是多少 是线性 O n 还是常数 O 1 下面的语法示例 let lar Math max nums 传播称为 Symbol iterator 有关对象的属性 对于数组 这将迭代数

随机推荐

  • 在聚合框架 C# 中使用 Facet

    我想对我的数据创建一个聚合 以获取 Net 应用程序中书籍集合的特定标签的总计数 我有以下书籍课程 public class Book public string Id get set public string Name get set
  • 带向量极限的四边形

    我想使用quad作为限制列表没有 for 循环 作为一个基本示例 T 1 2 3 f x x 2 quad 0 T 1 f 计算我需要的内容 但我想将quad 0 T 1 f quad 0 T 2 f quad 0 T 3 f 保存为向量
  • 在本机反应中更新/更改状态对象的最佳方法?

    更新 State 对象深处的嵌套属性的最佳方法是什么 constructor this state someprop quadrangle rectangle width 我想更新矩形对象的宽度 this state quadrangle
  • Xcode 没有嵌入框架部分

    我有问题 我正在尝试在我的 ios xcode 项目中实现 Amazon 框架 并且我还需要将它们添加到 构建阶段 gt 嵌入框架 部分中 但我的 xcode 窗口中没有选项 这是截图 这怎么可能 即使我创建新项目 问题仍然存在 您好 在您
  • 与内联块未对齐(其他元素被推下)

    我正在尝试将小盒子排成一行 这些盒子每个里面有大约 2 个元素 在某些情况下 第一个元素的文本太多 以至于它分成两行 如果发生这种情况 该特殊行中的所有其他块如下所示 长话短说 这是一个例子 http jsfiddle net PMRQ5
  • 如何在 JOptionPane 的 ok 按钮上添加监听器? [复制]

    这个问题在这里已经有答案了 如何在单击 确定 按钮时添加侦听器JOptionPane INFORMATION MESSAGE 我的 JOptionPane 是 JOptionPane showMessageDialog null Your
  • Xbox One 控制器输入到 UWP 应用程序

    我一直在尝试使 Xbox One 控制器与 UWP 应用程序交互 并研究了 Gamepad 类 基于评论中提到的建议 Windows UWP 中对 Xbox One 的控制器支持 https stackoverflow com questi
  • ExecutorService,避免任务队列太满的标准方法

    我在用ExecutorService为了方便并发多线程程序 采取以下代码 while xxx ExecutorService exService Executors newFixedThreadPool NUMBER THREADS Fut
  • EF 7 - 新的 ExecuteDelete 和 ExecuteUpdate 方法不适用于内存数据库

    我正在使用新的 EF 7ExecuteDelete and ExecuteUpdate功能而且它们都很棒 但是当我尝试为使用它们的函数编写单元测试时 这些测试崩溃了 我在 NET Core 7 上使用 EF 7 0 1 Microsoft
  • auto* 的类型推导规则是什么?

    类型推导规则是什么auto 考虑以下 int x 64 int px x auto v1 x auto gt ok v1 is int auto v2 px auto gt is v2 int auto v3 px auto gt is v
  • PHP 中的 Twitter 机器人有问题吗?

    我已经用 php 构建了一个 Twitter 机器人 它能够接收消息并响应消息 但出现了这个问题 当我向机器人发送消息时 我必须刷新机器人脚本才能让机器人回复 我希望机器人能够不断检查任何新传入的消息并做出相应的响应 我该如何修复这个错误
  • 复制/移动省略与显式删除的复制/移动构造函数

    我想知道复制 移动省略何时适用 或允许适用 显式deleted 复制 移动构造函数和非deleted 复制 移动构造函数 具体如下 可以明确地deleted 复制 ctor 或移动 ctor 被删除 是否尝试从另一个相同类型的对象或临时对象
  • 沙盒应用程序和 NSOpenPanel 导致崩溃

    我正在我的 Cocoa 应用程序中做一个简单的文件打开面板 我启用权利和应用程序沙箱 但在 OS X 10 9 上 当应用程序应使用以下命令打开对话框时NSOpenPanel 它崩溃了 应用具体信息 由于未捕获的异常 NSObjectNot
  • 如何在 XSLT 1.0 中查找当前日期

    我在检索 XSLT 代码中的当前日期时遇到麻烦 我正在使用 1 0 版和 MSXSL exe 应用程序来触发我的 xslt 代码 我尝试使用以下代码行来实现此功能 但它不起作用 貌似1 0版本不支持当前日期功能 您能否提供适用于 xslt
  • 在 JavaScript 中检查文本框值是字符串还是数字

    基本上我有以下代码
  • ld:重复符号

    我正在做一个学校项目 我从 Xcode 中收到一些奇怪的错误 我正在使用 TextMate 的 Command R 功能来编译该项目 编译似乎工作正常 但链接失败并出现我不明白的错误消息 ld输出 ld path final build f
  • 在 Kivy 中创建动态绘制的线条

    这是我的帖子的延续 在 Kivy 中使用和移动小部件 按钮 https stackoverflow com questions 25273046 using and moving widgets buttons in kivy 我想在 Ki
  • 如何在 statefulset 中设置 kubernetes pod 的主机名

    我正在使用 Statefulset 并且启动了多个 Pod 但它们不是彼此的复制品 我想设置 pod 的主机名 并将这些主机名作为环境变量传递给所有 pod 以便它们可以相互通信 我尝试在 pod 规范下使用主机名 但主机名永远不会设置为指
  • CUDA 共享内存问题(以及将 CUDA 与 python/ctypes 一起使用)

    不知怎的 当我修改时d updated water flow map在下面的代码中 d terrain height map也被修改 相反 更改两个数组的分配顺序可以解决问题 但我认为这只是掩盖了问题的根本原因 cudaCheck cuda
  • 此 for 循环的时间复杂度: for (i = 2; i < N; i = i * i)?

    我们现在正在学习时间复杂度 而我在这个例子中遇到了很多麻烦 for i 2 i lt n i i i do something 教授说这是 O sqrt N 但我不确定我是否相信 毕竟 如果 N 16 它只运行 2 次 而不是 4 次 对吧