这三个for循环的复杂度是多少?

2024-02-21

Having:

  • 输入数组A[1...n]
  • N的长度A

算法:

for(int i=N; i>0; i--) { // Loop 1
    for(int j=1; j<N; j=j*2) { // Loop 2
        for(int k=0; k<j; k++) { // Loop 3
            // constant number of operations
        }
    }
}

我知道那个循环1 has O(N)时间复杂度。

For循环2我会说时间复杂度是O(logN).

for 循环的复杂度是多少3 (and 2如果我错了)以及算法?


O(N^2)

由于相互依存j and k (at k<j)你不能单独考虑loop2和loop3。让N=2^m,为了计算简单。所以,j将是 1, 2, 4, ..., 2^(m-1),loop3 执行j每次达到时。所以loop2和loop3组合起来执行

  1   + 2   + 4   + ... + 2^(m-1)
= 2^0 + 2^1 + 2^2 + ... + 2^(m-1)

这是一个几何级数 http://en.wikipedia.org/wiki/Geometric_progression,并且等于2^m - 1 = N - 1,即 O(N)。现在放入loop1,O(N),我们得到O(N^2)。

Edit:

这是我运行来测试这个的 perl 代码

print "N\tExpected\tCounted\n";

for my $N (10, 100, 1024, 8192)
{
    my $count = 0;
    for(my $i=$N; $i>0; $i--)
    {
        for(my $j=1; $j<$N; $j*=2)
        {
            for(my $k=0; $k<$j; $k++)
            {
                $count++;
            }
        }
    }
    my $expected_count = $N*$N - $N;
    print "$N\t$expected_count\t$count\n";
}

和输出:

N       Expected        Counted
10      90              150
100     9900            12700
1024    1047552         1047552
8192    67100672        67100672

请注意,我们不会完全达到预期,除非N=2^m.

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

