Time complexity 仅对同一数组中的元素进行一次比较的时间复杂性?

Time complexity 仅对同一数组中的元素进行一次比较的时间复杂性?,time-complexity,Time Complexity,我知道同一个数组的嵌套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) 谢谢我

我知道同一个数组的嵌套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)

谢谢

我总是喜欢直观地回答。所有元素的嵌套两个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”的计数完全匹配。