Skip to content

Commit 34732a3

Browse files
author
x1aoda1
authored
Update 01.md
1 parent 0f88e48 commit 34732a3

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed

docs/01.md

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11

22
- [1 时间复杂度、空间复杂度、排序、异或运算](#1)
3-
* [1.1 时间复杂度](#11------)
4-
+ [1.1.1 排序操作](#111-----)
5-
- [1.1.1.1 选择排序](#1111-----)
6-
- [1.1.1.2 冒泡排序](#1112-----)
7-
- [1.1.1.3 插入排序](#1113-----)
8-
* [1.2 空间复杂度](#12------)
9-
* [1.3 常数项时间复杂度](#13---------)
10-
* [1.4 算法最优解](#14------)
11-
* [1.5 常见时间复杂度](#15--------)
12-
* [1.6 算法和数据结构脉络](#16----------)
13-
* [1.7 认识对数器](#17------)
14-
* [1.8 认识二分法](#18------)
15-
* [1.9 认识异或运算](#19-------)
16-
17-
<h1 id='1'>1 时间复杂度、空间复杂度、排序、异或运算</h2>
18-
19-
## 1.1 时间复杂度
3+
* [1.1 时间复杂度](#11)
4+
+ [1.1.1 排序操作](#111)
5+
- [1.1.1.1 选择排序](#1111)
6+
- [1.1.1.2 冒泡排序](#1112)
7+
- [1.1.1.3 插入排序](#1113)
8+
* [1.2 空间复杂度](#12)
9+
* [1.3 常数项时间复杂度](#13)
10+
* [1.4 算法最优解](#14)
11+
* [1.5 常见时间复杂度](#15)
12+
* [1.6 算法和数据结构脉络](#16)
13+
* [1.7 认识对数器](#17)
14+
* [1.8 认识二分法](#18)
15+
* [1.9 认识异或运算](#19)
16+
17+
<h1 id='1'>1 时间复杂度、空间复杂度、排序、异或运算</h1>
18+
19+
<h2 id='11'>1.1 时间复杂度</h2>
20+
2021
- 常数时间操作:
2122
1. 算数运算:+ - * /
2223
2. 位运算:>>(带符号右移动)、 >>>(不带符号右移动) 、 <<、 | 、& 、^
@@ -38,9 +39,10 @@ y = an^2 + bn + c
3839

3940
==忽略掉低阶项,忽略掉常数项,忽略掉高阶项的系数,得到时间复杂度为n^2==
4041

41-
### 1.1.1 排序操作
42+
<h3 id='111'>1.1.1 排序操作</h3>
43+
44+
<h4 id='1111'>1.1.1.1 选择排序</h4>
4245

43-
#### 1.1.1.1 选择排序
4446
```Java
4547
package class01;
4648

@@ -159,7 +161,8 @@ public class Code01_SelectionSort {
159161

160162
}
161163
```
162-
#### 1.1.1.2 冒泡排序
164+
<h4 id='1112'>1.1.1.2 冒泡排序</h4>
165+
163166
```Java
164167
package class01;
165168

@@ -272,7 +275,8 @@ public class Code02_BubbleSort {
272275

273276
}
274277
```
275-
#### 1.1.1.3 插入排序
278+
<h4 id='1113'>1.1.1.3 插入排序</h4>
279+
276280
```Java
277281
package class01;
278282

@@ -392,28 +396,28 @@ public class Code03_InsertionSort {
392396

393397
==插入排序和前面两种排序的不同是在于,插入排序跟数组初始顺序有关,在初始有序的情况下,有可能时间复杂度为O(N),有可能为O(N ^2),但是我们估计时间复杂度要按照最差的情况来估计,所以插入排序的时间复杂度仍然O(N ^2)==
394398

395-
## 1.2 空间复杂度
399+
<h2 id='12'>1.2 空间复杂度</h2>
396400

397401
申请有限几个变量,和样本量n没关系,就是空间复杂度O(1),如果要开辟一个空间数组和样本量n是一样大,用来支持我们的算法流程那么O(N)。反之用户就是要实现数组拷贝,我们开辟一个新的n大小数组用来支撑用户的需求,那么仍然是O(1)
398402

399-
400-
## 1.3 常数项时间复杂度
403+
<h2 id='13'>1.3 常数项时间复杂度</h2>
401404

402405
如果两个相同时间复杂度的算法要比较性能,这个时候需要比较单个常数项时间,对能力要求较高,没有意义,不如样本量试验实际测试来比较
403406

404-
## 1.4 算法最优解
407+
<h2 id='14'>1.4 算法最优解</h2>
405408

406409
我们认为最优解的考虑顺序是,先满足时间复杂度指标,再去使用较少的空间。一般来说,算法题,ACM等不会卡常数项时间
407410

408-
## 1.5 常见时间复杂度
411+
<h2 id='15'>1.5 常见时间复杂度</h2>
412+
409413
> 依次从好到坏 O(1) -> O(logN) -> O(N) -> O(N*logN) -> O(N^2) -> O(N^3) ... -> O(N!)
410414
411-
## 1.6 算法和数据结构脉络
415+
<h2 id='16'>1.6 算法和数据结构脉络</h2>
412416

413417
1. 知道怎么算的算法
414418
2. 知道怎么试的算法(递归)
415419

416-
## 1.7 认识对数器
420+
<h2 id='17'>1.7 认识对数器</h2>
417421

418422
1. 准备你想要测试的方法a
419423
2. 实现一个复杂度不好,但是容易实现的方法b
@@ -422,7 +426,7 @@ public class Code03_InsertionSort {
422426
5. 如果有一个随机样本使得对比结果不一致,打印样本进行人工干预,改对方法a和方法b
423427
6. 当样本数量很多,测试对比依然正确,可以确定方法a已经正确
424428

425-
## 1.8 认识二分法
429+
<h2 id='18'>1.8 认识二分法</h2>
426430

427431
1. 在一个有序数组中,找某个数是否存在
428432

@@ -703,8 +707,7 @@ public class Code06_BSAwesome {
703707

704708
}
705709
```
706-
707-
## 1.9 认识异或运算
710+
<h2 id='19'>1.9 认识异或运算</h2>
708711

709712
异或运算:相同为0,不同为1
710713

0 commit comments

Comments
 (0)