创建一个递归为T(n)= T(n / 3)+ T(n / 4)+ O(n ^ 2)的算法 输出

我该如何解决这样的问题:T(n) = T(n/3) + T(n/4) + O(n^2)

我可以使用两个for循环,这会给我O(n^2),对吗?

zhaohevip 回答:创建一个递归为T(n)= T(n / 3)+ T(n / 4)+ O(n ^ 2)的算法 输出

要解释该方程,请用英语将其读为:“大小为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')

我使用整数除法(四舍五入)是因为我认为否则是没有道理的。

,

在这里,我们将使用forrange(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,4):
        output += n / 4

    return int(output)


# Test
if __name__ == "__main__":

    print(algorithm_n2(24))
  

在方法内部使用print()并不是最佳实践。

输出

27748
本文链接:https://www.f2er.com/3127234.html

大家都在问