【问题标题】:Time Complexity of comparing the elements in the same array to each other only once?仅将同一数组中的元素相互比较一次的时间复杂度?
【发布时间】:2014-03-27 02:05:29
【问题描述】:

我知道同一数组的嵌套 for 循环在 O(n^2) 中,但想知道将数组的每个元素与同一数组中的所有其他元素进行一次比较的复杂性是什么?假设元素 A 与元素 B 进行比较,那么当轮到其元素 B 与其他元素进行比较时,它不需要像上一步中那样与 A 进行比较。因此,随着每次迭代,数组变得越来越小。这还是 O(n^2) 吗?

类似这样的:

for i in xrange(len(list)-1):
    v = list.pop(0)
    for vi in docs:
        merge(v,vi)

谢谢

【问题讨论】:

  • 解决问题的好方法是我们需要将每个元素与之后的每个元素进行比较。元素永远不需要与它们自身以及之前出现的任何东西进行比较已经与当前元素进行了比较。您的解决方案解决了这个问题,通过数组向后迭代。 ??????

标签: time-complexity


【解决方案1】:

我总是更喜欢直观地给出答案。所有元素的嵌套两个 for 循环可以被认为是一个矩阵。您将计算以下数量:

n^2 - n

它位于 O(n^2) 中。从视觉上看,它类似于(X 代表计算):

用你的方法,它会变成一个三角矩阵(X 代表计算):

所以你最终会得到以下数量的计算:

(n-1) x n/2

可以看出,它是前一个的一半,但仍然驻留在O(n^2)中。

【讨论】:

  • 我相信你的回答是错误的。它应该是 O(n!/(k!(n-k)!)),如 O(n 选择 k),其中 n 为 10,k 为 2。对于@mo 的问题,n 当然会有所不同,但 k 会保持在 2 不变。如果您对给定的图形示例进行数学运算,结果是 45,这与“X”的计数完全匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
相关资源
最近更新 更多