Joh*_*lak 16 algorithm recursion space-complexity median-of-medians
但是,在算法的中间,我们对一个大小的子数组进行递归调用,n/5以找到中位数的中位数.当这个递归调用返回时,我们使用返回的中位数中值作为分区数组的轴.
此算法是否将O(lg n)激活记录作为递归的一部分推送到运行时堆栈?从我所看到的,这些递归调用以找到连续的中位数中位数不能被尾调用优化,因为我们在递归调用返回后做了额外的工作.因此,似乎这个算法需要O(lg n)辅助空间(就像Quicksort,O(lg n)由于运行时堆栈使用的空间,维基百科列为需要辅助空间).
我错过了什么,或维基百科文章错了吗?
(注意:我所指的递归调用是return select(list, left, left + ceil((right - left) / 5) - 1, left + (right - left)/10)在维基百科页面上.)
Ste*_*ann 10
虽然我不能排除O(1)是可能的,但维基百科的信息似乎是错误的.