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

标签 algorithm sorting

如果有任何帮助,我将不胜感激。这是问题:

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

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

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

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

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

这真是令人沮丧...:(

最佳答案

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

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

您可以使用 radix sort 对这些进行排序其复杂度为 O(nk),其中 k 是位数。

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

关于algorithm - 找到一个线性时间算法,对区间 [0,2] 中的 n 个数字进行排序,使得对于每 2 个数字 a,b : |a-b| > (1/n)^2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853562/

相关文章:

python - 分组和删除文件

sorting - 思考 sphinx 在多个字段上排序

java - 如何使用比较器对 ArrayList<String> 进行排序?

c++ - 忽略第一个元素的插入排序算法

algorithm - 在 BDD 表示的关系中扩展查找唯一元组

c# - 从 List<> 中删除重复的项目并记录重复的数量

c++ - 如何处理 C++0x STL 中丢失的 'emplace_range'?

algorithm - 对给定的成对排序进行排序

algorithm - 如何用Scala实现多处理器的高效排序算法?

c - 在 C 中以困难的方式打印星号