week1- Lecture2- asymptotic analysis

Algorithm efficiency: asymptotic analysis

一、Time Complexity Analysis

1. 如何衡量算法的运行时间

(1)编写算法并在计算机上运行,直接测量时间。然而,这种方法效率较低,因为运行时间会依赖于计算机的性能,并且测试慢速算法可能会浪费时间。

(2)更好的方法是分析算法中的重要步骤,并计算每个步骤需要执行多少次,与计算机的性能无关。

算法所需操作的数量通常是以输入规模为基础的 

2. 算法所需操作的数量通常是以输入规模为基础

Number of operations usually expressed in terms of input size

总共会有 n-1 次比较。

因此,时间复杂度 是 O(n-1),这也可以简化为 O(n)

• 对于一个算法执行 5n - 3 次操作,时间复杂度依然是 O(n),因为常数因子 5 和 -3 对输入规模 n 的影响是微不足道的。

因此,O(n-1) 和 O(n) 在时间复杂度分析中是等效的,我们通常直接表示为 O(n)

二、Why efficiency matters?

尽管计算硬件的速度已经提高,但效率依然重要。随着计算机应用需求的增加,我们需要更高效的算法和解决方案来满足复杂任务的处理需求。

虽然速度提高了100倍,但由于算法本身的复杂度,能够处理的数据量并没有明显增加。

多个算法(A1, A2, A3, A4, A5)解决同一问题时的不同时间复杂度

不同复杂度的算法在不同数据量下的表现差异 

多项式时间复杂度和指数时间复杂度之间的差异

• 多项式函数(polynomial functions)(如 n, n log n, n² 等):这些函数的增长速度较慢,通常是我们希望算法的复杂度属于这一类,因为它们随着数据量增加的速度较为平稳。

• 指数函数(如 2ⁿ)(exponential functions):这些函数的增长速度非常快,随着数据量的增大,计算时间会迅速增加,通常会导致算法性能的严重下降。

– functions involving powers of n (e.g., n, n log n, n2 , called polynomial functions)

– functions involving powering by n (e.g., 2n , called exponential functions)

在多项式函数中,具有相同幂次的函数之间增长速度更接近,例如 f₃(n) = n² - 3n + 6 和 f₄(n) = 2n²,它们的增长速率非常相似。

Among polynomial functions, those with same order of power are more comparable

三、Hierarchy of functions

1. 这张图片展示了函数的层次结构,每个函数的增长速率都比前一个函数大。

each function has a greater order of magnitude than its predecessor.

successive functions have greater order of magnitude than the previous ones.

2. 可以通过在 n 和 n² 之间插入 n log n,或者在 n² 和 n³ 之间插入 n² log n 等方法进一步细化层次结构。refine the hierarchy

3. Relative Growth Rates

当 n 增加时,后面的函数的增长率大于前面的函数,说明增长率相对增加。

4. 我们可以为每个函数分配一个层次结构中的函数。比如 f(n) = 2n³ + 5n² + 4n + 7,其中最高次项是 2n³,因此 f(n) 的增长率由 n³ 主导。

The term with the highest power is 2n^3 .

The growth rate of f(n) is dominated by n^3

四、Big-O Notation

Big-O 记法用来表示算法的时间复杂度,它表示一个函数最多是另一个函数的常数倍。具体来说,f(n) = O(g(n)) 意味着,对于足够大的 n,f(n) 的增长不会超过 g(n) 的增长的常数倍。

this means f(n) is at most a constant times g(n) for all large n

1. Examples

不同函数的 Big-O 记法:

• 2n³ = O(n³),表示 2n³ 的增长速率和 n³ 相同。

• 3n² = O(n²),表示 3n² 的增长速率和 n² 相同。

• 2n log n = O(n log n),表示 2n log n 的增长速率和 n log n 相同。

• n³ + n² = O(n³),表示 n³ + n² 的增长速率由 n³ 主导,因此其时间复杂度是 O(n³)。

2. Big-O notation - formal definition

f(n) = O(g(n)): There exists a constant c and n₀ such that f(n) ≤ c g(n) for all n > n₀

 

 

n₀ 并没有一个固定的计算方法,它通常是通过理论推导和实验分析来估算出来的。

在  n < n₀  时,函数  f(n)  的值并不重要,因为 Big-O 分析只关注当数据量足够大时,算法的行为。

当  n  很小的时候,两者的关系不是特别明显,但随着  n  的增大, f(n)  的增长趋势逐渐与  c \times g(n)  一致。

• 渐近时间复杂度 (asymptotic time complexity)关注的是 大数据量(即  n  较大时)的复杂度表现。当输入规模足够大时,我们更关心算法随规模变化的增长速率,忽略了初期的一些常数项和不重要的低级增长。

when n is large

五、 Proof of order of magnitude(数量级)

 

 Exercise

6n²⁰ + 2ⁿ

The term with the highest degree is 2^n, so the order of magnitude is O(2ⁿ), not O(n²⁰). The answer is incorrect.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值