for 循环的增长顺序复杂

2024-03-22

对于以下代码片段,N 的增长顺序是多少?

int sum = 0;
for (int i = 1; i <= N; i = i*2)
  for (int j = 1; j <= N; j = j*2)
    for (int k = 1; k <= i; k++)
        sum++;

我发现有 lgN 项,但我一直在评估这部分:lgN(1 + 4 + 8 + 16 + ....)。序列的最后一项是什么?我需要最后一项来计算总和。


您的外循环中有一个几何级数,因此有一个封闭的形式,您想要获取其总和的对数:

1 + 2 + 4 + ... + 2^N = 2^(N+1) - 1

准确地说,你的总和是

1 + ... + 2^(floor(ld(N))

with ld表示以 2 为底的对数。

最外面的两个循环相互独立,而最里面的循环只依赖于i。最内层循环有一次操作(自增),也就是说最内层循环的访问次数等于求和结果。

  \sum_i=1..( floor(ld(N)) ) {
      \sum_j=1..( floor(ld(N)) ) {
          \sum_k=1..2^i { 1 }
      }
  }

    // adjust innermost summation bounds   
= \sum_i=1..( floor(ld(N)) ) {
      \sum_j=1..( floor(ld(N)) ) {
          -1 + \sum_k=0..2^i { 1 }
      }
  }

    // swap outer summations and resolve innermost summation
= \sum_j=1..( floor(ld(N)) ) {
      \sum_i=1..( floor(ld(N)) ) {
          2^i
      }
  }

   // resolve inner summation
= \sum_j=1..( floor(ld(N)) ) {
      2^(floor(ld(N)) + 1) - 2
  }

   // resolve outer summation
= ld(N) * N - 2 * floor(ld(N))

这相当于O(N log N)(表达式中的第二项相对于第一项渐近消失)以 Big-Oh 表示法。

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

for 循环的增长顺序复杂 的相关文章

  • 如何在代码生成过程中简化包含变量的 C 风格算术表达式?

    我正在尝试优化编译器中的表达式求值 算术表达式都是C风格的 并且它们可以包含变量 我希望尽可能简化表达 例如 3 100 A B 100 3 100可以简化为409 300 A B 主要取决于分配律 结合律和交换律 我遇到的主要困难是如何将
  • 这个洗牌算法有什么问题吗?

    我一直在做一些休闲假期计算 我的迷你项目是模拟意大利游戏 tomboli 一个关键的组成部分是对以下过程的模拟 游戏由一名男子控制 他拿着一袋 90 个弹珠 编号为 1 到 90 他从袋中随机取出一颗弹珠 每次向玩家喊出弹珠编号 经过一番思
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • 如何使用 javascript 创建一个 for 循环,返回一个月中剩余天数的新日期对象数组

    对于给定的日期 我需要返回一个数组 其中包含当月剩余的每一天的日期对象 我需要一个for循环创建new Date 对象设置为该月剩余的每一天 将它们添加到数组并返回该数组 我想出了代码来检索该月的剩余天数 但是由于某种原因我无法弄清楚循环
  • 合并空间上接近的路径/线段的算法

    我正在寻找一种用于街道地图制图概括的几何算法 名称 在我的地图数据中 我有许多路径 点的有序列表 由线段连接 这些路径彼此靠近且几乎平行 我如何 1 识别这些 相邻路径 即如何找到比某个阈值更接近的路径 以及 2 将它们合并成一条路径 即如
  • 在 O(n) 时间内运行的指数乘法算法?

    我正在读一本算法教科书 我被这个问题难住了 假设我们要计算值 x y 其中 x 和 y 为正数 分别具有 m 和 n 位的整数 解决该问题的一种方法是执行 y 1 乘以 x 你能给出一个仅使用 O n 乘法步骤的更有效的算法吗 这会是一个分
  • 给定与总和匹配的长度的唯一 3 位数字 (-1,0,1) 序列的数量

    假设您有一个长度为 n 即空格数 的垂直游戏板 你有一个三面骰子 有以下选项 前进一 停留和后退 如果您低于或高于棋盘游戏空间的数量 则该游戏无效 一旦到达棋盘末端 唯一有效的动作就是 停留 给定确切的骰子投掷次数 t 是否可以通过算法计算
  • 当目标是查找某个字符串的所有出现情况时,KMP 最坏情况的复杂度是多少?

    我还想知道哪种算法在查找另一个字符串中所有出现的字符串时具有最坏情况的复杂性 博耶 摩尔算法似乎具有线性时间复杂度 KMP 算法在查找字符串中所有出现的模式时具有线性复杂度 如 Boyer Moore 算法1 如果您尝试在 aaaaaaaa
  • 在无向图中查找强连通分量

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

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 按百分比减少多边形面积

    我有一个由点 x y 组成的多边形 我想做的是将其减少一个百分比 请记住 我不想只是扩大规模 多边形应该有一种内部边界 其宽度取决于百分比 该内部边界被多边形切断 谁知道可以实现这一目标的算法 输入 点数组 百分比 输出 点数组 你所寻求的
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • cordova 使用什么 js“引擎”?

    Cordova 使用什么 JS 引擎 它是特定于平台的还是跨所有平台的一个标准 意味着 iOS 的 safari 和 Android 的 chrome 以及 Windows 可能的 IE 标准 或者跨所有平台的 Cordova JS 引擎
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 从日志文件中获取前 100 个 URL

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

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 如何循环遍历颜色数组以更改按键背景(按下/向下)

    互联网 如果这与其他人没有什么关系 请原谅我 但我会将其留在这里 以防这是一个有效的问题 我正在尝试创建一个文本区域字段 其中用户每次按下键 a z 都会触发背景颜色更改 在数组中列出 我一直在用 JQuery 做这件事 我想我已经很接近了

随机推荐

  • 计算在鼠标光标位置放大的视图偏移

    我有一个 画布 用户可以在上面绘制像素等 它运行良好 但我的缩放功能当前使用相同的原点 无论鼠标的位置如何 我想实现类似 Google 地图缩放行为的功能 也就是说 缩放的原点应始终是鼠标光标的位置 我目前拥有的 https i stack
  • Windows7 凭据提供程序在硬件事件上自动登录用户

    我正在为 Windows 7 开发自定义凭据提供程序 我的目标是在发生特定硬件事件时自动登录用户 我阅读了所有与此相关的 MSDN 文章 并实现了一个简单的凭据提供程序 该提供程序与外部设备交互以获取用户名和密码并将其传递给 WinLogo
  • 从第二个元素开始对 python 中的列表进行排序

    我想对列表进行排序 但我希望对其进行排序 不包括第一个元素 例如 a T 4 2 1 3 现在我希望对列表进行排序 但第一个元素应保留在其位置 a T 1 2 3 4 我知道这可以通过使用排序算法来完成 但是是否有一种单行方法或更多方法可以
  • Google Cloud Dataflow (Python):读取和写入 .csv 文件的函数?

    我无法弄清楚 GCP Dataflow Python SDK 中读取和写入 csv 文件 或任何非 txt 文件 的精确函数 对于BigQuery 我已经弄清楚了以下功能 beam io Read beam io BigQuerySourc
  • 当引用改变时如何重新渲染

    Code import DrawControl from react mapbox gl draw export default function MapboxGLMap let drawControl null return
  • Toast LENGTH_LONG 和 LENGTH_SHORT 的持续时间是多少

    我需要 LENGTH LONG 和 LENGTH SHORT 的确切持续时间 以毫秒 ms 为单位 我还需要知道 LENGTH LONG 的 Toast 消息的持续时间在任何手机和任何 API 版本中是否具有相同的持续时间 有人知道持续时间
  • 可观察管道中的异常处理

    我创建了一个可观察对象 其中包含通过运行异步方法将一个项目转换为另一个项目 IObservable
  • ffmpeg:记录/捕获流并同时进行场景检测

    是否可以同时捕获 录制 RTSP 流and使用单个 ffmpeg 命令捕获场景变化事件 我几乎可以做我想做的事 ffmpeg i rtsp mystream map 0 v map 0 a c v copy c a copy f segme
  • 找不到参数的方法 api() [目录 'libs']

    打开文件 这是我的 gradle 文件 apply plugin com android application android compileSdkVersion 27 buildToolsVersion 27 0 1 defaultCo
  • 如何将 _ITERATOR_DEBUG_LEVEL 添加到 CMake?

    我是 CMake 新手 我想将 ITERATOR DEBUG LEVEL 设置为 0 发布版本 和 2 调试版本 以修复尝试编译依赖于其他项目的项目时出现的问题 Error iterator debug level 值 2 与值 0 不匹配
  • Angular:ngc 还是 tsc?

    我一直在使用tsc 但是看到angular io强调ngc 我想知道两者是否有优势 或者我是否应该选择其中一个 提前致谢 tsc 和 ngc 具有不同的目的 并不是要选择其中之一 tsc 是一个 TypeScript 编译器 如果您的应用程
  • C# 从 OpenXML 返回内存流,导致损坏的 Word 文件

    我对来自 OpenXML 的 MemoryStream 有疑问 如果我在一个方法中完成所有步骤 我可以成功打开 Word 文件 更改它并通过 HttpResponse 下载它 但是 如果我尝试通过返回 MemoryStream 在两个不同的
  • 如何使用Android自动填充API

    我已经使用 android webview 组件构建了一个小型浏览器 并且希望使用 Android AutoFill API 集成密码 凭据管理器支持 我已阅读文档 但完全迷失了方向 找不到任何与 webviews 等复杂事物集成的示例 这
  • 嵌套 TagBuilder -作为 TagBuilderTree-

    TagBuilder 是构建 HTML 元素的一个很好的实现 但是某些 HTML 元素可以有其他元素 我称之为 子元素 我无法从 Mvc 类中找到任何类 问题 我应该实现几个支持嵌套标签的类 TagBuilderTree 和 TagBuil
  • 在 Visual Studio C++ 项目中在哪里输入 DLL 依赖项?

    我正在将一些在 Linux 和 Mac 上运行的 Qt 项目文件 pro 转换为 Visual Studio 项目文件 vcproj Qt Visual Studio 加载项可以很好地转换除 DLL 依赖项之外的所有内容 我应该将它们放在
  • 关于变量/函数命名约定的思考

    我一生都在断断续续地编码 我主要编写 Perl 代码 但也编写一些 Java PHP C C 我什至尝试过 Emacs Lisp 并且偶尔也编写过 shell 脚本 然而 我从来没有真正参与这个主题来获得任何专业知识 其他事情对我来说有更高
  • Android 从 java 代码设置文本视图颜色

    我有一个列表 并为此编写了一个自定义适配器 我想为此设置一些文本颜色 例如橙色代码 F06D2F 我正在展示我的代码片段getView method TextView text new TextView this context text
  • 获取单元测试时引用项目的路径

    我正在尝试使用单元测试来测试我的 ASP Net Web 应用程序中的类的功能 此类从硬盘驱动器加载一些文件 以执行 xsl 转换 Xsl GetXSLFromFile AppDomain CurrentDomain BaseDirecto
  • 如何在 Java 中解析 EDIFACT? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 解析 EDIFACT 可能是一项艰巨的任务 如何从 EDIFACT 文件正确创建语法和语义正确的树 ww
  • for 循环的增长顺序复杂

    对于以下代码片段 N 的增长顺序是多少 int sum 0 for int i 1 i lt N i i 2 for int j 1 j lt N j j 2 for int k 1 k lt i k sum 我发现有 lgN 项 但我一直