根据O(N)中的面积对矩形进行排序

时间:2015-06-15 04:47:14

标签: algorithm

设R1,...... Rn是角度为n×n网格中的点的平面中的n轴对齐矩形。因此,对于每个矩形Ri,四个角是两个坐标都是{1,... n}中的整数的点。

现在我想在O(n)时间内增加面积来对这些矩形R1,... Rn进行排序。

我有一个算法可以在O(n * log n)中对它们进行排序。但是如何在O(n)中完成?

使用O(n * log n)我们可以这样做:

Calculate all the areas, and then sort using any standard sorting algorithm like Quick sort

我想我需要进行一些处理,以便我们可以在O(n)中进行排序,因为我们给出了一些可以提供帮助的前置条件。我只想要算法,不需要代码。

1 个答案:

答案 0 :(得分:1)

由于矩形的键(区域)是整数,因此可以使用counting sortO(n)时间内完成任务。您知道最小密钥为0,问题的最大密钥为n^2,因此在算法k=n^2+1中。该算法在三个过程中完成:计算直方图,计算每个键的起始和结束索引,然后将数据复制到输出数组,保留具有相等键的输入顺序,以便排序为stable。每次传递都是O(n),所以算法总是O(n)

示例:假设n为3. k是数据中出现的最大键的一个,因此所有键都在[0..k-1]范围内,即k为10.直方图h通过设置索引从0到k-1的0数组,并通过遍历矩形集填充直方图并计算它们。假设有2个区域1,5个区域2,2个区域4个.h = [0,2,5,0,2,0,0,0,0,0]。然后立即从直方图计算起始索引为0,0,2,7,7,9,9,9,9,9。任何具有区域0的矩形进入从0开始的输出数组。任何具有区域1的矩形变为进入从0开始的输出数组(当你将1区的矩形放入输出时增加该数字)。任何带有区域2的矩形进入从2开始的输出数组。任何具有区域3的矩形进入从7开始的输出数组。任何具有区域4的矩形从7开始进入输出数组。