这三个for循环的复杂度是多少? 的相关文章

  • 在 C 中打印字符串的所有排列

    我正在学习回溯和递归 并且我陷入了打印字符串所有排列的算法 我用以下方法解决了它贝尔算法 http programminggeeks com bell algorithm for permutation 用于排列 但我无法理解递归方法 我在
  • 硬币兑换的空间优化解决方案

    给定一个值 N 如果我们想要找 N 分钱 并且我们有无限供应每种 S S1 S2 Sm 价值的硬币 我们可以有多少种找零方式 硬币的顺序并不重要 例如 对于 N 4 且 S 1 2 3 有四种解 1 1 1 1 1 1 2 2 2 1 3
  • 计算标签云中标签字体大小的公式是什么?

    我有一个标签云 我需要知道如何更改最常用标签的字体大小 我需要设置最小字体大小和最大字体大小 您可以使用线性或对数评估与某个标签相对于最大标签关联的项目数量 将其乘以最小和最大字体大小之间的差值 然后将其添加到最小字体大小 例如 伪代码中的
  • 以与版本页面上相同的方式区分两个字符串的算法是什么?

    我正在尝试按短语区分两个字符串 类似于 StackOverflow 在版本编辑页面上区分两个字符串的方式 执行此操作的算法是什么 是否有 gems 或其他标准库可以实现此目的 编辑 我见过其他比较算法 Differ http github
  • Java TreeMap时间复杂度-lowerKey

    时间复杂度是多少lowerKey Java实现中的操作TreeMap 我认为它是 log n 但我在文档中找不到它 更基本操作的复杂性已有详细记录 此实现提供了有保证的 log n 时间成本 containsKey 获取 放置和删除操作 顺
  • 如何检查一个盒子是否适合另一个盒子(允许任何旋转)

    假设我有两个盒子 每个盒子都是一个长方体 http en wikipedia org wiki Rectangular cuboid aka长方体 我需要编写一个函数来决定盒子是否具有尺寸 一 二 三 可以装入具有尺寸的盒子中 甲 乙 丙
  • 无痛“算法分析”培训? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在大学时曾有过一次关于 算法分析 课程的痛苦经历 但最近发现在大学中需要它真实世界 无论如何 我正在
  • 算法:最大计数器

    我有以下问题 您有 N 个计数器 最初设置为 0 并且您对它们有两种可能的操作 increase X 计数器 X 加 1 max counter 所有计数器都设置为任何计数器的最大值 给出一个包含 M 个整数的非空零索引数组 A 该数组代表
  • 二进制字符串到十进制字符串

    下午好 如何将字符数多于语言最大整数类型中位数的二进制字符串转换为十进制字符串 换句话说 假设你有字符串 111001101001110100100 1001001111011100100 并且您不能先将其转换为整数 那么您将如何以 10
  • 如何找到最长的回文子序列(不是它的长度)

    我想找出字符串中最长的回文子序列 我到处都找到了找出子序列长度的算法 并声明该算法也可以扩展以返回子序列 但我没有找到如何实现的 有人能解释一下我怎样才能得到序列吗 既然你提到了链接最长回文子序列 http www geeksforgeek
  • 以一定角度遍历二维数组

    通常我们按行或列遍历数组 但这里我想以角度遍历它 我会尝试解释我的意思 因此 假设角度是 45 度 那么它会搜索为 0 0 then 0 1 1 0 then 0 2 1 1 2 0 等等 抱歉 无法上传图像 因为我是新用户 不允许这样做
  • 如何计算两个ip之间的主机数量? C#

    我有两个ip 1 1 1 1 1 2 4 4 4 4 显然这只是一个例子 这是一个动态计算器 如果子网掩码不相关 我如何计算所述 ip 之间的主机数量 要计算 理论 IP 地址的数量 您需要将每个 IP 地址转换为其 32 位整数格式 这实
  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • C 中的菱形数组排序

    我有以下 C 语言作业 我基本上需要一种方法而不是解决方案 我们有一个 13 x 13 的数组 在数组中 我们有一个需要考虑的菱形形状 该菱形之外的所有内容都初始化为 1 不重要 下面的 5 x 5 数组示例 x x 1 x x x 2 2
  • 使用FFT算法计算

    给定在平面上的点 1 0 2 0 n 0 上发现的一组 n 个粒子电荷载流子 在 i 0 点发现的粒子电荷记为 Qi 作用在粒子上的力由以下公式给出 C is a Coulomb s constant 给出一个算法来计算 Fi 对于总复杂度
  • 从日志文件中获取前 100 个 URL

    我的一位朋友在接受采访时被问到以下问题 谁能告诉我如何解决它 我们有一个相当大的日志文件 大约 5GB 日志文件的每一行都包含一个用户在我们网站上访问过的 URL 我们想要找出用户访问最多的 100 个 URL 怎么做 如果我们有超过 10
  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 线性代数如何在算法中使用?

    我的几个同行都提到 学习算法时 线性代数 非常重要 我研究了各种算法并学习了一些线性代数课程 但我没有看到其中的联系 那么线性代数如何应用在算法中呢 例如 图的连接矩阵可以带来哪些有趣的事情 三个具体例子 线性代数是现代 3D 图形的基础
  • 在 O(n) 时间内找到 n x n 矩阵中的局部最小值

    所以 这不是我的家庭作业问题 而是取自 coursera 算法和数据结构课程的未评分作业 现已完成 You are given an n by n grid of distinct numbers A number is a local m

