mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-11 06:56:06 +00:00
build
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 2.2. 时间复杂度
|
||||
# 2.2 时间复杂度
|
||||
|
||||
运行时间可以直观且准确地反映算法的效率。如果我们想要准确预估一段代码的运行时间,应该如何操作呢?
|
||||
|
||||
@@ -187,7 +187,7 @@ $$
|
||||
|
||||
但实际上,**统计算法的运行时间既不合理也不现实**。首先,我们不希望预估时间和运行平台绑定,因为算法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难度。
|
||||
|
||||
## 2.2.1. 统计时间增长趋势
|
||||
## 2.2.1 统计时间增长趋势
|
||||
|
||||
「时间复杂度分析」采取了一种不同的方法,其统计的不是算法运行时间,**而是算法运行时间随着数据量变大时的增长趋势**。
|
||||
|
||||
@@ -446,7 +446,7 @@ $$
|
||||
|
||||
**时间复杂度也存在一定的局限性**。例如,尽管算法 `A` 和 `C` 的时间复杂度相同,但实际运行时间差别很大。同样,尽管算法 `B` 的时间复杂度比 `C` 高,但在输入数据大小 $n$ 较小时,算法 `B` 明显优于算法 `C` 。在这些情况下,我们很难仅凭时间复杂度判断算法效率高低。当然,尽管存在上述问题,复杂度分析仍然是评判算法效率最有效且常用的方法。
|
||||
|
||||
## 2.2.2. 函数渐近上界
|
||||
## 2.2.2 函数渐近上界
|
||||
|
||||
给定一个函数 `algorithm()` :
|
||||
|
||||
@@ -638,7 +638,7 @@ $T(n)$ 是一次函数,说明时间的增长趋势是线性的,因此其时
|
||||
|
||||
也就是说,计算渐近上界就是寻找一个函数 $f(n)$ ,使得当 $n$ 趋向于无穷大时,$T(n)$ 和 $f(n)$ 处于相同的增长级别,仅相差一个常数项 $c$ 的倍数。
|
||||
|
||||
## 2.2.3. 推算方法
|
||||
## 2.2.3 推算方法
|
||||
|
||||
渐近上界的数学味儿有点重,如果你感觉没有完全理解,也无需担心。因为在实际使用中,我们只需要掌握推算方法,数学意义可以逐渐领悟。
|
||||
|
||||
@@ -894,7 +894,7 @@ $$
|
||||
|
||||
</div>
|
||||
|
||||
## 2.2.4. 常见类型
|
||||
## 2.2.4 常见类型
|
||||
|
||||
设输入数据大小为 $n$ ,常见的时间复杂度类型包括(按照从低到高的顺序排列):
|
||||
|
||||
@@ -2952,7 +2952,7 @@ $$
|
||||
|
||||
请注意,因为 $n! > 2^n$ ,所以阶乘阶比指数阶增长地更快,在 $n$ 较大时也是不可接受的。
|
||||
|
||||
## 2.2.5. 最差、最佳、平均时间复杂度
|
||||
## 2.2.5 最差、最佳、平均时间复杂度
|
||||
|
||||
**算法的时间效率往往不是固定的,而是与输入数据的分布有关**。假设输入一个长度为 $n$ 的数组 `nums` ,其中 `nums` 由从 $1$ 至 $n$ 的数字组成,但元素顺序是随机打乱的,任务目标是返回元素 $1$ 的索引。我们可以得出以下结论:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user