使用递推方程的程序的时间复杂度

2024-01-22

我想使用递归方程找出程序的时间复杂度。 那是 ..

int f(int x)
{
if(x<1) return 1;
 else  return f(x-1)+g(x); 
}
int g(int x)
{
if(x<2) return 1;
 else return f(x-1)+g(x/2);
}

我写了它的递推方程并试图求解它,但它变得越来越复杂

T(n) =T(n-1)+g(n)+c
         =T(n-2)+g(n-1)+g(n)+c+c
         =T(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c
         =T(n-4)+g(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c+c
         ……………………….
        ……………………..
        Kth time …..
        =kc+g(n)+g(n-1)+g(n-3)+g(n-4).. .. . … +T(n-k)

Let at kth time input become 1
Then n-k=1
         K=n-1
Now i end up with this..
T(n)= (n-1)c+g(n)+g(n-1)+g(n-2)+g(n-3)+….. .. g(1)

我无法进一步解决它。 不管怎样,如果我们计算这个程序中函数调用的次数,很容易看出时间复杂度是指数级的,但我想用递归来证明它。如何做呢 ?

Anwer 1 中的解释看起来是正确的,与我所做的类似工作。

这段代码中最困难的任务是编写它的递归方程。我画了另一个图,我确定了一些模式,我想我们可以从这个图中得到一些帮助,什么可能是可能的递推方程。

And I came up with this equation , not sure if it is right ??? Please help.

T(n) = 2*T(n-1) + c * logn

好吧,我想我已经能够证明这一点f(x) = Theta(2^x)(注意时间复杂度是一样的)。这也证明了g(x) = Theta(2^x) as f(x) > g(x) > f(x-1).

首先,正如大家所指出的,很容易证明f(x) = Omega(2^x).

现在我们有这样的关系f(x) <= 2 f(x-1) + f(x/2) (since f(x) > g(x))

我们将证明,对于足够大的x,有一些常数K > 0这样

f(x) <= K*H(x), where H(x) = (2 + 1/x)^x

这意味着f(x) = Theta(2^x), as H(x) = Theta(2^x),这本身就源于以下事实:H(x)/2^x -> sqrt(e) as x-> infinity (阿尔法钨 http://www.wolframalpha.com/input/?i=Limit%20x-%3E%20infinity%20%282%2b1/x%29%5Ex/2%5Ex限制的链接)。

Now (warning:较重的数学,也许 cs.stackexchange 或 math.stackexchange 更适合)

根据阿尔法钨 http://www.wolframalpha.com/input/?i=%282%20%2b%201/x%29%5Ex(单击链接并查看 x = 无穷大附近的级数展开),

H(x) = exp(x ln(2) + 1/2 + O(1/x))

再次,根据阿尔法钨 http://www.wolframalpha.com/input/?i=%282%20%2b%201/x%29%5Ex%20-%202%2a%282%20%2b%201/%28x-1%29%29%5E%28x-1%29(单击链接(与上面不同)并查看 x = 无穷大的级数展开),我们有

H(x) - 2H(x-1) = [1/2x + O(1/x^2)]exp(x ln(2) + 1/2 + O(1/x))

and so

[H(x) - 2H(x-1)]/H(x/2) -> infinity as x -> infinity

因此,对于足够大的x (say x > L)我们有不等式

H(x) >= 2H(x-1) + H(x/2)

现在有一些K(仅取决于L(例如 K = f(2L)))使得

f(x) <= K*H(x) for all x <= 2L

现在我们继续进行(强)归纳(如果您愿意,您可以恢复为自然数)

f(x+1) <= 2f(x) + f((x+1)/2)

通过归纳法,右边是

<= 2*K*H(x) + K*H((x+1)/2)

我们之前证明了

2*H(x) + H((x+1)/2) <= H(x+1)

Thus f(x+1) <= K * H(x+1)

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

使用递推方程的程序的时间复杂度 的相关文章

  • 在 O(n) 时间内运行的指数乘法算法?

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

    假设您有一个长度为 n 即空格数 的垂直游戏板 你有一个三面骰子 有以下选项 前进一 停留和后退 如果您低于或高于棋盘游戏空间的数量 则该游戏无效 一旦到达棋盘末端 唯一有效的动作就是 停留 给定确切的骰子投掷次数 t 是否可以通过算法计算
  • 给定两个(大)点集,我如何有效地找到彼此最接近的点对?

    我需要解决一个计算问题 该问题归结为搜索两个集合之间最接近的点对 问题是这样的 给定欧几里德空间中的一组点 A 和一组点 B 找到所有对 a b 使得 b 是 B 中与 a 最近的点 a 是 A 中与 b 最近的点 集合 A 和 B 的大小
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 稀疏矩阵中的最大和子矩形

    求一个子矩形中的最大和NxN矩阵可以完成O n 3 正如其他帖子中指出的 使用 2 d kadane 算法的时间 然而 如果矩阵是稀疏的 具体来说O n 非零条目 可以O n 3 时间被打败了吗 如果有帮助的话 对于我感兴趣的当前应用程序
  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 基于时间的算法评分

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

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • 搜索/排序算法 - 是否有类似 GoF 的列表?

    我是一名自学成才的开发人员 坦率地说 我不太擅长找出在任何特定情况下使用哪种搜索或排序算法 我只是想知道是否有设计模式 esque 列出了以太坊中可用的常见算法 供我添加书签 就像是 算法名称 带有别名 如果有的话 它解决的问题 大O成本
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 在 Java 中实现排列算法的技巧

    作为学校项目的一部分 我需要编写一个函数 该函数将接受整数 N 并返回数组 0 1 N 1 的每个排列的二维数组 该声明看起来像 public static int permutations int N 该算法描述于http www usn
  • 如何高效地在屏幕上精确绘制N个点?

    这听起来是一个简单的问题 但我发现要获得良好的性能是非常棘手的 我提出的第一个算法是随机绘制点 从一组中检查是否已绘制 否则绘制 如果我们只绘制几个点 那么这种方法效果很好 但当我们接近填满屏幕时 速度会灾难性地减慢 我想出的最好的方法是构
  • 通过分布式数据库聚合作业优化网络带宽

    我有一个分布式 联合数据库 结构如下 数据库分布在三个地理位置 节点 每个节点集群有多个数据库 关系数据库是 PostgreSQL MySQL Oracle 和 MS SQL Server 的混合体 非关系数据库是 MongoDB 或 Ca
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个

随机推荐

  • 列和内嵌中心图像

    我想创建一个 2 个文本列 中间有一个 div 如下所示 我正在使用这段代码 moz column count 2 webkit column count 2 column count 2 当我在 div 类中放置另一个 div 时 它会格
  • WPF 2D 高性能图形

    基本上 我想要 WPF 中的 GDI 类型功能 其中我可以将像素写入位图并通过 WPF 更新和显示该位图 请注意 我需要能够通过响应鼠标移动更新像素来动态设置位图动画 我读到 InteropBitmap 非常适合此目的 因为您可以写入内存中
  • 什么是 LINQ 提供程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • TypeScript 可以在没有定义文件的情况下与 jQuery 交互吗?

    我一直在尝试了解这个新的 TypeScript 东西 并且我对某些事情有点好奇 它仍然可以与现有的 javascript 框架 如 jQuery 一起使用吗 without是否需要包含所有这些接口的定义文件 我一直在尝试手动测试这一点 但到
  • 尝试向 Web 服务发送 SOAP 请求时出现 WS 安全错误

    这是我使用肥皂 UI 发送的 SOAP 请求 但收到一条错误消息 消息不符合配置的策略
  • Puppeteer:Element.hover() 不存在

    我正在使用 puppeteer 从网站上抓取一些图像以及其他一些数据 要更改图像 我需要将鼠标悬停在列表项上 我不断遇到有关 hover 的文档 但没有成功 然而 click 非常适合我的抓取的另一部分 const pptr require
  • Android 关闭键盘

    按下按钮时如何关闭键盘 您想禁用或关闭虚拟键盘吗 如果您只想关闭它 您可以在按钮的单击事件中使用以下代码行 InputMethodManager imm InputMethodManager getSystemService Context
  • UserWarning:pyarrow.open_stream 已弃用,请使用 pyarrow.ipc.open_stream 警告

    我在跑步spark 2 4 2本地通过pyspark用于 NLP 中的 ML 项目 Pipeline 中的部分预处理步骤涉及使用pandas udf功能优化通过pyarrow 每次我使用预处理的 Spark 数据框进行操作时 都会出现以下警
  • 安卓倒计时

    我想在android中写一个倒计时 从3开始计数到0 就像最初3出现然后消失 2出现等等 我进行了很多搜索 但找不到任何好的样本 你能帮我看看我该怎么办吗 使用倒计时器 例如 import android os CountDownTimer
  • 金字塔 1.3 和 Google 应用引擎 1.7

    我设法使 Pyramid 1 2 WSGI 应用程序在 Google App Engine SDK 1 7 上运行 然而 我当前的项目使用了几个新的 Pyramid 1 3 功能 并且我陷入了 WebOb 版本问题 这是错误消息 Versi
  • 无法联系 reCAPTCHA。检查您的连接并重试

    我正在使用react google invisible recaptcha 但当页面加载时它不起作用 它会显示 无法联系 reCAPTCHA 请检查您的连接并重试 之类的警报 即使互联网速度更快 我怎样才能使用invisible reCAP
  • VS2010 中缺少 ws2_32.lib。该怎么办?

    我正在尝试着手 Windows 套接字编程 我知道你必须 include winsock2 h然后链接到ws2 32 lib 问题是我没有ws2 32 lib在我的 Visual Studio 2010 终极版本中 我应该做什么才能让它启动
  • 在Matlab中将导数值保存在ode45中

    我正在模拟一个带有质量弹簧和双摆的 有点奇怪 系统的运动方程 我有一个质量矩阵和函数 f x 并调用 ode45 来求解 M x f x t 我有5个状态变量 q QDot phi phiDot r rDot 删除了 Q 因为没有任何东西依
  • C 中的连续空格删除 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 文本文件包含一堆字符 文件中没有制表
  • Javacv Blob 检测

    我想在我的应用程序中使用一些用 Java 编写的斑点检测 因此使用JavaCV代替OpenCV 我发现很多课程 例如 SimpleBlobDetector CvBlobDetector CvBlob 但我找不到任何教程或演示 示例代码来在
  • UINavigationController:相反方向弹出视图控制器

    我正在尝试打电话 self navigationController popViewControllerAnimated YES 但使动画从右向左滑动而不是从左向右滑动 有什么简单的方法可以做到这一点吗 我想回到之前的观点 任何帮助表示赞赏
  • 如何向 R matplot 添加颜色匹配的图例

    我使用 matplot 在图表上绘制几条线 matplot cumsum as data frame daily pnl type l 这给了我每行的默认颜色 这很好 但我现在想添加一个反映相同颜色的图例 我怎样才能实现这一点 请注意 我首
  • 为什么Flow需要对导出函数的参数进行注释?

    以下代码 流动游乐场 https flowtype org try 0PQKgBAAgZgNg9gdzCYAoVUCuA7AxgFwEs5swBDACgAcBKMAbwF9UBbOAE0xgFMA6bgB5U4AJ3wBnMAF5yQA f
  • 将 CollectionView Item VisualElement 的 VisualState 传递给其子 VisualElements

    我遇到以下情况 CollectionView 每一项都是Border 包含其他控件 选择后 边框的 VisualState 更改为已选择 然而 子控件的状态没有改变 有没有一种简单的方法可以将这些 VisualStates 链接 传递给所有
  • 使用递推方程的程序的时间复杂度

    我想使用递归方程找出程序的时间复杂度 那是 int f int x if x lt 1 return 1 else return f x 1 g x int g int x if x lt 2 return 1 else return f