两个简单递归函数的 Big-O 表示法

2023-12-29

我在 Python 中有两个递归函数,只是想知道它们的大 O 表示法。这些的大 O 是什么?

def cost(n):
    if n == 0:
        return 1
    else:
        return cost(n-1) + cost(n-1)

def cost(n):
    if n == 0:
        return 1
    else:
        return 2*cost(n-1)

让我们使用递归关系来解决这个问题!第一个函数的运行时可以递归地描述为

T(0) = 1

T(n + 1) = 2T(n) + 1

也就是说,基本情况需要一个时间单位才能完成,否则我们会对问题的较小实例进行两次递归调用,并进行一些设置和清理工作。展开这个递归中的一些项,我们得到

  • T(0) = 1
  • T(1) = 2T(0) + 1 = 2 + 1 = 3
  • T(2) = 2T(1) + 1 = 2 × 3 + 1 = 7
  • T(3) = 2T(2) + 1 = 2 × 7 + 1 = 15

This series 1, 3, 7, 15, ... might look familiar, since it's 21 - 1, 22 - 1, 23 - 1, etc. More generally, we can prove that

T(n) = 2n+1 - 1

We can do this by induction. As our base case, T(0) = 1 = 21 - 1, so the claim holds for n = 0. Now assume that for some n that T(n) = 2n+1 - 1. Then we have that

T(n + 1) = 2T(n) + 1 = 2(2n+1 - 1) + 1 = 2n+2 - 2 + 1 = 2n+2 - 1

And we're done! Since this recurrence works out to 2n+1 - 1 = 2(2n) - 1, we have that the runtime is Θ(2n).

第二个函数的运行时可以递归地描述为

T(0) = 1

T(n + 1) = T(n) + 1

展开一些术语:

  • T(0) = 1
  • T(1) = T(0) + 1 = 1 + 1 = 2
  • T(2) = T(1) + 1 = 2 + 1 = 3
  • T(3) = T(2) + 1 = 3 + 1 = 4

这给出了 1, 2, 3, 4, ...,所以更一般地说,我们可能会猜测

T(n) = n + 1

我们可以再次归纳证明这一点。作为基本情况,如果 n = 0,则 T(0) = 1 = 0 + 1。对于归纳步​​骤,假设对于某些 n,T(n) = n + 1。然后

T(n + 1) = T(n) + 1 = n + 1 + 1 = n + 2

我们就完成了!由于运行时间为 n + 1,因此运行时间为 θ(n)。

希望这可以帮助!

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

两个简单递归函数的 Big-O 表示法 的相关文章

