我该如何解决这样的问题:T(n) = T(n/3) + T(n/4) + O(n^2)
我可以使用两个for循环,这会给我O(n^2)
,对吗?
答案 0 :(得分:1)
要解释该方程,请用英语将其读为:“大小为n的输入的运行时间等于大小为n / 3的输入的运行时间,加上大小为n / 4的输入的运行时间,加上与n ^ 2“成正比的时间。
例如,使用嵌套循环可以编写与n ^ 2成正比的时间运行代码,尽管编写像for i in range(n ** 2): ...
这样的单个循环比较简单。
编写时间等于输入大小为n / 3或n / 4的算法所需时间的编写代码甚至更容易-只需使用该大小的输入递归调用算法即可。 (不要忘记递归终止的基本情况。)
将它们放在一起,代码可能看起来像这样:
def nonsense_algorithm(n):
if n <= 0:
print('base case')
else:
nonsense_algorithm(n // 3)
nonsense_algorithm(n // 4)
for i in range(n ** 2):
print('constant amount of text')
我使用整数除法(四舍五入)是因为我认为否则是没有道理的。
答案 1 :(得分:0)
在这里,我们将使用for
和range(start, 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))
在方法内部使用
print()
并不是最佳实践。
27748