pol*_*oig 3 algorithm time-complexity
我需要设计一个算法,该算法将整数列表作为输入,并返回一个大于第一个log(n)且小于最后n - 3 log(n)一个2log(n)元素的排序列表(换句话说,我需要一个排序的元素列表)。数组的整数在 0 到 2^n 之间。它们必须按线性时间排序O(n),其中 n 是整个列表中的元素数。我们只需要排序元素的子集这一事实可能与找到解决方案有关,但我还没有找到它的关系。
我尝试了两种解决方案。
2^n) 时间和空间复杂度T(n) = O(d*(n + b)) = O(log_b(2^n)*(n + b)) = O(n * log_b(2) * (n + b)) = O(n^2)b 的值无关。如您所见,我对接下来要尝试的内容有些迷茫。提前致谢!
归功于 SomeWittyUsername 更正原始问题要求。
“大于第一个 log(n) 且小于最后 n - 3 个 log(n) 元素。”
找到log(n)个号码和(n - 3*log(n))在quickselect日数O(n)。
过滤列表以删除log(n) + n - 3*log(n) = n - 2*log(n)项目。
我们现在有n - (n - 2*log(n)) = 2*log(n)range 的项目2^n。
O(log(n))通过比较排序对元素进行排序需要O(log(n) * log(log(n))) << O(n)时间。