当前位置: 首页 > 知识库问答 >
问题:

用替换法求解递推方程

那铭
2023-03-14

我试图通过绘制一棵恢复树并将其求解为替换方法来求解T(n)=sqrt(n)*T(sqrt(n))sqrt(n)。但是我很难理解sqrt方法将如何影响这个过程,如果可能的话,我正在寻找一些指针

非常感谢!

共有1个答案

陆俊捷
2023-03-14

你可以写T(n)=sqrt(n)⋅T(sqrt(n))sqrt(n)as

T(n) = n1/2 + n3/4 + n7/8 + ...

我们知道∑i=1,。。。,∞2-i=1,所以你可以这么说


T(n) = n1/2 + n3/4 + n7/8 + ... < n + n + n + ...

现在你只需要通过求解n-x来计算和的长度

所以解是T(n)=O(n⋅ log log n)

抱歉,您正在使用取代基方法寻找解决方案。我从来没有这样做,所以我在这个网站上读了一段描述。

设T(sqrt(n))=k⋅ sqrt(n)⋅ log log sqrt(n)O(sqrt(n))表示常数k。

T(n) = sqrt(n) ⋅ k ⋅ sqrt(n) ⋅ log log sqrt(n) + sqrt(n) + O(sqrt(n)) 
     = k ⋅ n ⋅ log (0.5 log n) + sqrt(n) + O(sqrt(n))
     = k ⋅ n ⋅ log log n + log 0.5 + sqrt(n) + O(sqrt(n))
     = k ⋅ n ⋅ log log n + O(sqrt(n))
     = O(n log log n)

我希望这有帮助。

 类似资料:
  • 我想用递推方程找出程序的时间复杂度。那就是.. 我写了它的递推方程,并试图解决它,但它继续变得复杂 我无法进一步解决它。无论如何,如果我们计算这个程序中函数调用的次数,就可以很容易地看出时间复杂度是指数的,但我想用递归来证明它。怎么能做到呢? 在Anwer 1的解释,看起来正确,类似的工作我做了。 这段代码中最困难的任务是编写它的递归方程。我画了另一张图,我确定了一些模式,我想我们可以从这张图中得

  • 我明天有一个计算机科学期中考试,我需要帮助确定一个特定递归函数的复杂性,如下所示,这比我已经研究过的东西要复杂得多:它有两个变量 T(n)=3 mT(n-m) 在m为常数的简单情况下,可以通过编写解包关系轻松获得公式;然而,在这种情况下,拆包并不会使生活变得更容易,如下所示(假设t(0)=c): T(n)=3 mT(n-m) T(n-1)=3 mT(n-m-1) T(n-2)=3 mT(n-m-2

  • 问题内容: 假设我的格式如下: 我想将小数点替换为空白,使其看起来像这样: 我该怎么做呢?我以为可以解决问题,但是当我尝试这样时: 我收到了一个错误消息,因为它可能不是字符。那是有道理的,那么我还能怎么完成我想要的? 问题答案: 如果您只是将单引号换成双引号,那么这将起作用,因为空字符串是合法值,而不是“空字符”,并且有重载。请记住,这是的超类型。

  • 问题内容: 我的Java代码中有一些不推荐使用的方法,如果有人可以在这里指导我,我将不胜感激。我有一个私有的Date变量: 在我的方法中,我声明了: 其他方法(例如和)也已弃用。 我知道我必须使用。如何在这里使用新代码?所有的setHours,getMinutes等都用上划线显示。 问题答案: 如果我正确理解了您的问题,这应该可以: 如果没有,您可以向我们显示要替换日期代码的完整方法吗? 编辑:这

  • 问题内容: 除了重新编译之外,还有什么方法可以用我自己的一个替换调用? 1#正确的方法是使用对象和抽象时间。 我知道,但是我们将运行由大量尚未实现或自己实现的开发人员开发的代码。 2#使用JMockit之类的模拟工具模拟该类。 即使仅在禁用Hotspot的情况下有效,并且使用下面的代码也成功,但它不会“持久化”在外部库上。这意味着您必须在所有地方都进行模拟,因为代码不受我们的控制,因此这是不可行的

  • 除了重新编译之外,是否有任何方法可以将调用替换为我自己的调用? 1#正确的方法是使用对象和抽象时间。 即使这只适用于Hotspot禁用的,并且我们成功地使用了代码,但它并不“持久”于外部库。这意味着您必须在任何地方对其进行嘲弄,因为代码不在我们的控制范围内,这是不可行的。下的所有代码都返回0毫厘(如示例所示),但将返回实际的系统毫厘。 3#在启动时使用(已编辑)重新声明 虽然可能,并且可以创建/更