function - 两个递归函数之和的复杂度?
问题描述
我需要计算以下递归函数的复杂度: T(n)=T(n/4)+3M(n/4)+11n-18 where M(n)=7M(n/4)+36n-52对于如下初始条件:T(1)=1 和 M(1)=6
如何计算 T(n) 的复杂度?我知道如何用一个递归函数来做,但是这次一个公式中包含两个递归函数,我不知道如何处理这个问题?
基于主定理有一个通用公式: 令 M(n)=aM(n/b)+cn+d+fn^k 且 M(1)=e 则 M(n) 的复杂度计算如下:
--如果a不等于b且f=0,那么M(n)的解为:M(n)=(e+(bc/(ab)) + d/a-1)n^log_ba - ( bc/ab).n+d/a-1
我想用这个通用公式来计算上面 T(n) 的复杂度。有人可以帮我解决这个问题吗?
解决方案
注意 T 引用了 M,但 M 只引用了它自己。这意味着您可以在此处执行两步过程:
- 求解 M(n)。
- 将解代入 T(n),仅根据自身给出 T(n) 的递归,然后求解 T(n)。
从您的问题来看,您似乎正在寻找一个精确的解决方案,但如果您只是渐近地关心,您可以使用主定理来获得如下解决方案:
- M(n) = Θ(n log 4 7 )
- T(n) = T(n / 4) + 3M(n / 4) + O(n) = T(n / 4) + Θ(n log 4 7 ),求解为 Θ(n log 4 7 )。
推荐阅读
- python - 用python打开终端窗口
- objective-c - Objective-C:在两个未连接的视图控制器之间传递数据
- php - laravelshoppingcart 包与 laravel 7 兼容吗?
- java - 韦伯
在 application.xml 和 @Resource 注入 - cmake - 如何指定 gcc 使用“libdl.so.2”库使用 CMake 进行链接?
- visual-studio-code - YAML 中的 Visual Studio Code Handlebars 格式会破坏语法
- python - jupyterlab 没有从 Anaconda Naviagtor 初始化
- apache-spark - Spark结构化流查询:java.lang.AssertionError:断言失败:仅删除检查点选项?
- bazel - DefaultInfo和PyInfo是什么关系
- signalr - Azure serverless signalR - 如果接收器不可用