python - 该方法查找数组(python)中的反转次数的时间复杂度是多少?

标签 python arrays python-3.x time-complexity

inv=0
for j in range(n):
     inv=inv+ sum((x<arr[j]) for x in arr[j:] )

对于每个元素,我都会检查数组中小于该元素之后出现的元素数量。(arr[j : ])

最佳答案

它是O(n2)。以下是计算方法:

  • 对于第 1st 个元素,您需要与接下来的 n-1 个元素进行比较。

  • 对于第 2nd 个元素,您需要与接下来的 n-2 个元素进行比较。

    ...

  • 对于第 n 个元素,您需要与接下来的 0 个元素进行比较。

因此,您总共进行 (n-1) + (n-2) + ... + 1 + 0 = n(n-1)/2 次比较,这是 n 的二次方。

<小时/>

确实存在更有效的方法。例如,通过使用基于分而治之的策略,您可以O(n log(n))来计算它们。请参阅this nice link !

关于python - 该方法查找数组(python)中的反转次数的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490946/

相关文章:

c - 3 步前从数组中读取 Sprite x/y 位置 C

c++ - 3d -> 1D 数组索引

Django 无法立即获得组的许可

python - 使用 Python Eve 组织 REST API Web 服务构建

python - 使用 pygame/pyglet 从数组重建图像时颜色不正确

python - 在 django-taggit 中,如何获取与特定用户关联的对象的标签?

python - 循环调用Python中的异常绕过

python - 如何从本地时间戳获取 UTC 纪元值

c - 我从位图文件中获取的大小是否正确?不匹配的属性

python - 如何使用 Python 删除数据框中的重复项