Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何计算每个元组,数组中严格较大的元组数?_Algorithm_Sorting_Counting - Fatal编程技术网

Algorithm 如何计算每个元组,数组中严格较大的元组数?

Algorithm 如何计算每个元组,数组中严格较大的元组数?,algorithm,sorting,counting,Algorithm,Sorting,Counting,假设您有一个Pair类,其中包含变量a和b 当A和b两个值都大于另一个时,一个Pair对象“严格大于”另一个对象。例如,(3,4)将大于(2,3),但(3,5)不大于(4,4),依此类推 给定一个对的数组,为数组中的每个元素计算大大大于对的数的最佳方法是什么?我可以在n^2内解决这个问题,但我认为这不是最佳答案。根据变量对对进行排序;这将花费O(nlogn)时间。然后使用一些自平衡二叉树结构(红黑、AVL等)从对中构造一个段树,其中b变量作为其键,节点子树的大小作为其值。这也需要O(nlogn)

假设您有一个
Pair
类,其中包含变量
a
b

A
b
两个值都大于另一个时,一个
Pair
对象“严格大于”另一个对象。例如,(3,4)将大于(2,3),但(3,5)不大于(4,4),依此类推


给定一个
对的数组
,为数组中的每个元素计算大大大于
对的数的最佳方法是什么?我可以在n^2内解决这个问题,但我认为这不是最佳答案。

根据
变量对
进行排序;这将花费
O(nlogn)
时间。然后使用一些自平衡二叉树结构(红黑、AVL等)从对中构造一个段树,其中
b
变量作为其键,节点子树的大小作为其值。这也需要
O(nlogn)
时间


现在,迭代排序后的
对数组
s。对于每一对,首先在段树中找到相应的节点,并计算该节点中
b
较大的
s对的总数及其祖先的值/大小。将其添加到运行求和中,并从树中删除该节点。每对
应花费
O(logn)
时间。对阵列中的所有其他
对继续此过程。最后,您的运行总和将表示数组中严格较大对象的总计数,单位为
O(nlogn)
时间。

您可以使用排序与
O(n*logn)
和一个简单的最小-最大决策与
O(n)
,解决方案max
O(n*logn)

但是OP的问题不清楚,排序可能是不可能的。部分订单可能会被取消。

类对实现了可比较的{
私人期末考试;
私人期末考试;
私人最终T最大值;
私人决赛T分钟;
/**
*@param i
*@param j
*/
公共对(最终T a,最终T b){
这个a=a;
这个.b=b;
如果(0
我们可以通过一个增广平衡二叉树来解决这个问题,而不需要一个段树,我们可以首先对一个变量的列表进行排序,比如说
b
。然后我们有:

[(a_i, b_0), (a_i, b_1), (a_i, b_2)..., (a_i, b_n)]

现在问题变成了:对于每个
a
,计算右侧较大的
a
s的数量,从右侧迭代,并将
a
s插入到增广平衡二叉树中。必须注意不要计算其中一个变量相等而不是更大的元素。

问题不清楚。(3,4)会大于(2,3)吗?或者大一对的a和b都需要大于小一对的a和b吗,如(3,4)>(1,2)?嗨,我在问题中做了澄清。但是这个算法如何解决像(3,5)和(4,4)这样两者都不严格大于另一个的情况?你只问严格的更大。基本上,二维数是不可比较的,请看:我不是要比较严格较大的情况不适用的对,我的意思是,在排序算法中,如何在O(n)时间内计算排序数组中每个元素的严格较大的
对的数目?
[(a_i, b_0), (a_i, b_1), (a_i, b_2)..., (a_i, b_n)]