在计算机科学中,算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。 这是一个代表算法输入值的字符串的长度的函数。
想必大家都听过下面这么一段话,但要把这个当真理,那恐怕很容易写出效率不高的代码。
在编程过程中,不同的数据代表着不一样的作用,并且他们的执行效率也会不一样。
0x00 大O表示法
大O符号,又称为渐进符号,是用于描述函数渐近行为的数学符号。更确切地说,它是用另一个函数来描述一个函数数量级的渐近上界。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
这里简单通过一张图来说明下他们的关系。
而后我们将逐一介绍python3
中的常见对容器的操作效率之分。
0x00 List列表
列表应该是我们用到最为频繁的对象类型了
0x01 Set集合
大部分set操作的时间复杂度都为O(1)
0x02 dict字典及defaultdict默认字典
可以看到大部分的dict操作也是O(1)
0x03 collections.deque双向队列
这个东西有点像list 但显然比list好用多了
当然,类似item in/not in set(list)
这样的操作并没有多大的意义,在时间复杂度上任然是O(len(list))。即便set的成员对象判断上为O(1),但把list转换为set的过程已经是个取决于list长度的操作了。
引自 https://www. ics.uci.edu/~pattis/ICS -33/lectures/complexitypython.txt