Performance Python3标准类型/数据结构(列表、dict、元组等)的计算/内存复杂性

Performance Python3标准类型/数据结构(列表、dict、元组等)的计算/内存复杂性,performance,python-3.x,complexity-theory,Performance,Python 3.x,Complexity Theory,Python3默认数据结构(列表、dict、元组等)的计算复杂度是多少 (内存复杂性问题也很有趣。) 我的发现:-恐怕这是关于python 2的,不是吗?计算复杂性与解决方法有关。独立地说,如果Python3速度更快或更快,那么复杂性将是相同的——除非不使用原则上不同的算法来解决问题 有时,同名的抽象数据结构可能会有所不同(比如说Python 2字符串与Python 3字符串,或者说Python 2中的long与Python 3中的generalized int) 我没有检查它,但我猜Pytho

Python3默认数据结构(列表、dict、元组等)的计算复杂度是多少

(内存复杂性问题也很有趣。)


我的发现:-恐怕这是关于python 2的,不是吗?

计算复杂性与解决方法有关。独立地说,如果Python3速度更快或更快,那么复杂性将是相同的——除非不使用原则上不同的算法来解决问题

有时,同名的抽象数据结构可能会有所不同(比如说Python 2字符串与Python 3字符串,或者说Python 2中的long与Python 3中的generalized int)


我没有检查它,但我猜Python2和Python3在这个意义上没有区别。

对于Python2和Python3,wiki条目都适用于CPython。这些课程没有改变。其他实现可能会有所不同,但如果他们希望人们将代码从CPython移植到xpython,则它们必须相似。例如,一个使用链表作为列表类型的Python需要相当不同的编程系统和代码重新排列才能正常工作;-)

在3.3中,修改了dict类,以便共享一个类的多个实例的dict所共有的一些信息,而不是复制。这主要影响到某些类有100或1000个实例的用户,并将节省大约1/3的dict空间(我认为),这是一个不变的因素,不会改变类的空间复杂度


更重要的是,(unicode)str类已经完全重写,只使用所需的字节/字符数。结果通常是更少的空间和时间,但同样主要的影响应该是被O(xxx)符号忽略的乘数。

这就是我要问的:“使用的算法有什么不同吗?原则上”;)。因为我问的是计算复杂性,所以我认为很明显我指的是“使用过的算法”。通过在Python3中设计更多的方法来返回生成器和迭代器,而不是列表或字典->这降低了内存复杂性。我对其他的改进例子很好奇,但是你甚至可以在Python2中使用迭代器。唯一的区别是你必须明确。然后问题是你是否想比较不同的算法。迭代器可以减少一些算法的内存消耗,但时间复杂度必须基本相同。我想知道任何复杂度的差异-也许你是对的,我提出的问题很糟糕。我不认为这是一个糟糕的问题。这种重要的代码通常是以最好的方式完成的。像往常一样大量引入迭代器是从过去学习的一个标志,这符合我们真正想思考问题的方式。在算法中,可以通过这种方式更改消耗的时间,在这种算法中,您可以提前完成以消耗序列。无论如何,最坏的情况意味着同样的时间复杂性。算法的时间复杂度是一个很好的质量暗示,但它不应该是主要目标。