You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.7 KiB

# 算法运行效率与时间复杂度
* **时间复杂度**
> 使用表示算法运行的快慢 和 循环次数
> 1、时间复杂度=o(1)
```java
print('Hello World!')
```
> 2、时间复杂度=o(n)
```java
for(int i = 0; i < n; i++){
print('Hello World!')
}
```
> 3、时间复杂度=o(n*m)
```java
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
print('Hello World!')
}
}
```
> **注意区分**
>
> 理解:**问题规模**
>
> 4、时间复杂度=o(1)
```java
print('Hello World!')
print('Hello Java!')
print('Hello Zhang!')
```
> 5、时间复杂度=o(n<sup>2</sup>)
```java
for(int i = 0; i < n; i++){
print('Hello Java!')
for(int j = 0; j < m; j++){
print('Hello World!')
}
}
```
> 5、时间复杂度=o(log<sub>2</sub> n) 或者 o(log n)
```java
while(n>1){
print('Hello World!')
n = n / 2
}
```
> 当n=64, 则输出为64、32、16、8、4、2
>
> 由于2<sup>6</sup>=64,则log<sub>2 </sub>64=6。
>
> 以此类推:`n = n / 3` 为 o(log<sub>3</sub> n)
>
> 以此类推:`n = n / 4` 为 o(log<sub>4</sub> n)
>
> **总结**:只要问题规模出现**循环减半**情况,则使用**对数**描述时间复杂度;
>
> ​ 只要问题规模出现**多层循环**情况,则使用**次幂**描述时间复杂的。
---------
* **小结**
> 时间复杂度是用来描述估计算法运行时间的一个式子(单位)。
>
> **一般来说**,时间复杂度高的算法比复杂度低的算法慢。
>
> 常见的时间复杂度排序(按效率排序 【主要:o(1) < o(log n) < o(n) 】)
>
> ​ o(1) < o(log n) < o(n) < o(n * log n) < o(n<sup>2</sup>) < o(n<sup>2</sup> * log n) < o(n<sup>3</sup>)