【问题标题】:Elements in array O(nlogn) complexity method for finding pairs用于查找对的数组 O(nlogn) 复杂度方法中的元素
【发布时间】:2012-08-29 11:06:09
【问题描述】:

好的,我一直被这里的复杂性所困扰。有一个元素数组,比如A[n]。需要找到所有对,以便A[i]>A[j]i < j

所以如果是{10, 8, 6, 7, 11},那么这对就是(10,8) (10, 6), (10,7) and so on...

我在 nlogn 时间内进行了合并排序,然后在 nlogn 中再次对整个数组进行二进制搜索,以获取排序数组中元素的索引。

所以sortedArray={6 7 8 10 11}index={3 2 0 1 4}

无论我尝试什么,当我开始循环比较时,我都会在复杂性中不断获得另一个n^2 时间。我的意思是,如果我从第一个元素(即 10)开始,它位于index[2],这意味着比它少 2 个元素。因此,如果index[2]<index[i] 那么它们可以被接受,但这会增加复杂性。有什么想法吗?我不想要代码,只是在正确方向上的提示会有所帮助。

谢谢。我在 C 中所做的一切和时间复杂度在这里都很重要

【问题讨论】:

  • 我可能误解了这个问题 - 但数组 [10,9,8,...,1] 不会成对产生 (10,9),...,(10,1),(9,8),...(9,1),... - 并且其中有 O(n^2)

标签: c c complexity-theory


【解决方案1】:

您不能在O(N^2) 下执行此操作,因为当原始数组按降序排序时算法将产生的对数为N(N-1)/2。您根本无法在O(N*LogN) 时间内产生O(N^2) 结果。

【讨论】:

  • N(N-1)/2,但是,是的,他说的。
【解决方案2】:

结果由 O(n^2) 个元素组成,因此任何迭代所有对的尝试都将是 O(n^2)。

【讨论】:

  • 如果 a[i]>a[j] 和 i
  • 您将如何处理结果?设置允许 O(1) 访问每个结果元素的数据结构可以在 O(nlogn) 中完成,但是引用(例如打印)它们都是 O(n^2),因为存在 O(n^2)元素。
猜你喜欢
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多