获取两个阵列之间的冲突数量[分而治之]

时间:2016-02-29 16:56:56

标签: arrays algorithm matching divide-and-conquer

我目前正在开展一个涉及获取两个阵列之间冲突的项目。这意味着在数组中放置某些数字的顺序不同。每个数字只出现一次,两个数组的大小始终相同。

例如:

[1,2,3,4]
[4,3,2,1]

这两个阵列有6个冲突:

  • 1在第一个数组中为2,但在第二个数组中为2,因此冲突+ 1。
  • 1在第一个数组中为3,但在第二个数组中为3,因此冲突+ 1。

我尝试过某些方法来制作一个计算O(n log n)量的算法。我已经使用动态编程制作了一个O(N²),但我想要一个通过Divide and Conquer计算值的算法。

有人对此有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您还可以使用<div id="login-page" class="row"> <div class="col s12 m6 offset-m3 l4 offset-l4 z-depth-6 card-panel teal"> <h1>Hi</h1><br/> </div> </div> 查找冲突数量(&#34;反转&#34;)。 让我们以self balancing binary search tree为例。

初始化AVL tree = 0。

inversion count进行迭代,并为每个0 to n-1

执行以下操作

插入也会更新结果。当树从根遍历到叶子时,继续计算更大节点的数量。

当我们插入arr [i]时,arr [0]到arr [i-1]的元素已经插入到AVL树中。我们需要做的就是计算这些节点。 为了插入到AVL树中,我们通过将每个节点与arr [i []进行比较来遍历树从根到叶子。

当arr [i [小于当前节点时,我们将反转计数增加1加上当前节点右子树中的节点数。这基本上是arr [i]左边更大元素的数量,即反转。

上面解决方案的

时间复杂度arr[i],因为AVL插入需要O(n Log n)