我有一个实用的方法来确定使用 O() 表示法的一小段代码的复杂性。
代码是:
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
有问题的列表是一个链表。对于我们的实践,我们得到了一个现成的 LinkedList 类,尽管我们必须编写自己的size()
和get()
方法。
这个问题让我感到困惑的是在最终计算中要计算什么。问题问:
如果列表中有 100 个元素,它将进行多少次查找?在此基础上,使用 O() 表示法计算程序的复杂度。
如果我只是计算该get()
方法,它将平均进行 n/2 次查找,从而产生 O(n) 的大 O 表示法。但是,for 循环的每次迭代都需要重新计算 size(),这涉及到查找(以确定链表中有多少节点)。
在计算这段代码的复杂度时,是否应该考虑到这一点?或者计算大小不算作查找?