在获取链表中节点数的这两种实现中,时间复杂度是否发生了变化?
private int getCountIterative() {
Node start = head;
int count = 0;
while (start != null)
{
count++;
start = start.next;
}
return count;
}
private int getCountRecursive(Node node) {
if (node == null)
return 0;
return 1 + getCountRecursive(node.next);
}
答案 0 :(得分:8)
不,时间复杂度不会改变。
但是对于递归解决方案而言,性能和总体运行时间通常会更差,因为Java不执行Tail Call Optimization。
答案 1 :(得分:4)
要计算操作的复杂性(例如搜索或排序算法-或您的示例,计数),您需要确定主要操作。
对于搜索和排序,通常是比较。您的主要操作是什么?假设它是node.next
,即下一个节点的查找。
然后,这两种方法都具有 O(n)个运算-因此具有相同的复杂性。
请注意,此时间复杂度只是一种简化。有些因素被忽略,例如函数调用的开销。因此,这是相同的复杂性,但这并不一定告诉您哪个版本更快。