随机推荐

  • 制作文件警告,覆盖目标命令

    作为 makefile 的一部分 我想生成目标的调试或发布版本 从功能上来说 一切正常但是 我在运行 make 时收到警告 12 SRC shell echo src cpp 13 SRC shell echo TEST ROOT cpp
  • 安装 npm cypress-mongodb 时出现问题

    我正在尝试设置插件cypress mongodb在我们的 cypress 框架上使用 但我遇到了太多问题 我已经安装并配置了插件文档 https www npmjs com package cypress mongodb 但是当我启动 cy
  • 无法删除或更新父行:外键约束失败(hibernate xml 映射)

    我想删除用户所属的所有组 但目前不起作用 我认为在映射 User hbm xml 或 Group hbm xml 级别缺少一些东西 但我不知道 错误是 无法删除或更新父行 外键约束失败 sharedmap groupe 约束FK gq7wi
  • extern"C" 与 extern 的区别

    我是否使用有什么区别extern C 整个标头的说明符 或指定extern对于每个功能 据我所知 没有 因为只有函数和变量可以外部链接 所以当我使用extern每个函数原型和外部变量之前都有说明符 我不需要使用全局extern C 宣言 示
  • 挂钩 Drupal 注册并根据业务逻辑验证用户信息

    我想挂接到注册模块 我已经拥有一个包含 50000 个使用我的旧网站的用户的数据库 现在我正在迁移到 Drupal 我还没有将条目迁移到 drupal 数据库 我将检查我的旧数据库 当用户尝试在 Drupal 中注册时 我需要检查他提供的用
  • 如何在 CALayer.contents 中添加 Stretchable UIImage?

    我有一个 CALayer 我想向其中添加一个可拉伸的图像 如果我只是这样做 layer contents id UIImage imageNamed grayTrim png resizableImageWithCapInsets UIEd
  • 自定义 MVVM 实现对比棱镜

    这个问题的灵感来自这个封闭的问题 Prism 实际上为开发者提供了什么 值得吗 https stackoverflow com questions 6242156 what does prism actually offer the dev
  • 如何在Eclipse上使用Papyrus生成代码?

    我将 Papyrus 安装在here http www eclipse org modeling mdt papyrus updates index php 那么如何使用Papyrus生成代码呢 要从 UML 生成 java 代码 您可以按
  • string.Replace(string, string) 是否创建额外的字符串?

    我们需要将包含日期的字符串转换为dd mm yyyy格式化为ddmmyyyy格式 如果您想知道为什么我将日期存储在字符串中 我的软件会处理批量交易文件 这是银行使用的基于行的文本文件格式 我目前正在这样做 string oldFormat
  • OpenSSL:无法验证 Experian URL 的第一个证书

    我正在尝试使用 OpenSSL 客户端验证 Ubuntu 10 10 中与 Experian 的 SSL 连接 openssl s client CApath etc ssl certs connect dm1 experian com 4
  • 如何在 VI 中整理 HTML 文件的缩进?

    我该如何修复他巨大的html文件的缩进 这些文件都乱七八糟的 我尝试了平常的 gg G command https stackoverflow com questions 506075 how do i fix the indentatio
  • 如何使用 DML 语法更新 BigQuery 中的嵌套记录?

    我有以下 BigQuery 架构 并且我正在尝试更新event dim date field 我使用标准 SQL 和新的 BigQuery DML 尝试了以下查询 UPDATE sara bigquery examples app even
  • Laravel Socialite - 谷歌登录失败“缺少必需的参数:代码”

    我在使用 Laravel Socialite 通过 Google API 登录用户时遇到了这个奇怪的问题 一切配置看似正常又普通 但我不断发现 错误缺少必需的参数 代码 但在本地主机上工作正常 Localhost Server 自动重定向的
  • 如何从我的应用程序加载cocoa dylib并调用dylib的方法

    我没有找到任何关于在运行时创建和加载 dylib 的教程 只是从苹果我看到了这一点dlopen将打开dylibs 我创建了一个可可动态库并添加了方法说 void displayMethod 我很困惑 比如我是否只需要复制 dylib文件到我
  • 如何减小apk的大小

    我的资源和可绘制对象只有 2MB java 和 xml 源只有 1MB 但构建项目后 apk 大小为 20MB 我将shrinkResources设置为true 并删除未使用的资源并使用 proguard 生成应用程序 有没有办法减少apk
  • 从数据框中聚合多列[重复]

    这个问题在这里已经有答案了 我有一个数据框 其中有一堆数据 这些数据在行的某些元素中用逗号连接 看起来像这样的东西 df lt data frame c 2012 2012 2012 2013 2013 2013 2014 2014 201
  • 如何以任意顺序比较两个 NSArray 的相同内容?

    我有两个NSArray其中数组的对象相同但可能位于不同的索引中 它应该打印两者相等 无论它们的索引如何 NSArray arr1 NSArray alloc initWithObjects aa bb 1 cc nil NSArray ar
  • 如何添加清理任务 - 未找到任务“清理”

    我在用https github com eriwen gradle js plugin https github com eriwen gradle js plugin我希望能够 干净 地运行任务 当我运行 gradle d clean 时
  • 将大写字母替换为小写字母

    我正在尝试使用正则表达式将大写字母替换为相应的小写字母 以便 EarTH 1 MerCury 0 2408467 venuS 0 61519726 becomes earth 1 mercury 0 2408467 venus 0 6151
  • 两个简单递归函数的 Big-O 表示法

    我在 Python 中有两个递归函数 只是想知道它们的大 O 表示法 这些的大 O 是什么 def cost n if n 0 return 1 else return cost n 1 cost n 1 def cost n if n 0