java - 使用 O 表示法在 for 循环中的 LinkedList 上调用 get() 的复杂性

标签 java linked-list

我有一个 uni 实用程序,可以使用 O() 表示法确定一小段代码的复杂性。

代码是:

for (int i = 0; i < list.size(); i++)
    System.out.println(list.get(i));

所讨论的列表是一个链表。对于我们的实践,我们得到了一个现成的 LinkedList 类,尽管我们必须编写自己的 size()get() 方法。

这个问题让我很困惑的是最后计算要算什么。问题是:

How many lookups would it make if there 100 elements in the list? Based on this, calculate the complexity of the program using O() notation.

如果我只计算 get() 方法,它将平均进行 n/2 次查找,从而导致 O(n) 的大 O 表示法。然而,for循环的每次迭代都需要重新计算size(),这涉及到查找(以确定链表中有多少个节点)。

在计算这段代码的复杂度时,是否应该考虑到这一点?还是计算大小不算查找?

最佳答案

我回答可能有点晚,但我认为这个 for 循环实际上是 O(n^2)

解释

您将访问列表的第 i 个索引的每个循环迭代。因此,您的调用顺序为:

sequence

这是因为每次迭代 i 都会递增,并且您正在循环 n 次。

因此,可以使用以下总和来评估方法调用的总数:

enter image description here

关于java - 使用 O 表示法在 for 循环中的 LinkedList 上调用 get() 的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15192581/

相关文章:

java - 使用蜡染缩放 SVG?

c++ - 仅通过操作指针交换链表中的相邻节点

c - 函数头中struct *和struct **的区别

Java:创建对象时,为什么界面不在右侧?

java - 在android中绘制图像

java - 为什么jaxb会生成这样的代码?

c - 链表/libxml - 搜索特定类型的下一个元素并检查列表结尾

java - Android:从主 Activity 访问应用程序类链表

java - cursor.getString 返回带有有效 uri 的 null

java - Source Sans Pro 的 TTF 和 OTF 版本在 Swing (Nimbus L&F) 中的显示方式不同