Python O(n)和O(k)是什么意思?

Python O(n)和O(k)是什么意思?,python,performance,Python,Performance,我的任务是: 给定一个整数数组和一个数字k,其中1I取n表示数组的长度,k表示子数组的长度 ⑩(n)时间是指算法所花费的时间与阵列的长度成正比。即,长度为1000的数组的运行时间将是长度为2000的数组的运行时间的一半 ⑩(k)空间是算法执行计算所需的内存量,与子阵列的大小成正比。这样说,它与输入的大小无关 您的算法在一个循环上进行n-k+1次迭代,该循环进行k次迭代。这使得它的执行时间为k×(n-k+1)。由于k可以随n而变化,因此平均情况应为k=n/2,使您的运行时间为Ⅹ(n2) 由于您只

我的任务是:

给定一个整数数组和一个数字k,其中1I取n表示数组的长度,k表示子数组的长度

⑩(n)时间是指算法所花费的时间与阵列的长度成正比。即,长度为1000的数组的运行时间将是长度为2000的数组的运行时间的一半

⑩(k)空间是算法执行计算所需的内存量,与子阵列的大小成正比。这样说,它与输入的大小无关


您的算法在一个循环上进行n-k+1次迭代,该循环进行k次迭代。这使得它的执行时间为k×(n-k+1)。由于k可以随n而变化,因此平均情况应为k=n/2,使您的运行时间为Ⅹ(n2)


由于您只需要几个整型变量,因此您的算法占用的空间为Ⅹ(1)。

这是否回答了您的问题?我仍然不确定上面的代码是O(n)时间还是O(n^2)时间?那么O(k)空间呢?它在O(k)空间和O((n-k+1)·k)时间中工作,这不符合要求,不。(例如,选择k与n成比例,再加上一些其他限制,使其成为O(n²)。@Ry-但是O((n-k+1)*k)=O(n*k-k^2+k)。因为我们在时间上只关心n,k被视为常数,所以它对计算不重要,所以O会被视为O(n),对吗?好的。。。因此,由于内部循环依赖于k的长度(然后被视为常数项,对吗?),整个代码在O(n)时间运行,不是吗?推断算法运行时间复杂性的一种方法是实现它,然后针对不同大小的输入执行它,然后根据输入大小绘制执行时间,并查看图形的外观。
10 = max(10, 5, 2)
7 = max(5, 2, 7)
8 = max(2, 7, 8)
8 = max(7, 8, 7)
def foo(arr, k):
    for idx in range(0, len(arr) - k + 1):
        maxI = -1
        for i in arr[idx:idx + k]:
            if i > maxI:
                maxI = i

        print(maxI) #3; 3; 3; 5; 5; 5; 10; 22

arr = [0, 1, 3, 1, 2, 5, 5, 4, 10, 22]
k = 3

foo(arr, k)