理解主定理

2024-02-27

通用形式:T(n) = aT(n/b) + f(n)

所以我必须将 n^logb(a) 与 f(n) 进行比较

if n^logba > f(n) is case 1 and T(n)=Θ(n^logb(a))

if n^logba < f(n) is case 2 and T(n)=Θ((n^logb(a))(logb(a)))

那是对的吗?或者我误解了什么?

那么案例3呢?什么时候适用?


求解递归的主定理

重复出现在解决复杂问题的分而治之策略中。

它解决什么问题?

  • 它解决了形式的重复T(n) = aT(n/b) + f(n).
  • a应大于或等于1。这意味着该问题至少被缩减为更小的子问题一次。至少需要一次递归。
  • b应大于 1。这意味着在每次递归时,问题的规模都会减小到更小的规模。如果b不大于1,这意味着我们的子问题的规模不小。
  • f(n)对于相对较大的值必须为正n.

考虑下图:

假设我们有尺寸问题n待解决。在每一步中,问题可以分为a子问题,并且每个子问题的规模较小,其中规模减小了一个因子b.

上面的说法简单来说就是尺寸问题n可以分为a规模相对较小的子问题n/b.

另外,上图表明,最终当我们将问题多次划分时,每个子问题都会很小,以至于可以在常数时间内解决。

对于下面的推导请考虑log到基地b.

让我们这么说H是树的高度,那么H = logn。叶子的数量=a^logn.

  • 1 级完成的总工作量:f(n)
  • 2 级完成的总工作量:a * f(n/b)
  • 1 级完成的总工作量:a * a * f(n/b2)
  • 最后一级完成的总工作量:number of leaves * θ(1)。这等于n^loga

主定理的三种情况

Case 1:

现在让我们假设每个级别的操作成本都以一个重要因素增加,并且当我们到达叶级别时,f(n)变得比该值更小的多项式n^loga。那么整体运行时间将很大程度上取决于最后一级的成本。因此T(n) = θ(n^loga).

Case 2:

让我们假设每个级别上的操作成本大致相等。在这种情况下f(n)大致等于n^loga。因此,总运行时间为f(n)乘以总层数。

T(n) = θ(n^loga * logn) where k can be >=0. Where logn是一棵树的高度k >= 0.

注:这里k+1是logn中log的基数

Case 3:

让我们假设每个级别上的操作成本都在每个级别上减少一个重要因素,并且当我们到达叶级别时,值f(n)变得比该值更大的多项式n^loga。那么总的运行时间将主要由第一级的成本决定。因此T(n) = θ(f(n)).


如果您有兴趣更详细的阅读和练习示例,请访问我的博客条目掌握解决递归问题的方法 http://techieme.in/solving-recurrences-master-method/

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

