![]() |
1
1
你所说的一切都是正确的,直到你声称因为S(m)=T(2 米 ),则m=2 米 . 定义S(m)=T(2的步骤 米 )类似于用旧函数f定义一些新函数g。例如,如果你定义一个新函数g(x)=2f(5x),你不是说x=5x。你只是定义了一个新函数,它用f来计算。 让我们看看从这里发生了什么。我们定义了S(m)=T(2 米 ). 这意味着
我们可以做一些代数简化来看看
利用T和S之间的联系,我们可以看到
请注意,我们最终得到了递归S(m)=2S(m/2)+m,而不是通过在原始递归中用S替换T,而是通过代数替换和简化。 一旦我们到了这里,我们就可以使用主定理来求解S(m),得到S(m)=O(m log m),所以
至于你最初是如何想出这个的,这需要练习。关键的见解是,要使用主定理,你需要每次将问题的大小缩小一个常数,因此你需要找到一个将平方根转换为除以常数的变换。平方根是一种求幂运算,对数是专门设计用来将求幂运算转换为乘法和除法的,所以尝试对数或指数代换是合理的。既然你知道了窍门,我想你会在更多的地方看到它。 |
![]() |
2
1
你也可以把第一个方程除以log(n),得到
然后使用
或者以不同的方式
然后
也是众所周知的递归方程。 |
![]() |
danny · 如何使数组或映射返回变量(而不是其值) 1 年前 |
![]() |
Sher Meen · 我需要列出一个循环中临时变量中存储的多个值 2 年前 |
![]() |
Noah Hellyer · 如何删除python中7个字符长的所有零 2 年前 |
![]() |
Gabbisen · 从列表编辑变量(不能使用字典) 2 年前 |
![]() |
cred · 为什么我请求的变量在从另一个类调用时显示为0.0? 2 年前 |
|
lorny · R循环中的自动递增变量名 6 年前 |