Py学习  »  Python

如何找出以下python代码片段的运行时复杂性?

Tushaar • 3 年前 • 1254 次点击  

我将下面python代码的运行时复杂性计算为n^2,但它似乎不正确。显示的正确答案是n(n-1)/2。有谁能帮助我理解为什么内环不是运行n*n次,而是运行n(n-1)/2次

for i in range(n):
    for j in range(i):
        val += 1
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132416
 
1254 次点击  
文章 [ 1 ]  |  最新文章 3 年前
BrokenBenchmark
Reply   •   1 楼
BrokenBenchmark    3 年前

在第一次运行内部循环时 i = 0 这个 for 循环根本不执行。(在中有零个元素需要迭代。) range(0) ).

在第二次运行内部循环时 i = 1 这个 对于 循环执行一次迭代。(其中有一个元素需要迭代。) range(1) ).

然后,第三轮有两个元素,第四轮有三个元素,遵循这个模式,直到 i = n - 1 .

迭代的总数为 0 + 1 + ... + (n - 1) 这个总和有一个众所周知的形式:对于任何自然 m , 0 + 1 + ... + m = m * (m + 1) / 2 .在这种情况下,我们有 m = n - 1 ,所以有 n * (n - 1) / 2 总迭代次数。

你是对的,这个算法的渐近时间复杂度是 O(n^2) .然而,考虑到你说的“正确答案”是 n*(n-1)/2 ,问题很可能是询问迭代的确切次数(而不是渐近界)。