算法的运行时间是否取决于数组的长度? 我知道如果数组的长度未知,我们将说以下算法的运行时间为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);
}
}
答案 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。例如,如果添加时间是恒定的,或者至少受常数限制,则将列表的所有元素加起来的过程需要的时间与列表的长度成比例。
通常,我们需要根据问题本身来考虑时间和空间的复杂性,以选择合适的解决方案。