Algorithm 找到配对排序的有效方法?

Algorithm 找到配对排序的有效方法?,algorithm,math,sorting,statistics,theory,Algorithm,Math,Sorting,Statistics,Theory,假设我有三个长度相等的数组a,b和c。这些数组中的每个元素都来自一个数组,但没有排序。我还有两个索引变量,I和j。对于所有i!=j,我想计算索引对的数量,以便a[I]b[j]和c[I]

假设我有三个长度相等的数组
a
b
c
。这些数组中的每个元素都来自一个数组,但没有排序。我还有两个索引变量,
I
j
。对于所有
i!=j
,我想计算索引对的数量,以便
a[I]
b[I]>b[j]
c[I]
。是否有任何方法可以在不到O(N^2)的时间复杂度内完成这项工作,例如创造性地使用排序算法

注:这个问题的灵感在于,如果您只有两个数组,
a
b
,您可以找到索引对的数量,例如
a[i]
b[i]>b[j]
。我基本上是在寻找三个数组的泛化


为简单起见,您可以假设任何数组的两个元素都不相等(没有关系)。

通过对数组a进行排序并同时重新排列数组b和c,我们可以假设a[i]b[j]和c[i]b[j]和c[i] 现在看来,这种查询可以通过二维段树来实现:一次迭代的成本为O(log2n),总复杂度为O(nlog2n)

(请注意,我在这里假设数组的元素是数字。这没关系,因为使用排序,我们总是可以用1到n的数字替换数组的元素,从而保持顺序。)


编辑:事实上,一个叫做Fenwick树或二叉索引树的简单结构就足够了。请参阅此链接:

此算法完成后,是否需要单个数组?例如,以排序顺序存储
a
b
c
中所有元素的数组?您能否举例说明什么是“定义良好的总体排序”?集合上的总体排序包含反对称性、传递性和总体性;有关更多信息,请参阅Wiki文章@David:数组中的元素是完全有序集的成员,也就是说,它们可以排序,但不是。@David,对不起,我应该说“对于每个数组,元素都是一些完全有序集的成员”。然而,@dsimcha的措辞是更常见的表达方式。