Python实现的归并排序的空间复杂度

每个函数调用会搞出O(n)大的内存(也就是分裂成leftpad和rightpad)分别递归两次(注意是分别的)空间复杂度T(n)=O(n)+T(n/2)由主定理得到总的空间复杂度是O(n)你会认为是O(nlogn)我想是你误解了这里的两次递归调用,误以为T(n/2)前面会有个系数2。实际是没有的,因为这里统计的是消耗的最大内存,而不是总共使用(或者说访问)了多少内存,所以并不需要这个系数2,这样复杂度自然是O(n).你可以直观想像一下你的调用栈,最多log次递归,每层分别需要O(n),O(n/2),O(n/4),...的内存,对他们求和也是O(n)没有错的(这样估计是比较粗糙的,不过更直观一些。。吧?)


    推荐阅读