这个空字典__setitem__
方法的时间复杂度是多少?我认为,字典的.key和.value python方法是O(n)(我在某处读过)而for循环也是O(n)。我的猜测是O(n)* O(n)* O(n)+ O(1)=对于循环+ if + if body + append。但我不确定那个"如果在for循环体"情况,.item和.value为O(n)。
请帮忙。这是我的学校考试。代码在python中。
def __setitem__(self,k,v):
for item in self._table:
if k == item._key:
item._value = v
return
self._table.append(self._Item(k,v))
答案 0 :(得分:2)
它是O(len(self._table))
(假设构建self._Item
是O(1)
),因为在最坏的情况下,您需要检查self._table
对象中的每个元素。
if
语句及其正文在输入方面都是O(1)
,因为它们是原子操作。因此,for循环的复杂度为O(n) * O(1) * O(1) == O(n)
,其中n
的大小为self._table
。
append
是列表的原子操作,因此它已经摊销O(1)
,但是如果你完成了这个操作,那么你已经完成了O(n)
工作,所以它使方法成为O(n)
1}}。
答案 1 :(得分:1)
复杂性为O(n)
。如果你看一下复杂性,你总会想象要将非常大的数据放入算法中。对于大数字,O(n)
与O(2n)
相同,它不是大O的有效表示法,因为它不会产生“大”差异,而O(n)
则反对O(n^2)
对计算复杂性产生巨大影响。由于您只在O(n)
列出了一次列表,因为您循环了n次,并且没有嵌套循环或任何昂贵的计算列表,因此整体复杂性保持O(n)