以下操作需要多少CPU?任何真正计算它的方法?

时间:2015-07-15 06:33:40

标签: java algorithm performance time-complexity cpu-usage

考虑一个在程序的整个生命周期中持续的while循环。你有一个String arraylist,对于数组中的每个String,你将它与数组中的每个对象进行比较。

我不确定这部分是否重要,但假设每个对象都有一个.getString()方法,您可以将其与arraylist中的String进行比较。

ArrayList<String> stringArray = new ArrayList<>()
stringArray.add("hello");  // 0th element
.
.
.
stringArray.add("bye"); // mth element

while(true){
    //assume that you HAVE to instantiate a new object array every loop
    Object[] objectArray = {new object(), .....new object() };
    for(Object i : objectArray){
       if stringArray.contains(i.getString())
          return true;
       }
    } 

如果我没弄错,这个操作需要O(m * n)时间吗?字符串arrayList将具有m个元素,而对象数组将具有n个元素。时间复杂度是否也是cpu使用的一个因素?

1 个答案:

答案 0 :(得分:3)

  

如果我没弄错,这个操作需要O(m * n)时间吗?字符串   arrayList将包含m个元素,而对象数组则具有m个元素   有许多元素。

是的,你正确计算给定场景的时间复杂度(谈论for循环部分)。 ArrayList.contains()方法花费O(m)时间检查ArrayList中元素是否存在于ArrayList中的m个元素。另外,请检查this answer以获取相同证明。

而且,由于对象数组中有n个元素,因此净时间复杂度为O(m * n)。

注意: - 如果您将考虑整个程序(包括无限的while循环),那么在最坏情况下,如果ArrayList中的值都不包含任何值,它可能会变为无穷大对象数组的值,然后再次在while循环的下一次迭代中,将实例化相同的Object-Array。相同的for循环将具有O(m * n)最坏情况的复杂性,并且永远具有相同的故事。

  

时间复杂度是否也会影响cpu的使用?

时间复杂度是一种算法分析方法,用于了解程序如何依赖于输入参数。因此,实际上随着元素数量的增加,时间复杂度将始终给出一个广义的概念,如O(n)或O(log n),它不会给出精确的CPU性能度量。它用于估计程序的输入成员如何影响程序的执行。

而且,对于大量元素,程序的实际CPU执行量显然会更大,即使时间复杂度将被正式定义为相同。

同样,即使你增加n的数量,二进制搜索的时间复杂度也是O(log n)。它给你一个粗略的估计。如果您真的要运行该程序,其他一些因素,如环境,案例场景(最佳/最差)等将会发挥作用。