【发布时间】:2011-06-11 22:43:06
【问题描述】:
假设我有三个数组a、b 和c,它们的长度相等N。每个数组的元素都来自totally ordered set,但没有排序。我还有两个索引变量i 和j。对于所有i != j,我想计算索引对的数量,例如a[i] < a[j]、b[i] > b[j] 和c[i] < c[j]。有什么方法可以在小于 O(N ^ 2) 的时间复杂度内完成,例如创造性地使用排序算法?
注意:这个问题的灵感是,如果你只有两个数组,a 和b,你可以找到索引对的数量,例如a[i] < a[j] 和b[i] > b[j]in O(N log N) with a merge sort。我基本上是在寻找对三个数组的概括。
为简单起见,您可以假设任何数组中没有两个元素是相等的(没有关系)。
【问题讨论】:
-
当这个算法完成时你想要一个数组吗?例如。一个按排序顺序存储来自
a、b和c的所有元素的数组? -
您能否举例说明什么是“明确定义的总排序”?
-
集合上的全序具有反对称、传递性和整体性;有关更多信息,请参阅 Wiki 文章。 en.wikipedia.org/wiki/Total_order
-
@David:数组中的元素是完全有序集合的成员,即它们可以排序,但不是。
-
@David,对不起,我应该说“对于每个数组,元素都是一些完全有序集合的成员”。然而,@dsimcha 的措辞是更常用的表达方式。
标签: algorithm math sorting statistics theory