我发现时间复杂度的方法正确吗?

时间:2019-01-01 02:22:03

标签: time-complexity

对于以下问题,我提供了一种算法;但是,我不确定计算出的复杂度是否正确。由于我不知道它将执行多少次,因此我对计算while循环的复杂性感到非常困惑。

问题:

从n个不同整数的列表中随机而不重复地选择k个项 (即,一个项目不能选择多次)。假设您有一个功能 random(m)随机选择一个介于1到m之间的整数。

我的算法+复杂性:

int count = k;                          O(1)
int list[] = new list[k];               O(1)
for(int i=0; i<list.length(); i++)      O(k)
{
  list[i] = -1;
}
while(count > 0)                        O(k+a); where a is an int number
{
  int guess = random(n);                O((k-1)+a)
  boolean found = false;                O((k-1)+a)
  int init = 0;                         O((k-1)+a)
  while(list[init] != -1)               O(k+a)*O(k-1); Here I thing that
  {                                     the worse case happens when the 
    if(list[init] == guess)             array is nearly full, there
      found = true;                     is only one cell left and we
    init++;                             keep search for a unique number.
  }
  if(!found)                            O(1)
  {
    list[init] = guess;
    count--;
  }
}
return list;

因此,我认为总体复杂度为O(k + a)* O(k-1),其中K是我们要从列表中提取的唯一项的数量,而a是整数。

如果您能帮助我解决此问题,我非常感谢。

0 个答案:

没有答案