这个Big-O符号会是什么?

时间:2013-02-09 02:50:29

标签: big-o

这会有什么大O符号?我知道setSearch()和removeAt()是O(n)的顺序(假设它们是两种方式)。我知道没有for循环它肯定是O(n),但我很困惑如何计算它被抛入其中的for循环。我在数学上的表现并不是那么好......所以。它会是O(n ^ 2)吗?

public void removeAll(DataElement clearElement)
{
     if(length == 0)
         System.err.println("Cannot delete from an empty list.");
     else
     {
         for(int i = 0; i < list.length; i++)
         {      
            loc = seqSearch(clearElement);

            if(loc != -1)
            {      
               removeAt(loc);
                --i;
             }
         } 
     } 
} 

1 个答案:

答案 0 :(得分:2)

如果removeAt()和seqSearch()相对于列表的长度是O(n),那么是,该算法的顺序为O(n ^ 2)。这是因为在for循环中你每次都调用seqSearch,有可能调用removeAt(loc)。这意味着对于每次迭代,您要执行n或2n次操作。在最坏的情况下,您有2n ^ 2个操作,即O(n ^ 2)。