数组声明如下:
太空中int array[M]
,O(1)
或O(n)
?其中M是一些固定值。对我来说O(n)
是有道理的,因为它不仅仅是一个变量而是整个数组。但后来我认为它可能是O(1)
因为我们有一个固定的大小而且它没有改变!
答案 0 :(得分:4)
如果您的数组具有固定大小且不会随输入的大小而变化,则为O(1)
,因为它可以表示为c * O(1)
= O(1)
,c
1}}是一些常数。例如,如果您需要一个大小为5的数组来保存算法中的状态,该状态运行超过一百万(或其他任意数字)整数。重要的是M
和N
是独立的。
但是,如果M
表示输入的大小或直接取决于输入大小的值(即N/2
或其他线性函数),则真正M
增长使用N
,输入大小为O(N)
。一个例子是一个数组,它包含你想要运行算法的所有输入数字(即确定平方和)。
答案 1 :(得分:1)
当M是常数时,我会说O(1)。如果它是O(n),它的大小必须是M的线性函数,在这种情况下不是。
答案 2 :(得分:0)
你得到的其他答案是正确的,正式的是 O(1)。
但要仔细考虑“常数”的含义。 O(...)表示法不是用来衡量实际计算机程序的性能,而是用于按复杂程度对算法进行分类。
如果你正在实现一个算法,该算法只对一个对象数组进行一次读取(例如),你可以说“好吧,让我们把元素的数量修改为N”,但这不会移动算法进入O(1)复杂度类,算法仍然是O(n),但是你将测试用例限制在n = N,其中N是固定的。