以下代码的O运行时间是多少?

时间:2013-06-22 22:23:54

标签: java

public static int Count( List<Integer> lst1, List<Integer> lst2)
{
    Iterator<Integer> itr1 = lst1.iterator();

    int count=0;
    while ( itr1.hasNext() )
    {
        Integer x = itr1.next();
        Iterator<Integer> itr2 = lst2.iterator();
        while ( itr2.hasNext() )
            if ( x.equals( itr2.next()) )
                count++;
    }

    return count;
}
  1. 如果为lst1和lst2传递ArrayList。
  2. 如果为lst1和lst2传递了LinkedList。
  3. 我选择了两个,因为第一个循环O(n)然后是O(n)时的分段和O(n) = O(n^3)的if。我不知道我是不是错了?

2 个答案:

答案 0 :(得分:6)

这是O(size(lst1)*size(lst2))。对于lst1中的所有x i ,您将x i lst2中的每个元素进行比较。在这种情况下,它更准确Θ(size(lst1)*size(lst2)),因为它在size(lst1)*size(lst2)的上方和下方都有界限。

答案 1 :(得分:0)

毫无疑问.. @steven给了一个很好的数学代表。这里发生的大O是提供给方法的列表大小的倍增。

因为list1中的每个元素都与list2中的每个元素进行比较。所以循环运行SizeofList1*SizeOfLit2

这是beginner guide有循环。希望你能得到它。