程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用O表示法在for循环中的LinkedList上调用get()的复杂性大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用O表示法在for循环中的LinkedList上调用get()的复杂性?

开发过程中遇到使用O表示法在for循环中的LinkedList上调用get()的复杂性的问题如何解决?下面主要结合日常开发的经验,给出你关于使用O表示法在for循环中的LinkedList上调用get()的复杂性的解决方法建议,希望对你解决使用O表示法在for循环中的LinkedList上调用get()的复杂性有所启发或帮助;

由于它是一个链表,因此确定大小将是O(N)操作,因为您必须遍历整个列表。

此外,您错误地计算了.get()的时间复杂度。对于big-O,最重要的是 最坏情况的 计算。对于链接列表,检索的最坏情况是元素位于列表的末尾,因此也是O(N)。

总而言之,您的算法每次迭代将花费O(2N)= O(N)时间。我希望您可以从那里找出整个循环的时间复杂度。

便说一句,在现实世界中,您可能只想在循环之前计算一次大小,这恰恰是因为它可能效率很低。显然,如果列表的大小可以在循环期间更改,则这不是一个选择,但是这种非变异算法看起来并非如此。

解决方法

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

代码是:

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

有问题的列表是链接列表。对于我们的实践,我们给了现成的LinkedList类,尽管我们必须编写自己的size()get()方法。

使我困惑的是在最终计算中该算什么。问题问:

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

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

大佬总结

以上是大佬教程为你收集整理的使用O表示法在for循环中的LinkedList上调用get()的复杂性全部内容,希望文章能够帮你解决使用O表示法在for循环中的LinkedList上调用get()的复杂性所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。