Skip to content

Commit 1d3d417

Browse files
author
钟辉
committed
feat: 初始化项目,完成时间复杂度笔记
0 parents  commit 1d3d417

File tree

4 files changed

+106
-0
lines changed

4 files changed

+106
-0
lines changed

demo/1.时间复杂度-demo.html

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<script>
2+
/** 时间复杂度O(1) */
3+
function fnO1() {
4+
console.log("时间复杂度O(1)");
5+
6+
const a = 5;
7+
const b = 10;
8+
const sum = a + b;
9+
}
10+
11+
/** 时间复杂度 O(logn)、 O(nlogn) */
12+
13+
function fnOlogn(n) {
14+
console.log("时间复杂度O(logn)");
15+
16+
let count = 0;
17+
let i = 1;
18+
while (i < n) {
19+
i = i * 2;
20+
count++;
21+
}
22+
23+
console.log("时间复杂度O(logn), 执行次数count: ", count);
24+
}
25+
26+
function fnOnlogn(n) {
27+
console.log("时间复杂度O(nlogn)");
28+
let count = 0;
29+
for (let j = 0; j < n; j++) {
30+
let i = 1;
31+
while (i < n) {
32+
i = i * 2;
33+
count++;
34+
}
35+
}
36+
console.log("时间复杂度O(nlogn), 执行次数count: ", count);
37+
}
38+
39+
/** 时间复杂度 fnO(m+n), 当可以确认n >= m的时候,时间复杂度可以修改为 O(n) */
40+
41+
function fnOmn1(m, n) {
42+
let countM = 0;
43+
let countN = 0;
44+
for (let i = 0; i < m; i++) {
45+
countM += 1;
46+
}
47+
for (let j = 0; j < n; j++) {
48+
countN += 1;
49+
}
50+
51+
console.log("时间复杂度O(m+n),执行次数count: ", countM + countN);
52+
}
53+
54+
/** 时间复杂度 fnO(m*n), 当可以确认n >= m的时候,时间复杂度可以修改为 O(n^2) */
55+
function fnOmn2(m, n) {
56+
let count = 0;
57+
for (let i = 0; i < m; i++) {
58+
for (let j = 0; j < n; j++) {
59+
count += 1;
60+
}
61+
}
62+
63+
console.log("时间复杂度O(m*n),执行次数count: ", count);
64+
}
65+
</script>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
### 一、时间复杂度
2+
3+
> 时间复杂度: 表示**代码执行时间随数据规模增长的变化趋势**,并不是代表代码真正的执行时间。
4+
5+
#### 时间复杂度分析
6+
7+
##### 时间复杂度分析实用方式:
8+
9+
1. 只关注循环执行次数最多的一段代码;
10+
2. 加法法则:总复杂度等于量级最大的那段代码的复杂度;
11+
3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积;
12+
13+
##### 时间复杂度实例分析:
14+
15+
时间复杂度量级
16+
17+
1. 常量阶 O(1);
18+
2. 对数阶 O(logn);
19+
3. 线性阶 O(n);
20+
4. 线性对数阶 O(nlogn);
21+
5. 平方阶 O(n^2)、 立方阶 O(n^3) ... k 次方阶 O(n^k);
22+
6. 指数阶 O(2^n);
23+
7. 阶乘阶 O(n!)
24+
25+
##### 对应时间复杂度量级别分析
26+
27+
1. O(1)
28+
29+
要点:**一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是 Ο(1)**
30+
31+
2. O(logn)、O(nlogn)
32+
33+
要点:常见时间复杂度为 O(nlogn)的算法:归并排序、快速排序。
34+
35+
3. O(m + n)、O(m \* n)
36+
37+
要点:这中情况的代码的复杂度由两个数据的规模来决定,如果可以确定 n >= m,那么时间复杂度就可以改为 O(n)、O(m^2)。
38+
39+
#### 二、空间复杂度
40+
41+
> 空间复杂度: 表示**算法的存储空间随数据规模增长的变化趋势**,并不是代表代码真正的存储空间小号。

概念/2.复杂度分析.md

Whitespace-only changes.

概念/大纲.md

Whitespace-only changes.

0 commit comments

Comments
 (0)