Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个递归为T(n)=T(n/3)+T(n/4)+O(n^2)的算法_Python_Algorithm - Fatal编程技术网

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

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的算法所需时间的代码更容易——只需使用该大小的输入递归调用算法即可。不要忘记递归终止

我如何处理像这样的问题:^2上的Tn=Tn/3+Tn/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