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]
编辑:事实上,一个叫做Fenwick树或二叉索引树的简单结构就足够了。请参阅此链接:此算法完成后,是否需要单个数组?例如,以排序顺序存储
a
、b
和c
中所有元素的数组?您能否举例说明什么是“定义良好的总体排序”?集合上的总体排序包含反对称性、传递性和总体性;有关更多信息,请参阅Wiki文章@David:数组中的元素是完全有序集的成员,也就是说,它们可以排序,但不是。@David,对不起,我应该说“对于每个数组,元素都是一些完全有序集的成员”。然而,@dsimcha的措辞是更常见的表达方式。