固定大小的长数组的运行时间

时间:2018-08-24 08:05:39

标签: java time big-o

算法的运行时间是否取决于数组的长度? 我知道如果数组的长度未知,我们将说以下算法的运行时间为O(n)。

DISCONNECTED_MSG = 'Unable to evaluate script: disconnected: not connected to DevTools\n'

while True:
    if driver.get_log('driver')[-1]['message'] == DISCONNECTED_MSG:
        print 'Browser window closed by user'
    time.sleep(1)

但是,如果数组的长度是已知的并且是固定的。将其视为恒定时间,即O(1)还是仍视为O(n)。

   public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.print("Size of array: ");

    int lengthOfArray = sc.nextInt();
    int[] longArray = new int[lengthOfArray];

    for (int i = 0; i < longArray.length; i++) {
        System.out.println("Hello" + i);
    }

}

2 个答案:

答案 0 :(得分:1)

在您的情况下,算法的复杂性将是一个常数。这是因为复杂度将始终相同。 (请参阅我使用复杂性而不是运行时间,因为实际上是有区别的。)

对于未知循环,它是O(n),因为该任务根据n而变化(对于milion记录而言可能更复杂,而对于5记录则可能不太复杂)。它仍然是线性复杂度。

如果我们知道长度n = 5,则它变为O(5),这基本上是5 * O(1),并且由于不考虑常数,所以它变成O(1)复杂度。

这并不意味着如果您知道元素的数量,程序的运行时间就会减少。这意味着运行时间将是一个常数(因为复杂度是常数)。

答案 1 :(得分:1)

时间复杂度: O(n)表示您的方法运行时间由输入确定。

这是一个术语,用于在开发人员之间进行交流,以了解在解决同一问题的方法中最好的方法。

wiki中的一个很好的解释:

  

如果算法的时间复杂度为O(n),则称其花费线性时间或O(n)时间。非正式地,这意味着运行时间最多随输入大小线性增长。更准确地说,这意味着存在一个常数c,使得每个大小为n的输入的运行时间最多为cn。例如,如果添加时间是恒定的,或者至少受常数限制,则将列表的所有元素加起来的过程需要的时间与列表的长度成比例。

通常,我们需要根据问题本身来考虑时间空间的复杂性,以选择合适的解决方案。