python排序的空间复杂性是多少?

时间:2018-02-13 03:54:56

标签: python sorting space-complexity

python排序的空间复杂度是多少?我无法在任何地方找到任何明确的文件

2 个答案:

答案 0 :(得分:4)

空间复杂度定义为算法在N元素方面需要多少额外空间。即使根据docssort方法对列表进行了排序,它确实会使用一些额外的空间,如实现的description中所述:

  

timsort可能需要一个包含N // 2指针的临时数组,这意味着32位框上多达2 * N个额外字节。在对随机数据进行排序时,可以预期需要一个如此大的临时数组;对于具有重要结构的数据,它可以在不使用任何额外堆内存的情况下离开。

因此,最差情况下的空间复杂度为O(N),最佳情况为O(1)

答案 1 :(得分:3)

Python内置的sort方法是一个名为Timsort的合并排序,更多信息来自https://en.wikipedia.org/wiki/Timsort

它基本上没有比合并排序更好或更差,这意味着它的运行时间平均为import pandas as pd import pandas_datareader as pdr import numpy as np import matplotlib.pyplot as plt vix = pdr.DataReader('VIXCLS', 'fred').dropna().squeeze() lower, upper = 16.5, 19.5 # Each term inside parentheses is [False, True, ...] # Both terms must be True element-wise for a trigger to occur blue = (vix < upper) & (vix.shift() >= upper) yellow = (vix < lower) & (vix.shift() >= lower) green = (vix > upper) & (vix.shift() <= upper) red = (vix > lower) & (vix.shift() <= lower) mapping = {1: 'blue', 2: 'yellow', 3: 'green', 4: 'red'} indicator = pd.Series(np.where(blue, 1., np.where(yellow, 2., np.where(green, 3., np.where(red, 4., np.nan)))), index=vix.index).ffill().map(mapping).dropna() vix = vix.reindex(indicator.index) plt.scatter(vix.index, vix, c=indicator, marker='*') plt.title('VIX regime') plt.ylabel('VIX') ,其空间复杂度为{{1} }