【问题标题】:Output the number of pairs that are in the wrong order in an array? [duplicate]输出数组中顺序错误的对数? [复制]
【发布时间】:2013-12-02 18:20:57
【问题描述】:

例如我有数组:

int IDs[]={1,21,5,3,12,23,2};

顺序错误的对数为9。对是:(21, 5) (21,3) (21, 12) (21,2) (5,3) (5,2) (3,2) (12,2) (23,2)

所以,我的算法意味着两个 for:

 for(int i=0;i<IDs.length;i++)
    {
        for(int j=i+1;j<IDs.length;j++)
        {
            if(IDs[i]>IDs[j]) 
                wrong++;             
        }
    }

问题在于它的复杂度为 n2,而我的复杂度应该是最大 n*log n。

【问题讨论】:

  • 我认为您可以使用修改后的 BST 来做到这一点。每次您必须向左分支(通过添加新的左孩子或进一步向下现有节点)时,您都会添加新的“错误顺序”对。具体来说,为您刚刚离开的节点添加一个新对,并为该节点的每个后代添加一对到右侧。试试看,你就会明白我的意思了。

标签: java arrays algorithm time-complexity


【解决方案1】:

顺序错误的对数称为反转数。 有了这些知识,有人可以很容易地找到以前的解决方案:
Counting inversions in an array

【讨论】:

  • 非常感谢。希望我在那里找到了我需要的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 2015-03-04
  • 2016-11-25
  • 1970-01-01
  • 2017-05-14
相关资源
最近更新 更多