随机推荐

  • 为什么我的代码只写最后一行?

    我正在向文件写入一个列表 但它只写入最后一行 这是我的代码 我使用的是Python 2 7 server os listdir contents of the current directory for files in server pu
  • 如何将 C# 哈希字节数组转换为字符串以传递给 API?

    我有许多值必须组合成 SHA256 哈希才能传递到 Web 服务 使用 Encoding ASCII GetBytes allparametershere 将这些值组合成字节数组 然后通过 myHashMethod ComputeHash
  • sql左连接返回

    我正在尝试在 2 个表上运行左连接 我没有分组依据 我唯一的条件是在第二张桌子上 但是 返回的行数少于第一个表 左连接不是应该从第一个表中获取所有数据吗 这是我的 SQL select from tbl a A left join tbl
  • 如何在 Haskell 中编写 Ctrl-C 处理程序?

    我尝试了以下方法 import System Exit import System Posix Signals import Control Concurrent threadDelay main IO main do installHan
  • 为什么在 JS 中使用 NULL 和逻辑运算符会抛出错误

    这是我正在测试的代码 工作正常 document write 1 undefined prints undefined document write 1 3 prints 3 document write 1 true prints tru
  • 假装客户端无法拨打电话 - Kubernetes

    我已经在 Windows 的 docker desktop 上部署了微服务 并且 feign 无法调用另一个服务 个人MS通过假装呼叫组织MS 我可以在 person pod 的日志中看到 2019 11 10 12 58 34 000 I
  • 如何使用从字符串到 float64 的类型转换来解码 JSON

    我需要使用浮点数解码 JSON 字符串 例如 name Galaxy Nexus price 3460 00 我使用下面的 Golang 代码 package main import encoding json fmt type Produ
  • 如何防止将 Windows 临时删除关闭文件上打开的内存映射刷新到磁盘

    更新 2 TL DR 有没有办法防止窗口脏页FILE FLAG DELETE ON CLOSE临时文件是否会因关闭在这些文件上打开的内存映射而被刷新 Yes 如果您在初始创建后不需要对文件本身执行任何操作 并且您实现了一些命名约定 则可以通
  • 抽象工厂与工厂方法(范围)

    工厂方法是类设计模式 抽象工厂使用了许多工厂方法 为什么抽象工厂是对象设计模式 而不是类设计模式 抽象工厂将实例化推迟到哪个对象 抽象工厂模式将产品对象的创建推迟到 ConcreteFactory 子类 由于客户端期望 Factory 类
  • 如何在Android中删除SIM卡中的联系人

    我执行了以下代码来从 SIM 卡中删除选定的联系人 但它不会删除 也不会抛出任何错误 protected void DeleteContacts ArrayList
  • 闪亮仪表板的选项卡框 CSS

    我正在尝试更改选项卡样式tabBox in shinydashboard 我能够更改未选择的选项卡的背景 但无法更改所选选项卡的背景或每个选项卡中显示的文本 这是我添加到 custom css 文件中以更改未选择的选项卡背景的内容 nav
  • module.export和export有什么区别

    有什么区别module export and export 如果 module export 对象中有一些属性怎么办 将要export xx那么无效吗 首先它是exports and module exports并不是export and
  • 在Python中自动下载所需模块的最简单方法?

    我想发布一个我编写的 python 模块 它依赖于几个包 最简单的方法是什么 以便以编程方式下载这些软件包 以防它们在正在运行的系统上不可用 大多数这些模块应该可以通过 easy install 或 pip 或类似的东西获得 我只是想避免用
  • 对相似的时间序列进行聚类?

    我有 10 20k 个不同的时间序列 24 维数据 一天中每个小时的一列 并且我对表现出大致相同活动模式的时间序列进行聚类感兴趣 我最初开始实施动态时间扭曲 DTW 是因为 并非我所有的时间序列都完全一致 出于我的目的 两个稍微偏移的时间序
  • 通过IP地址查找位置Nodejs mongodb [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试查找 IP 地址的位置 IP 地址将通过前端 Android iOS 应用程序发送到 API
  • pkgdown 小插图代码块间距

    我在运行时遇到代码块输出问题pkgdown build site 与所有默认选项 块被渲染在html内容 https mountainmath github io cancensus articles Making maps with ca
  • 使用 IIS 10 设置 Laravel 5.4

    我想在 Windows Server 2016 上运行的 IIS 10 上部署 Laravel 项目 最简单且仍然安全的方法是什么 我就是这样做的 我不确定这是正确的方法 安装 URL 重写模块 https www iis net down
  • 设置 /p 空答案崩溃

    我是新来的 所以我会尽力做到最好 所以我正在尝试制作一个基于文本的 MS DOS 的 RPG 而且我进展得很好 因为我刚刚看到如果用户在 set p 处输入了无效的输入 比如一个空答案 只需按 Enter 或一个不在 IF 上的答案 批处理
  • JDI、Java 字节代码检测和 Java 代理(JWDP、JVMTI)

    我是调试器 仪器和 JVMTI 领域的新手 所以我对他们没什么疑问 JDI java调试器接口 JWDP javaagent和本机代理 JVMTI 有什么区别 Java Instrumentation API 在图中的位置 我正在使用 JD
  • 这三个for循环的复杂度是多少?

    Having 输入数组A 1 n N的长度A 算法 for int i N i gt 0 i Loop 1 for int j 1 j