auto commit
This commit is contained in:
parent
df394162f9
commit
0824b5a750
|
@ -138,13 +138,11 @@ public class Insertion<T extends Comparable<T>> extends Sort<T> {
|
|||
|
||||
# 希尔排序
|
||||
|
||||
对于大规模的数组,插入排序很慢,因为它只能交换相邻的元素,每次只能将逆序数量减少 1。
|
||||
|
||||
希尔排序的出现就是为了解决插入排序的这种局限性,它通过交换不相邻的元素,每次可以将逆序数量减少大于 1。
|
||||
对于大规模的数组,插入排序很慢,因为它只能交换相邻的元素,每次只能将逆序数量减少 1。希尔排序的出现就是为了解决插入排序的这种局限性,它通过交换不相邻的元素,每次可以将逆序数量减少大于 1。
|
||||
|
||||
希尔排序使用插入排序对间隔 h 的序列进行排序。通过不断减小 h,最后令 h=1,就可以使得整个数组是有序的。
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/cb5d2258-a60e-4364-94a7-3429a3064554_200.png"/> </div><br>
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/38ce21e9-2075-41a3-862b-f3265a082132_200.png"/> </div><br>
|
||||
|
||||
```java
|
||||
public class Shell<T extends Comparable<T>> extends Sort<T> {
|
||||
|
|
|
@ -758,7 +758,7 @@ public class Transaction {
|
|||
|
||||
对于 N 个键,M 条链表 (N>M),如果哈希函数能够满足均匀性的条件,每条链表的大小趋向于 N/M,因此未命中的查找和插入操作所需要的比较次数为 \~N/M。
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/9_200.png"/> </div><br>
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/01809172-b223-42ac-a0d1-87944fe7dc8f_200.png" width="400px"> </div><br>
|
||||
|
||||
## 3. 线性探测法
|
||||
|
||||
|
@ -766,7 +766,8 @@ public class Transaction {
|
|||
|
||||
使用线性探测法,数组的大小 M 应当大于键的个数 N(M>N)。
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/121550407878282.gif"/> </div><br>
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/efc60f47-1d6c-4610-87d4-5db168c77b02.gif" width="400px"> </div><br>
|
||||
|
||||
```java
|
||||
public class LinearProbingHashST<Key, Value> implements UnorderedST<Key, Value> {
|
||||
|
@ -865,9 +866,11 @@ public void delete(Key key) {
|
|||
|
||||
#### 3.5 调整数组大小
|
||||
|
||||
线性探测法的成本取决于连续条目的长度,连续条目也叫聚簇。当聚簇很长时,在查找和插入时也需要进行很多次探测。例如下图中 2\~5 位置就是一个聚簇。
|
||||
线性探测法的成本取决于连续条目的长度,连续条目也叫聚簇。当聚簇很长时,在查找和插入时也需要进行很多次探测。例如下图中 2\~4 位置就是一个聚簇。
|
||||
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/f5cd51c9-df11-4b6a-b250-f13a9151555832287464.png" width="400px"> </div><br>
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/CyC2018/CS-Notes/raw/master/docs/pics/11_200.png"/> </div><br>
|
||||
|
||||
α = N/M,把 α 称为使用率。理论证明,当 α 小于 1/2 时探测的预计次数只在 1.5 到 2.5 之间。为了保证散列表的性能,应当调整数组的大小,使得 α 在 [1/4, 1/2] 之间。
|
||||
|
||||
|
|
BIN
docs/pics/01809172-b223-42ac-a0d1-87944fe7dc8f_200.png
Normal file
BIN
docs/pics/01809172-b223-42ac-a0d1-87944fe7dc8f_200.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
docs/pics/38ce21e9-2075-41a3-862b-f3265a082132_200.png
Normal file
BIN
docs/pics/38ce21e9-2075-41a3-862b-f3265a082132_200.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
docs/pics/efc60f47-1d6c-4610-87d4-5db168c77b02.gif
Normal file
BIN
docs/pics/efc60f47-1d6c-4610-87d4-5db168c77b02.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
docs/pics/f5cd51c9-df11-4b6a-b250-f13a9151555832287464.png
Normal file
BIN
docs/pics/f5cd51c9-df11-4b6a-b250-f13a9151555832287464.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
Loading…
Reference in New Issue
Block a user