Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 我如何确定给出一个有界大O和一个大ω的循环的函数?_Loops_Time_Complexity Theory - Fatal编程技术网

Loops 我如何确定给出一个有界大O和一个大ω的循环的函数?

Loops 我如何确定给出一个有界大O和一个大ω的循环的函数?,loops,time,complexity-theory,Loops,Time,Complexity Theory,我如何确定函数,比如g(n),它给出了循环运行时间的O(g(n))和Ω(g(n))?我知道O是上界,Omega是下界,我想我可以找到O,但我不知道用什么不同的方法来确定Omega。进行循环: 如果我用like,like,n^2+n^2+n+n(可能正确吗?)来确定一条时间复杂度线,这应该会给我一个函数,我认为是Big-O,但我不太确定。那么,确定两者之间有什么区别呢?如果你确定真实的时间复杂度,例如n^2+n^2+n+n,那么你可以做“联想魔术”,你可以说g(x)=n^2+n^2+n+n=The

我如何确定函数,比如g(n),它给出了循环运行时间的O(g(n))和Ω(g(n))?我知道O是上界,Omega是下界,我想我可以找到O,但我不知道用什么不同的方法来确定Omega。进行循环:


如果我用like,like,n^2+n^2+n+n(可能正确吗?)来确定一条时间复杂度线,这应该会给我一个函数,我认为是Big-O,但我不太确定。那么,确定两者之间有什么区别呢?

如果你确定真实的时间复杂度,例如
n^2+n^2+n+n
,那么你可以做“联想魔术”,你可以说
g(x)=n^2+n^2+n+n=Theta(n^2)
。在这种情况下,
g(x)=Ω(n^2)=θ(n^2)=O(n^2)

如果有一种算法,它对相同大小的输入总是相同的,那么上界和下界是相等的,因为它总是以相同的运行时间运行,因此具有相同的复杂性

但如果没有,则尝试为相同的大小查找“最坏情况”和“最佳情况”输入(这通常意味着抽象
n
,而不仅仅是
47
)和O(g(n))和Ω(g(n))


例如,想象一下非常简单的alghoritm,它将数字数组作为输入,并希望查找,其位置为
1000
。最坏的情况是,1000不在输入中,因此它必须全部通过,导致O(g(x))=n。但如果1000是第一个,那么它可以在一步中找到它,结果是Ω(g(n))=1


在您的例子中,您必须计算嵌套循环的执行次数。 首先,它是从2到n,然后是3到n,然后是4到n,即:

n-2

n-3

n-4

n-5

三,

二,

一,

这是序列的总和(看这里)(n*(1+n-2))/2,这是一个对称的
n^2

这n^2个步骤执行这两行

    Add entries L[a] to L[b]
    Store the result in R[a, b] 
如果它们是在恒定的时间内完成的,并且它在相同大小的不同输入上没有变化,那么它只是
k*n^2
(因为k是某个常数),这与
n^2
是相同的,因此在你的情况下-上下限是相同的,你可以说
g(x)=k*(n*(1+n-2))/2
O(g(n))=n^2
Ω(g(n))=n^2

    Add entries L[a] to L[b]
    Store the result in R[a, b]