我试图想出一个在O(nlog(logn))时间内排序和排列A的算法。 其中A [0 ... n-1]具有属性A [i]> = A [i-j],对于所有j> = log(n)。
到目前为止,我已经考虑将A分区为每个logn大小的块。
然后我认为第一个块会比它之后的块小得多吗?
我想我错过了它的一部分。
答案 0 :(得分:2)
Tree Sort将是一个选项。从数组的左端开始,将元素提供给树。每当您的树具有多个log(n)元素时,您将获取最小元素,因为您确定所有后续元素都更大,并将其放回已排序的数组中。这样,树大小始终是log(n),树操作的成本是log(log(n))。实际上,您只需要操作(1)插入随机元素和(2)删除最小元素,因此您不一定需要树,但任何类型的priority queue都可以用于此目的。这样,平均和最差情况都能满足您的要求。