【问题标题】:Big O notation of method with While loop containing an if statement带有 if 语句的 While 循环的方法的大 O 表示法
【发布时间】:2016-05-19 02:28:50
【问题描述】:

对于这样的方法的大 O 符号是什么,我有点困惑

public void printOut (SinglyLinkedList<Double> myLinked){
Iterator<Double> itr = myLinked.iterator();
while (itr.hasNext()){
    double d = itr.next(); // unboxing
    if (d > 5.0)
    System.out.println (d);
} // while
} // method printOut

如果没有 if 语句,我知道它会是 'n',但由于 println 不会在每次迭代时都执行,我该如何想出这个符号?

【问题讨论】:

    标签: java notation


    【解决方案1】:

    答案还是O(n)

    如果循环遍历列表,则为O(n)

    【讨论】:

      【解决方案2】:

      您仍在遍历整个列表并查看每个值以进行比较,因此程序仍然是 O(n)。

      【讨论】:

        【解决方案3】:

        帮自己一个忙,对于每一行,输入该行执行的时间。首先删除while 循环,然后删除while 循环。你会找到一种模式,你就能更好地理解它。

        简单来说,if 基本上是一个恒定的复杂度,即 O(1),它不会向外部循环添加任何内容。你的诡计会给你O(n),其余的语句会分别给你O(1)O(1)O(1)。最后它将是O(n) + O(1) + O(1) + O(1) ...这将导致O(n) 整体复杂性。

        【讨论】:

          【解决方案4】:

          循环迭代 n 次,每一步都检查 if 条件。如果条件为真,则执行 if 语句,该语句需要固定时间。 由于常数时间对整体复杂度没有影响,所以它仍然是 O(n)。

          【讨论】:

            猜你喜欢
            • 2020-03-16
            • 2012-12-02
            • 2022-01-09
            • 2021-03-18
            • 1970-01-01
            • 2012-03-12
            • 2013-04-20
            • 1970-01-01
            • 2017-01-02
            相关资源
            最近更新 更多