Skip to content

Commit

Permalink
update sql docs
Browse files Browse the repository at this point in the history
  • Loading branch information
fengzhao committed Oct 18, 2023
1 parent 8026eec commit c3dfe72
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 2 deletions.
4 changes: 3 additions & 1 deletion docs/dev/03.在线DDL.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ alter_specification:

#### copy算法

较简单较低级的实现方法,MySQL会在建立一个新的临时表,把源表的所有数据写入到临时表,在此期间无法对源表进行数据写入。MySQL 在完成临时表的写入之后,用临时表替换掉源表。这个算法主要被早期(<=5.5)版本所使用。
较简单较低级的实现方法,MySQL会在建立一个新的临时表,把源表的所有数据写入到临时表,在此期间无法对源表进行数据写入。

MySQL 在完成临时表的写入之后,用临时表替换掉源表。这个算法主要被早期(<=5.5)版本所使用。

MySQL内部具体实现步骤如下:

Expand Down
68 changes: 67 additions & 1 deletion docs/算法/01.算法和数据结构概述.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,70 @@ T(n) = O(f(n))

!!! tip "大O复杂度表示法"

这就是大O时间复杂度表示法。大O时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。
这就是大O时间复杂度表示法。大O时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。


当 n 很大时,你可以把它想象成 10000 、 100000 。而公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。

我们只需要记录一个最大量级就可以了,如果用大O表示法表示刚讲的那两段代码的时间复杂度,就可以记为:T(n) = O(n); T(n) = O(n 2 )。



### 时间复杂度分析

如何分析一段代码的时间复杂度?


1. 只关注循环执行次数最多的一段代码

大O这种复杂度表示方法只是表示一种变化趋势。我们通常会忽略掉公式中的常量、低阶、系数,只需要记录一个最大阶的量级就可以了。
所以我们在分析一个算法、一段代码的时间复杂度的时候,也只关注循环执行次数最多的那一段代码就可以了。
这段核心代码执行次数的n的量级,就是整段要分析代码的时间复杂度。

```java
int cal(int n) {
int sum = 0;
int i = 1;
for (; i <= n; ++i) {
sum = sum + i;
}
return sum;
}
```

其中第 2 、 3 行代码都是常量级的执行时间,与 n 的大小无关,所以对于复杂度并没有影响。循环执行次数最多的是第 4 、 5 行代码,所以这块代码要重点分析。


2. 加法法则:总复杂度等于量级最大的那段代码的复杂度















### 几种常见时间复杂度实例分析


1. 常量阶O(1)

O(1) 只是常量级时间复杂度的一种表示方法,并不是指只执行了一行代码。比如下面这段代码,即便有 3 行,它的时间复杂度也是 O(1),而不是 O(3)。

```java
int i = 8;
int j = 6;
int sum = i + j;
```

只要代码的执行时间不随n的增大而增长,这样代码的时间复杂度我们都记作O(1)。或者说,一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)


2. 对数阶

0 comments on commit c3dfe72

Please sign in to comment.