函数的时间复杂度取决于最大列表值......?

时间:2016-02-04 21:38:36

标签: algorithm sorting big-o

我目前设计了一个函数,将整数列表分成2个子列表(大小为n / 2),以便最大化两个列表之间的差值。

伪代码如下所示:

for ( i = 0 ; i < list_size ; i++ )
    if (list[i] > max) list_max = list[i]

int array[list_max];

for ( i =0; i < list_size ; i++ )
    array[list[i]]++

for ( i = 0; i < list_max ; i++ )
    //compute sums of two lists from array

我认为前两个for循环是O(n),但是我不知道如何考虑第三个循环的时间复杂度......

2 个答案:

答案 0 :(得分:1)

所以这里有一些事情要考虑,解决这个问题的一个简单方法就是分析每个循环。

  1.   

    O(n)的

    第一个循环显然运行n次,其中n表示list_size

  2.   

    O(n)的

    第二个循环与第一个循环

  3. 相同
  4.   

    O(M)

    此循环运行m次,其中m表示list_max

  5. 所以我们将这些全部加在一起得到:

      

    O(n + n + m)=&gt; O(2n + m)=&gt; O(n + m)

答案 1 :(得分:0)

当你的函数中有两个for循环时,可以说它的复杂度是O(n + k)(考虑到n = list_size和k = list_max)。