我试图弄清楚调用另一个函数的函数的渐近最坏情况运行时间:
被调用的函数(检查整数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)。
答案 0 :(得分:1)
对于一个列表中的每个项目,您将遍历另一个列表(完全在最坏的情况下)。所以它是O(N*M)
,N
和M
列表的长度。