我是时间复杂性和算法的新手。
假设一个方法传递给一个数组,我们只遍历该数组一次。我知道时间取决于数组的大小 - 让我们称之为“n”。但是,如果对于该阵列中的每个元素“el”,你会做“el”次?在这种情况下,时间复杂度是多少,因为你有另一个变量?它仍然是“n”,因为我们只关心这种情况下的变量,即数组大小?
谢谢!
答案 0 :(得分:1)
在这种情况下,时间复杂度为0.0
,其中O(n*S)
是数组中元素的平均值。
您可能想问:
为什么是平均值而不是最大值?
嗯,时间复杂度实际上是:
S
根据平均值定义,T = arr[1] + arr[2] + ... + arr[n] = (arr[1] + arr[2] + ... + arr[n])/n *n =
= S *n
以来的最后一个等式为真。
在Partition Problem的动态编程解决方案中,可以看到类似内容的常见示例,您创建了一个大小为(arr[1] + arr[2] + ... + arr[n])/n=S
的二维数组(其中SUM是数组的总和) ,并逐步填充其中的每个条目,从而产生SUM/2 * n
解决方案。
请注意,这通常被认为是pseudo polynomial复杂度,因为它在输入的大小上并不是真正的多项式。
答案 1 :(得分:0)
N通常用于表示问题的大小,对于这样的问题,通常是数组的大小。如果我们将每个元素的内容视为一个数字,那么该数字可以是最大值,因此我们将其视为常量,并且它不会在最终的复杂性表达式中起作用。