理解主定理 的相关文章

  • 对二进制二维矩阵进行排序?

    我在这里寻找一些指示 因为我不太知道从哪里开始研究这个 我有一个二维矩阵 每个单元格中有 0 或 1 例如 1 2 3 4 A 0 1 1 0 B 1 1 1 0 C 0 1 0 0 D 1 1 0 0 我想对其进行排序 使其尽可能 上三角
  • DPLL算法定义

    我在理解 DPLL 算法时遇到一些问题 我想知道是否有人可以向我解释它 因为我认为我的理解是不正确的 我理解的方式是 我采用一些文字集 如果每个子句都为真 则模型为真 但如果某些子句为假 则模型为假 我通过查找单元子句递归地检查模型 如果有
  • 查找所有n位相邻数字为1的n位二进制数[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 让我用一个例子来解释一下 如果n 4
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 用于整数分区的优雅 Python 代码 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我尝试编写代码来解决标准整数分区问题 维基百科 http en wikipedia org wiki Partition 28numb
  • Dijkstra 算法不生成最短路径?

    我正在使用 Dijkstra 算法解决最短路径问题 我遇到了麻烦 因为该算法应该提供最短路径 但运行该算法后 我手动得到了一条短路路径 这只是该算法的副产品吗 我尝试生成的路径是从 a gt z 这是我通过应用该算法得到的路径 在我访问的每
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 图像算法上的物体计数

    我又接到学校任务了 这次 我的老师给我的任务是创建算法来计算图片上有多少只鸭子 该图与此类似 我想我应该使用模式识别来搜索上面有多少只鸭子 但我不知道每只鸭子适合哪种图案 我认为你可以通过分割鸭嘴并计算鸭嘴的数量来解决这个问题连接的组件 h
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • 使用 Numba 加速矢量距离计算

    以下是我为 3 D 环形几何中的距离 平方 计算编写的一些函数 用于该 3 D 空间中的粒子集合 import itertools import time import numpy as np import scipy import num
  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 序列和与 GCD

    大约一个月前 我在编程挑战中遇到了这个问题 但社论尚未发布 所以我在这里问 有一个大小为 N 的数组 A 求 A 的 K 个长度子序列的总和 GCD Example 如果 A 1 2 3 且 K 2 1 2 3 总和 1 GCD 3 1 3
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 素数生成器算法

    我一直在尝试解决素数生成算法的SPOJ问题 这是问题 彼得想为他的密码系统生成一些素数 帮助 他 你的任务是生成两个给定之间的所有素数 数字 Input 输入以单行中测试用例的数量 t 开始 t Output 对于每个测试用例 打印所有素数
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto

随机推荐

  • 将 ExceptionDescribe 转换为字符串

    我需要将 JNI 中 ExceptionDescribe 的输出作为字符串获取 以便之后可以将其写入文件中 而不是直接在命令行上写入 有什么方法或想法可以做到这一点吗 提前致谢 Sami ExceptionOccurred 是第一步 要获取
  • 当区域设置为阿拉伯语时 Android 中的日期格式问题

    我这里有一个严重的问题 我正在构建一个可以在阿拉伯语设备上运行的应用程序 我需要将日期发送到服务器 我使用 Android DatePickerDialog 来获取日期 但日期总是使用阿拉伯语字符发送 并且何时我尝试再次显示它 它给了我无法
  • 使用 JavaScript 计算 A、B、C、D,而不是 0、1、2、3...

    这可能是一个不寻常的请求 但对于我的脚本 我需要一个按字母而不是数字递增的函数 例如 这是一个数字示例 var i 0 while condition window write We are at i i 本质上 我想像 Microsoft
  • Rails 3.1 Devise 如何更改 Flash Message CSS 从通知到成功?

    Rails 3 1 和 Devise 1 5 问题 我使用以下代码在布局中显示 Flash 消息 我想将一些确认消息的 css 类从通知更改为成功 但我不知道在哪里覆盖或更改密钥 因为我不知道它在哪里设置 有人能指出我正确的方向吗 Than
  • Android webapp 中调用 JS 的原生代码

    我正在编写一个Android 网络 应用程序 我不会将应用程序上传到网络 而是在应用程序资源中设置HTML JS 这意味着 GUI 将是 HTML5 我将使用另一个 本机 线程从麦克风读取数据 并希望将 解析后的文本 发送到 HTML5 J
  • Microsoft.AspNetCore.Hosting.Abstractions 清单定义与程序集引用不匹配

    当我运行实体框架核心命令时add migration MyMigrationName在类库中我收到以下错误 无法加载文件或程序集 Microsoft AspNetCore Hosting Abstractions 版本 1 1 1 0 Cu
  • 如何在 C 语言中找到字符串中字符的索引?

    假设我有一个字符串 qwerty 我希望找到的索引位置e其中的人物 在这种情况下 索引将是2 我如何在 C 中做到这一点 我找到了strchr函数 但它返回一个指向字符的指针而不是索引 只需从 strchr 返回的内容中减去字符串地址即可
  • ios UIWebView 中的大量内存泄漏

    为了寻找系统中其他地方的内存泄漏 我创建了一个带有元刷新标签的 20 MB 网页 我们的想法是通过我们的数据路径代码移动大量数据以确认内存稳定性 div style border 1px solid red Content loading
  • 使用单向多对多映射进行删除级联

    我正在使用 Fluent 和 NHibernate 我有两个对象 A 和 B 它们之间具有多对多关系 当 A HasMany B 时 我使用单向多对多映射 B中没有关于A 单向 的参考 这会在数据库中创建第三个表 名为 ABMapping
  • 将日期时间插入 SQLite 数据库

    我试图将时间插入数据库 但是当我打印插入的时间时 它不正确 我在将时间变量插入数据库之前打印了它 它是 12 01 09 149059 我用的时候效果很好strftime但我换了 因为时间已经到了 from datetime import
  • Bootstrap 轮播显示下一张和上一张图像

    引导程序轮播是否可扩展以在滑块中显示下一个和上一个图像 div class carousel slide ol class carousel indicators li class active li li li ol div
  • React Native Android:方法不会覆盖或实现超类型的方法

    我已经添加react native fbsdk到我的 React Native 项目并让它在 iOS 上正常构建 但在android方面 我无法让gradle来构建项目 当尝试编译react native fbsdk时 我遇到了 方法不会覆
  • eclipse 4 RCP 应用程序中启动屏幕上的进度条

    我想在 Eclipse 4 RCP 初始屏幕上添加一个进度条 我已经尝试了以下代码和设置 但仍然无法获取进度条 org eclipse ui SHOW PROGRESS ON STARTUP true 在plugin customizati
  • 将大对象插入 Postgresql 返回 53200 Out of Memory 错误

    PostgreSQL 9 1 NPGSQL 2 0 12 我想将二进制数据存储在 postgresql 数据库中 大多数文件加载良好 但是 大型二进制 664 Mb 文件会导致问题 当尝试通过 Npgsql 使用大对象支持将文件加载到 po
  • DropDownList 的 MVC2 编辑器模板

    过去一周的大部分时间我都在深入研究 MVC2 中的新模板功能 我很难让 DropDownList 模板正常工作 我一直在努力解决的最大问题是如何将下拉列表的源数据获取到模板 我看到很多示例 您可以将源数据放入 ViewData 字典 Vie
  • LoadError: 无法加载此类文件 -- capybara 独立代码

    我正在使用 Ruby 和以下教程构建一个简单的后挖矿程序 http ngauthier com 2014 06 scraping the web with ruby html http ngauthier com 2014 06 scrap
  • 自定义 Spring Bean 参数

    我正在使用 activator 上发布的 Spring Akka 示例来创建 Spring 托管 bean actor 这是我当前使用的代码 包括演示类 Component class Test extends UntypedActor A
  • 检查 Asp.Net(Core) 应用程序是否托管在 IIS 中

    如何检查应用程序是否托管在 IIS 中 检查环境变量 APP POOL ID 是否设置 public static bool InsideIIS gt System Environment GetEnvironmentVariable AP
  • Android 应用程序基 64 公钥

    如何获取 或查看 Android 应用程序 Base 64 公钥 我有许可证文件 并且我之前已经发布过我的应用程序 我需要许可密钥 要查找您的应用程序的公共许可密钥 请执行以下步骤 1 登录您发布应用的 Google Play 开发者控制台
  • 理解主定理

    通用形式 T n aT n b f n 所以我必须将 n logb a 与 f n 进行比较 if n logba gt f n is case 1 and T n n logb a if n logba lt f n is case 2