Python 创建一个递归为T(n)=T(n/3)+T(n/4)+O(n^2)的算法
我如何处理像这样的问题:^2上的Tn=Tn/3+Tn/4+Python 创建一个递归为T(n)=T(n/3)+T(n/4)+O(n^2)的算法,python,algorithm,Python,Algorithm,我如何处理像这样的问题:^2上的Tn=Tn/3+Tn/4+ 我能够使用两个for循环,这将给我关于^2的答案,对吗?要解释这个等式,用英语读它:大小为n的输入的运行时间等于大小为n/3的输入的运行时间,加上大小为n/4的输入的运行时间,再加上与n^2成比例的时间 例如,使用嵌套循环编写与n^2成比例的时间运行的代码是可能的,但编写单个循环(如rangen**2:…)更简单 编写运行时间等于输入大小为n/3或n/4的算法所需时间的代码更容易——只需使用该大小的输入递归调用算法即可。不要忘记递归终止
我能够使用两个for循环,这将给我关于^2的答案,对吗?要解释这个等式,用英语读它:大小为n的输入的运行时间等于大小为n/3的输入的运行时间,加上大小为n/4的输入的运行时间,再加上与n^2成比例的时间 例如,使用嵌套循环编写与n^2成比例的时间运行的代码是可能的,但编写单个循环(如rangen**2:…)更简单 编写运行时间等于输入大小为n/3或n/4的算法所需时间的代码更容易——只需使用该大小的输入递归调用算法即可。不要忘记递归终止的基本情况 把它们放在一起,代码可能看起来像这样: def\u算法: 如果n这里,我们将使用和rangestart、stop、steps,可能使用一个简单易懂的算法,类似于:
def algorithm_n2(n: int) -> int:
"""Returns an integer for a O(N2) addition algorithm
:n: must be a positive integer
"""
if n < 1:
return False
output = 0
for i in range(n):
for j in range(n):
output += n * 2
for i in range(0, n, 3):
output += n / 3
for i in range(0, n, 4):
output += n / 4
return int(output)
# Test
if __name__ == "__main__":
print(algorithm_n2(24))
提示:使用递归,就像在Tn的定义中一样。这满足Tn=On/3+On/4+On^2,这当然就是Tn=On^2。不是问题要求的。还要注意,字符串串联并不是使用O1操作的最佳选择-它只发生在CPython中的O1,因为特定的优化允许字符串在只有一个引用时是可变的。在方法中使用print不是最佳实践-非常有争议,但这里的任务不是编写生产代码。该算法显然是完全无用的,除了运行时间满足所需的递推关系,不幸的是,这一个没有。
27748