据我了解,O(n)将随输入数据集的大小线性增长。
我感到困惑,因为我有一个查询结构,该结构将键映射到预处理值列表,该值在结构初始化后将永远不会改变。
如果我将n定义为输入,则为键数组。
def (arrOfKeys):
for key in arrOfKeys: # O(n) Iterating through the input.
preprocessedList = getPreprocessedListDifferentForEachKey(key) # O(1) this list could have any number of elements.
for anotherPreprocessedList in preprocessedList: # * <- O(n) or O(1)?
for element in anotherPreprocessedList: # * <- O(n) or O(1)?
...
在最坏的情况下最终会变成O(n ^ 3)还是有可能争论O(n)?
答案 0 :(得分:0)
这取决于如果preprocessedList
(及其子数组)始终具有恒定的长度,则您的2个内部循环的时间复杂度为O(1)。但是,如果它们取决于输入参数arrOfKeys
,则它们各自将为O(n),因此O(n)* O(n)= O(n ^ 2)。
结合第一个循环,然后将其乘以时间复杂度O(n)。
因此,如果内部循环中的每个循环都为O(n),则总计为O(n ^ 3)
如果preprocessedList
的长度是可变的,但不取决于arrOfKeys
的长度,则可以将其定义为m
,并说它的时间复杂度为O(m)。然后您可以说时间复杂度为O(n * m ^ 2)。
通常可以引入另一个符号来描述时间复杂度,只要您解释它们是什么以及它们与数据之间的关系即可。