【发布时间】:2020-01-29 00:45:43
【问题描述】:
我的算法课有问题。问题说明:
假设给定一个范围为 {1,...,logn**logn} 的 n 个整数数组。展示如何在 O(nloglogn) 时间内对这个数组进行排序。
这是一个每周作业,这周我们主要学习堆排序和计数排序。乍一看,我看到有一个范围,所以我尝试计数排序....但是范围太大了。计数排序是 O(n+k),其中 k 是范围。这里 logn**logn 大于所需的 nloglogn。所以我觉得很失落。 所以,我们肯定不能使用比较排序,因为它的界限在 O(n logn) 以下。有人可以帮忙吗?
【问题讨论】:
-
指数是只影响n,还是影响整个log(n)?
-
跟进@conditionalMethod 评论,这是 log(n^(log(n)) (= log(n)^2) 还是 (log(n))^(log(n)) ? 如果计数排序范围太大,可以使用基数排序。
-
嗨。它是 log(n) 的 log(n) 次幂。 [log(n)] ^ [log(n)]
-
@rcgldr 你好。我尝试了基数排序,这最终给了我 O(nlognloglogn*) 。但不是 O(n*loglogn)。我还在努力,试图找到出路
标签: algorithm sorting language-agnostic counting