【发布时间】:2021-07-01 14:51:00
【问题描述】:
我知道滑动窗口算法的时间复杂度是o(N),但是可变大小滑动窗口算法的时间复杂度是多少。
例如-
数组 = [1,2,3,4,5,6]
当滑动窗口大小 = 1 窗口 - [1]、[2]、[3]、[4]、[5]、[6]
当滑动窗口大小 = 2 窗口 - [1,2]、[2,3]、[3,4]、[4,5]、[5,6]
当滑动窗口大小 = 3 窗口 - [1,2,3], [2,3,4], [3,4,5], [4,5,6]
等等……
窗口大小的范围为 1 到 n(窗口大小的有效值)。如果创建单个窗口的成本为 O(N),那么创建 N 个窗口的成本为 O(N^2)?
【问题讨论】:
-
窗口大小的变量也是参数吗?看起来像 O(n) 无论如何。问题是:对于任何
i,您访问array[i]多少次?答案是所有窗口大小中的 2 个,一次被推到窗口的头部,一个从尾部出队。 -
无论滑动窗口大小,使用滑动窗口的算法都是O(n)。
-
窗口大小的范围为 1 到 n(窗口的有效值)。如果创建单个窗口的成本为 O(N),那么创建 N 个窗口的成本为 O(N^2)?
-
如果你想创建一个大小为
n的窗口,那么你会得到一个滑动窗口。为什么会是O(n^2)? -
是的,但是对于大小为
n的数组,大小为n的滑动窗口是...一个窗口。包含整个数组。
标签: algorithm data-structures time-complexity pseudocode sliding-window