这个函数的渐近最坏情况运行时间是多少?

时间:2014-06-10 20:14:25

标签: big-o time-complexity

我试图弄清楚调用另一个函数的函数的渐近最坏情况运行时间:

被调用的函数(检查整数x是否是链表q的元素):

boolean chkitem (int x, IntList q) {
  while (q != null) {                // q times
    if (x == q.value) return true;   // q times
    q = q.next;                      // q times
  }
  return false;                      // constant time
}

执行调用的函数(检查列表p是否是列表q的子集):

boolean chklist (IntList p, Intlist q) {
  while (p != null) {                       // takes p time
    if (!chklitem(p.value, q)) return false; // takes p * 3q time?
    p = p.next;                             // takes p time
  }
  return true;
}

第一个功能似乎需要总共3q时间。但我无法弄清楚第二个功能花了多少时间。是2p + p * 3q时间吗?丢弃常数我得到了O(p + q)。

1 个答案:

答案 0 :(得分:1)

对于一个列表中的每个项目,您将遍历另一个列表(完全在最坏的情况下)。所以它是O(N*M)NM列表的长度。