0

我真的很感激任何帮助。这是问题:

找到一个线性时间算法,对区间 [0,2] 中的 n 个数字进行排序,使得对于每 2 个数字 a,b :|ab| > (1/n)^2

可悲的是,我阅读了这个问题的答案,但仍然不知道如何解决它......这是他们所说的:

对于每个数字 ai(假设 i 是索引),我们将“附加”一个数字 ni,使得:ni/2n2 <= ai <= (ni+1)/2n2

(这正是他们写的方式,我认为他们的意思是 ni/(2n^2) 和 (ni+1)/(2n^2) 但我不确定)。然后他们说不难展示如何在线性时间内对数字 ni 进行排序......

我明白为什么展示如何在线性时间内对数字 ni 进行排序就足够了,但我真的不知道该怎么做......

真的很郁闷... :(

4

1 回答 1

1

您附上了从 0 到 4n^2 的整数。

如果您以 2n 为底考虑这些,那么您有 2 位数字。

您可以使用具有复杂度 O(nk) 的基数排序对这些进行排序,其中 k 是位数。

在您的情况下k = 2,所以整体算法是O(2n)= O(n),即线性。

于 2013-02-13T19:24:37.110 回答