理解主定理

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(使用前将#替换为@)

理解主定理 的相关文章

  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • 循环中的递归算法复杂度(运行时间)

    我想了解您对如何检测以下递归算法的 T n 运行时间 的意见 Charm 是一种用于发现事务数据库中频繁闭项集的算法 频繁闭项集列表是在一组交易 tids 中多次出现的频繁项 例如面包和牛奶是经常一起购买的物品 它们是通过将索引为 i 的当
  • 对产品列表进行分类的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个代表或多或少相同的产品的列表 例如 在下面的列表中 它们都是希捷硬盘 希捷硬盘 500Go 适用于笔记本电脑的希捷硬盘 120
  • 具有 3 路划分的快速排序

    什么是三向分区快速排序 画一个数组 3 5 2 7 6 4 2 8 8 9 0 A 两分区快速排序会选择一个值 比如 4 并将每个大于 4 的元素放在数组的一侧 将每个小于 4 的元素放在另一侧 就像这样 3 2 0 2 4 8 7 8 9
  • 为什么路径压缩不会改变 UnionFind 中的排名?

    我正在研究 UnionFind 的实现 并从这里进行排序和路径压缩http en wikipedia org wiki Disjoint set data struct Disjoint set forests http en wikipe
  • 证明字符串算法[关闭]

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

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • 检测重复文件

    我想检测目录树中的重复文件 当发现两个相同的文件时 将仅保留其中一个重复文件 并删除其余的重复文件以节省磁盘空间 重复是指具有相同内容的文件 但文件名和路径可能不同 我正在考虑为此目的使用哈希算法 但不同的文件有可能具有相同的哈希值 因此我
  • 查找按降序排序的向量中严格小于某个键的第一个元素

    据我了解 可以使用 find if STL 算法函数来完成此任务 如下所示 long long int k k key scanf lld k auto it find if begin v end v k auto e return e
  • Haskell:先进先出队列算法的复杂性

    这是我对 FIFO 队列的尝试 type Queue a a gt a empty Queue a empty id remove Int gt Queue a gt a Queue a remove n queue take n queu
  • 算法挑战:从图像生成配色方案

    背景 因此 我正在开发一个网络应用程序的新版本 而且 我们发现我们的用户非常懒惰 实在是太懒了 事实上 我们为他们做的工作越多 他们就越喜欢这项服务 现有应用程序的一部分要求用户选择要使用的配色方案 但是 我们有一张图片 用户网站的截图 为
  • 平均值大于或等于 k ​​的最长连续子数组

    考虑一个包含 N 个整数的数组 找到最长的连续子数组 使其元素的平均值大于 或等于 给定数字 k 显而易见的答案具有 O n 2 复杂度 我们可以做得更好吗 我们可以通过在 O n 时间内从所有值中减去 k 将这个问题简化为 sum gt
  • 给定一个数字 0-9 的数组和一个整数 n,找到可由输入数组组成且小于 n 的所有整数

    问题是这样的 给你一个数字 0 9 的数组和一个整数n 该数组可能包含任何给定数字的重复项 找到所有可以通过连接输入数组中的数字形成的整数并且小于n 输入数组中的数字可以在输出的元素中重复 例如 输入为 2 5 8 且 n 223 则输出应
  • 全部配对图表上的所有路径

    这可能是一个没有最佳解决方案的问题 假设我有一个有向图 不知道它是否有循环 循环检测将是这个问题的方面之一 给定一组顶点 可能是数百万个顶点 我需要计算给定图的所有唯一对之间的所有不同路径 没有重复顶点的路径 我该如何应对这种情况 让我们看
  • 加密单个int的方法

    如何以廉价的方式对 32 位 int 进行双向加密 使每个数字都映射到该空间中的其他 int 并以难以预测的方式映射回来 当然 并且不需要在映射表中预先存储 42 9 亿个整数 您想要的是 32 位分组密码 不幸的是 大多数分组密码都是 6
  • 计算字母表的第 n 个 6 个字符排列

    我已经研究了好几天 试图找到解决这个问题的方法 如果需要的话 我很乐意花钱请人咨询时间来解决这个问题 我目前正在使用Python迭代工具 http docs python org 2 library itertools html生成 32
  • 在大文件中查找重复字符串

    一个文件包含大量 例如100亿 字符串 您需要查找重复的字符串 您有 N 个可用系统 您将如何找到重复项 埃里克森的答案可能是提出这个问题的人所期望的 您可以将 N 台机器中的每台机器用作哈希表中的一个存储桶 对于每个字符串 按顺序说出字符
  • 单源最短路径,包含每条边的距离和权重

    假设有一个无向图 连接任意两个节点的每条边都有两个权重 即距离和成本 我想要获得最短路径 但也要确保不超出一定的成本 我尝试过实现 Djikstra 如果超出成本 则简单地回溯 由于缺乏更好的术语 直到遍历整个图表 但是 我正在寻找比这更快
  • 如何使用 Julia 查找矩阵中的连通分量

    假设我有以下矩阵 此处用 Julia 语言定义 mat 1 1 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1 1 将一组值为 1 的相邻元素视为一个 分量 如何识别该矩阵有 2 个分量以及每个分量由哪些顶点组成 对于矩
  • 将数字公平分配到两组的算法

    给定一组 n 个数字 1 每组的总数最多相差 1 A 中所有数字的总和尽可能接近 B 中所有数字的总和 即分布应该是公平的 有人可以建议一种有效的算法来解决上述问题吗 谢谢 由于数字很小 因此它不是 NP 完全的 为了解决这个问题 你可以使

随机推荐

  • 将 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