Performance 如何计算所创建算法的理论运行时间?

Performance 如何计算所创建算法的理论运行时间?,performance,algorithm,loops,runtime,big-o,Performance,Algorithm,Loops,Runtime,Big O,我需要一些帮助来分析我的算法,以确定其理论运行时间。我想我知道如何分析其中的大部分。我不知道如何分析包含for循环的while循环。我会提供我的算法,然后是我认为/知道的 我的算法: def getD(a): 校正=[]#校正值列表 比较=0#比较计数器 #使用所有0初始化更正列表 对于范围(0,len(a))中的i: 更正。追加(0) flag=True#循环控制 而(旗): flag=False #循环列表 对于范围(0,len(a)-1)内的i: 当前=a[i]#当前元素值 nxt=a[

我需要一些帮助来分析我的算法,以确定其理论运行时间。我想我知道如何分析其中的大部分。我不知道如何分析包含for循环的while循环。我会提供我的算法,然后是我认为/知道的


我的算法:
def getD(a):
校正=[]#校正值列表
比较=0#比较计数器
#使用所有0初始化更正列表
对于范围(0,len(a))中的i:
更正。追加(0)
flag=True#循环控制
而(旗):
flag=False
#循环列表
对于范围(0,len(a)-1)内的i:
当前=a[i]#当前元素值
nxt=a[i+1]#下一个元素值
dif=nxt-(电流+1)
#更正nxt项。。i+1。比较++
如果(dif<0):
比较+=1
校正[i+1]=dif
a[i+1]=dif
flag=True
d=整数((最大(修正)+1)/2)
#平衡更正
对于范围内的i(len(a)):
校正[i]=d
印刷品(d)
打印(“比较次数:”,比较)

我的分析: n=输入列表的长度(a)

主要的操作是3 for循环和while循环

循环的第一个迭代n次。。因此,它的运行时间为n.

最后一个for循环也会迭代n次。。将校正应用于每个元素,因此其运行时间也为n.


对于上述循环的2个。。我想总的运行时间是2n?但是对于整个算法的运行时间,还有更多需要添加的内容

这是我开始挣扎的地方:

左侧的主要操作(我相信)是while循环,其中for循环在内部。for循环最多运行。但是如果dif<0,它将再次从i=0开始运行for循环


我不确定这部分的运行时间是多少,也不确定整个算法的运行时间是多少。如何使用最后一个for循环计算while?如何将它们组合在一起?

for的第一个
循环始终运行n次迭代,因此是O(n)

最后一个
for
循环始终运行n次迭代,因此为O(n)

中间的
for
循环(在
while
循环中)总是运行n-1次迭代,因此是O(n)

现在,在循环执行时,
将执行多少次迭代?它似乎是可变的,但是让我们更仔细地看一下< <代码> >内的<代码>:循环:

for i in range(0,len(a)-1):
    current = a[i] #current element value
    nxt = a[i+1] #next element value
    dif = nxt - (current + 1)

    #correct the nxt item.. i+1. comparisons++
    if(dif < 0):
        comparisons += 1
        corrections[i+1] -= dif
        a[i+1] -= dif
        flag = True

与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“.顺便说一句,这是“提前感谢”,而不是“提前感谢”。Cool@JohnSaunders感谢您执行每一条规则。不是执行,只是通知。
for i in range(0,len(a)-1):
    current = a[i] #current element value
    nxt = a[i+1] #next element value
    dif = nxt - (current + 1)

    #correct the nxt item.. i+1. comparisons++
    if(dif < 0):
        comparisons += 1
        corrections[i+1] -= dif
        a[i+1] -= dif
        flag = True
corrections = [0] * len(a)