Data structures 如何计算算法的最坏情况时间复杂度

Data structures 如何计算算法的最坏情况时间复杂度,data-structures,discrete-mathematics,Data Structures,Discrete Mathematics,如何计算此算法的最坏情况时间复杂度 for j = 1 to i do for k = 1 to j do print(i,j,k) 由于我们没有影响该算法运行时的条件,复杂性将保持不变:始终存在相同的时间复杂性 让我们保持简单 如果我们只考虑内环中的语义重要指令,我们可以计算如下的复杂性: 每个外循环运行都会将下一个内循环运行计数增加一 我们会有1+2+3+4+5+…+i-1+i循环运行,每次外部循环完成时,内部循环将比以前执行一次 现在我们尝试推广这个表达式

如何计算此算法的最坏情况时间复杂度

for j = 1 to i do
     for k = 1 to j do 
         print(i,j,k)

由于我们没有影响该算法运行时的条件,复杂性将保持不变:始终存在相同的时间复杂性

让我们保持简单

如果我们只考虑内环中的语义重要指令,我们可以计算如下的复杂性:

每个外循环运行都会将下一个内循环运行计数增加一

我们会有
1+2+3+4+5+…+i-1+i
循环运行,每次外部循环完成时,内部循环将比以前执行一次

现在我们尝试推广这个表达式

1 + 2 + 3 + 4 + 5 + ... + i-1 + i = (i*(1+i))/2
我们将初始术语加倍,以另一种形式表示它,您会明白为什么

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) + (1 + 2 + 3 + 4 + 5 + ... + i-1 + i)

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (2 + (i-1)) + (3 + (i-2)) + ... + ((i-1) + 2) + (i+1)
现在我们可以看到,在这个表示中,我们有一个相同项的倍数

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (1+i) + (1+i) + ... + (1+i) + (1+i)

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = i*(1+i)
因为我们仍然有初始复杂度的两倍,所以我们需要除以2,这将得到封闭形式的表达式

1 + 2 + 3 + 4 + 5 + ... + i-1 + i = (i*(1+i))/2
导致我们的复杂性
O(i(i+1)/2)
=>
O(i^2)

我们可以这样做,因为给定一个O()中的多项式,你可以简单地用
x^highest\u power


我们不负责控制结构本身强制处理的指令;我认为这不是任务。如果您愿意,请让我知道。

由于我们没有影响此算法运行时间的条件,复杂性将保持不变:始终存在相同的时间复杂性

让我们保持简单

如果我们只考虑内环中的语义重要指令,我们可以计算如下的复杂性:

每个外循环运行都会将下一个内循环运行计数增加一

我们会有
1+2+3+4+5+…+i-1+i
循环运行,每次外部循环完成时,内部循环将比以前执行一次

现在我们尝试推广这个表达式

1 + 2 + 3 + 4 + 5 + ... + i-1 + i = (i*(1+i))/2
我们将初始术语加倍,以另一种形式表示它,您会明白为什么

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) + (1 + 2 + 3 + 4 + 5 + ... + i-1 + i)

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (2 + (i-1)) + (3 + (i-2)) + ... + ((i-1) + 2) + (i+1)
现在我们可以看到,在这个表示中,我们有一个相同项的倍数

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (1+i) + (1+i) + ... + (1+i) + (1+i)

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = i*(1+i)
因为我们仍然有初始复杂度的两倍,所以我们需要除以2,这将得到封闭形式的表达式

1 + 2 + 3 + 4 + 5 + ... + i-1 + i = (i*(1+i))/2
导致我们的复杂性
O(i(i+1)/2)
=>
O(i^2)

我们可以这样做,因为给定一个O()中的多项式,你可以简单地用
x^highest\u power


我们不负责控制结构本身强制处理的指令;我认为这不是任务。如果您愿意,请让我知道。

检查代码,并计算出对于固定值
i
,需要执行多少操作。(什么是
i
?)你在第一个
=
”之后是否遗漏了什么?可能重复
j=to i
这是什么意思?打印的复杂性是什么?“最坏的情况”是什么意思?这里没有案例。内部循环平均迭代到
i/2
。因此,您将得到:
i*i/2->i^2/2->O(i^2)
@AndrewJaffe,哦,是的,我错过了1检查代码,并计算出它需要为固定值
i
执行多少操作。(什么是
i
?)你在第一个
=
”之后是否遗漏了什么?可能重复
j=to i
这是什么意思?打印的复杂性是什么?“最坏的情况”是什么意思?这里没有案例。内部循环平均迭代到
i/2
。所以你会产生:
i*i/2->i^2/2->O(i^2)
@AndrewJaffe,哦,是的,我错过了1