auto commit

This commit is contained in:
CyC2018 2018-03-31 19:32:43 +08:00
parent 28ea91499b
commit fd5fb99cc9
3 changed files with 13 additions and 9 deletions

View File

@ -312,13 +312,11 @@ public class Queue<Item> {
# 三、union-find # 三、union-find
<font size=4> **概览** </font> <br>
用于解决动态连通性问题,能动态连接两个点,并且判断两个点是否连通。 用于解决动态连通性问题,能动态连接两个点,并且判断两个点是否连通。
<div align="center"> <img src="../pics//dc752c5b-bb59-4616-bf9c-21276690a24d.png" width="400"/> </div><br> <div align="center"> <img src="../pics//dc752c5b-bb59-4616-bf9c-21276690a24d.png" width="400"/> </div><br>
<font size=4> **API** </font> <br>
| 方法 | 描述 | | 方法 | 描述 |
| ---: | :--- | | ---: | :--- |
@ -327,8 +325,6 @@ public class Queue<Item> {
| int find(int p) | 查找 p 所在的连通分量 | | int find(int p) | 查找 p 所在的连通分量 |
| boolean connected(int p, int q) | 判断 p 和 q 节点是否连通 | | boolean connected(int p, int q) | 判断 p 和 q 节点是否连通 |
<font size=4> **基本数据结构** </font> <br>
```java ```java
public class UF { public class UF {
private int[] id; private int[] id;
@ -354,7 +350,7 @@ public class UF {
但是 union 操作代价却很高,需要将其中一个连通分量中的所有节点 id 值都修改为另一个节点的 id 值。 但是 union 操作代价却很高,需要将其中一个连通分量中的所有节点 id 值都修改为另一个节点的 id 值。
<div align="center"> <img src="../pics//8f0cc500-5994-4c7a-91a9-62885d658662.png" width="300"/> </div><br> <div align="center"> <img src="../pics//8f0cc500-5994-4c7a-91a9-62885d658662.png" width="350"/> </div><br>
```java ```java
public int find(int p) { public int find(int p) {
@ -377,7 +373,7 @@ public void union(int p, int q) {
但是 find 操作开销很大,因为同一个连通分量的节点 id 值不同id 值只是用来指向另一个节点。因此需要一直向上查找操作,直到找到最上层的节点。 但是 find 操作开销很大,因为同一个连通分量的节点 id 值不同id 值只是用来指向另一个节点。因此需要一直向上查找操作,直到找到最上层的节点。
<div align="center"> <img src="../pics//5d4a5181-65fb-4bf2-a9c6-899cab534b44.png" width="300"/> </div><br> <div align="center"> <img src="../pics//5d4a5181-65fb-4bf2-a9c6-899cab534b44.png" width="350"/> </div><br>
```java ```java
public int find(int p) { public int find(int p) {
@ -827,9 +823,9 @@ public Key delMax() {
交换之后需要进行下沉操作维持堆的有序状态。 交换之后需要进行下沉操作维持堆的有序状态。
<div align="center"> <img src="../pics//7a80661f-115e-48e0-8a79-837ef7d436c8.png" width="300"/> </div><br> <div align="center"> <img src="../pics//d78c77a1-ebc8-47f0-8d36-69a98bb4de20.png" width="300"/> </div><br>
<div align="center"> <img src="../pics//a01243f1-f5d7-4bee-b16e-1f921d2f58e8.png" width="300"/> </div><br> <div align="center"> <img src="../pics//144cb0ae-48cf-486b-9e4c-6c6c2c559eeb.png" width="300"/> </div><br>
```java ```java
public static void sort(Comparable[] a){ public static void sort(Comparable[] a){
@ -858,7 +854,15 @@ public static void sort(Comparable[] a){
### 1. 排序算法的比较 ### 1. 排序算法的比较
<div align="center"> <img src="../pics//e4ca3383-910a-4936-8ac2-9e8fd31b736b.png" width="800"/> </div><br> | 算法 | 稳定 | 原地排序 | 时间复杂度 | 空间复杂度 | 备注 |
| :---: | :---: | :---: | :---: | :---: | :---: |
| 选择排序 | no | yes | N<sup>2</sup> | 1 | |
| 插入排序 | yes | yes | N \~ N<sup>2</sup> | 1 | 时间复杂度和初始顺序有关 |
| 希尔排序 | no | yes | N 的若干倍乘于递增序列的长度 | 1 | |
| 快速排序 | no | yes | NlogN | logN | |
| 三向切分快速排序 | no | yes | N \~ NlogN | logN | 适用于有大量重复主键|
| 归并排序 | yes | no | NlogN | N | |
| 堆排序 | no | yes | NlogN | 1 | | |
快速排序是最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 \~cNlogN这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分之后,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。 快速排序是最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 \~cNlogN这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分之后,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB