python排序的空间复杂度是多少?我无法在任何地方找到任何明确的文件
答案 0 :(得分:4)
空间复杂度定义为算法在N
元素方面需要多少额外空间。即使根据docs,sort
方法对列表进行了排序,它确实会使用一些额外的空间,如实现的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} }