auto commit
This commit is contained in:
parent
f84b140418
commit
b76f6acddc
|
@ -138,9 +138,7 @@ k = 8,
|
||||||
return 13.
|
return 13.
|
||||||
```
|
```
|
||||||
|
|
||||||
<EFBFBD><EFBFBD>题参考:[Share my thoughts and Clean Java Code
|
解题参考:[Share my thoughts and Clean Java Code](https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/discuss/85173)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/discuss/85173) / [力扣](https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/discuss/85173)
|
|
||||||
|
|
||||||
二分查找解法:
|
二分查找解法:
|
||||||
|
|
||||||
|
@ -233,15 +231,6 @@ private void swap(int[] nums, int i, int j) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
类似题目:
|
|
||||||
|
|
||||||
[448\. Find All Numbers Disappeared in an Array (Easy)
|
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/description/),寻找所有丢失的元<EFBFBD>) / [力扣](https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/description/),寻找所有丢失的元<EFBFBD>)
|
|
||||||
[442\. Find All Duplicates in an Array (Medium)
|
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/find-all-duplicates-in-an-array/description/),寻找所有重复的元素<EFBFBD>) / [力扣](https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/description/),寻找所有重复的元素<EFBFBD>)
|
|
||||||
|
|
||||||
# 7. 找出数组中重复的数,数组值在 [1, n] 之间
|
# 7. 找出数组中重复的数,数组值在 [1, n] 之间
|
||||||
|
|
||||||
287\. Find the Duplicate Number (Medium)
|
287\. Find the Duplicate Number (Medium)
|
||||||
|
|
|
@ -48,23 +48,25 @@ B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具
|
||||||
|
|
||||||
进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。
|
进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。
|
||||||
|
|
||||||
插入删除操作会破坏平衡树的平衡性,因此在插入删除操作之后,需要对树进行一个分裂、合并、旋转等操作来维护平衡性。
|
插入删除操作会破坏平衡树的平衡性,因此在进行插入删除操作之后,需要对树进行分裂、合并、旋转等操作来维护平衡性。
|
||||||
|
|
||||||
### 3. 与红黑树的比较
|
### 3. 与红黑树的比较
|
||||||
|
|
||||||
红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构,主要有以下两个原因:
|
红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构,这是因为使用 B+ 树访问磁盘数据有更高的性能。
|
||||||
|
|
||||||
(一)更少的查找次数
|
(一)B+ 树有更低的树高
|
||||||
|
|
||||||
平衡树查找操作的时间复杂度和树高 h 相关,O(h)=O(log<sub>d</sub>N),其中 d 为每个节点的出度。
|
平衡树的树高 O(h)=O(log<sub>d</sub>N),其中 d 为每个节点的出度。红黑树的出度为 2,而 B+ Tree 的出度一般都非常大,所以红黑树的树高 h 很明显比 B+ Tree 大非常多。
|
||||||
|
|
||||||
红黑树的出度为 2,而 B+ Tree 的出度一般都非常大,所以红黑树的树高 h 很明显比 B+ Tree 大非常多,查找的次数也就更多。
|
(二)磁盘访问原理
|
||||||
|
|
||||||
(二)利用磁盘预读特性
|
操作系统一般将内存和磁盘分割成固定大小的块,每一块称为一页,内存与磁盘以页为单位交换数据。数据库系统将索引的一个节点的大小设置为页的大小,使得一次 I/O 就能完全载入一个节点。
|
||||||
|
|
||||||
为了减少磁盘 I/O 操作,磁盘往往不是严格按需读取,而是每次都会预读。预读过程中,磁盘进行顺序读取,顺序读取不需要进行磁盘寻道,并且只需要很短的磁盘旋转时间,速度会非常快。
|
如果数据不在同一个磁盘块上,那么通常需要移动制动手臂进行寻道,而制动手臂因为其物理结构导致了移动效率低下,从而增加磁盘数据读取时间。B+ 树相对于红黑树有更低的树高,进行寻道的次数与树高成正比,在同一个磁盘块上进行访问只需要很短的磁盘旋转时间,所以 B+ 树更适合磁盘数据的读取。
|
||||||
|
|
||||||
操作系统一般将内存和磁盘分割成固定大小的块,每一块称为一页,内存与磁盘以页为单位交换数据。数据库系统将索引的一个节点的大小设置为页的大小,使得一次 I/O 就能完全载入一个节点。并且可以利用预读特性,相邻的节点也能够被预先载入。
|
(三)磁盘预读特性
|
||||||
|
|
||||||
|
为了减少磁盘 I/O 操作,磁盘往往不是严格按需读取,而是每次都会预读。预读过程中,磁盘进行顺序读取,顺序读取不需要进行磁盘寻道,并且只需要很短的磁盘旋转时间,速度会非常快。并且可以利用预读特性,相邻的节点也能够被预先载入。
|
||||||
|
|
||||||
## MySQL 索引
|
## MySQL 索引
|
||||||
|
|
||||||
|
|
|
@ -138,9 +138,7 @@ k = 8,
|
||||||
return 13.
|
return 13.
|
||||||
```
|
```
|
||||||
|
|
||||||
<EFBFBD><EFBFBD>题参考:[Share my thoughts and Clean Java Code
|
解题参考:[Share my thoughts and Clean Java Code](https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/discuss/85173)
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/discuss/85173) / [力扣](https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/discuss/85173)
|
|
||||||
|
|
||||||
二分查找解法:
|
二分查找解法:
|
||||||
|
|
||||||
|
@ -233,15 +231,6 @@ private void swap(int[] nums, int i, int j) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
类似题目:
|
|
||||||
|
|
||||||
[448\. Find All Numbers Disappeared in an Array (Easy)
|
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/description/),寻找所有丢失的元<EFBFBD>) / [力扣](https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/description/),寻找所有丢失的元<EFBFBD>)
|
|
||||||
[442\. Find All Duplicates in an Array (Medium)
|
|
||||||
|
|
||||||
[Leetcode](https://leetcode.com/problems/find-all-duplicates-in-an-array/description/),寻找所有重复的元素<EFBFBD>) / [力扣](https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/description/),寻找所有重复的元素<EFBFBD>)
|
|
||||||
|
|
||||||
# 7. 找出数组中重复的数,数组值在 [1, n] 之间
|
# 7. 找出数组中重复的数,数组值在 [1, n] 之间
|
||||||
|
|
||||||
287\. Find the Duplicate Number (Medium)
|
287\. Find the Duplicate Number (Medium)
|
||||||
|
|
|
@ -48,23 +48,25 @@ B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具
|
||||||
|
|
||||||
进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。
|
进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。
|
||||||
|
|
||||||
插入删除操作会破坏平衡树的平衡性,因此在插入删除操作之后,需要对树进行一个分裂、合并、旋转等操作来维护平衡性。
|
插入删除操作会破坏平衡树的平衡性,因此在进行插入删除操作之后,需要对树进行分裂、合并、旋转等操作来维护平衡性。
|
||||||
|
|
||||||
### 3. 与红黑树的比较
|
### 3. 与红黑树的比较
|
||||||
|
|
||||||
红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构,主要有以下两个原因:
|
红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构,这是因为使用 B+ 树访问磁盘数据有更高的性能。
|
||||||
|
|
||||||
(一)更少的查找次数
|
(一)B+ 树有更低的树高
|
||||||
|
|
||||||
平衡树查找操作的时间复杂度和树高 h 相关,O(h)=O(log<sub>d</sub>N),其中 d 为每个节点的出度。
|
平衡树的树高 O(h)=O(log<sub>d</sub>N),其中 d 为每个节点的出度。红黑树的出度为 2,而 B+ Tree 的出度一般都非常大,所以红黑树的树高 h 很明显比 B+ Tree 大非常多。
|
||||||
|
|
||||||
红黑树的出度为 2,而 B+ Tree 的出度一般都非常大,所以红黑树的树高 h 很明显比 B+ Tree 大非常多,查找的次数也就更多。
|
(二)磁盘访问原理
|
||||||
|
|
||||||
(二)利用磁盘预读特性
|
操作系统一般将内存和磁盘分割成固定大小的块,每一块称为一页,内存与磁盘以页为单位交换数据。数据库系统将索引的一个节点的大小设置为页的大小,使得一次 I/O 就能完全载入一个节点。
|
||||||
|
|
||||||
为了减少磁盘 I/O 操作,磁盘往往不是严格按需读取,而是每次都会预读。预读过程中,磁盘进行顺序读取,顺序读取不需要进行磁盘寻道,并且只需要很短的磁盘旋转时间,速度会非常快。
|
如果数据不在同一个磁盘块上,那么通常需要移动制动手臂进行寻道,而制动手臂因为其物理结构导致了移动效率低下,从而增加磁盘数据读取时间。B+ 树相对于红黑树有更低的树高,进行寻道的次数与树高成正比,在同一个磁盘块上进行访问只需要很短的磁盘旋转时间,所以 B+ 树更适合磁盘数据的读取。
|
||||||
|
|
||||||
操作系统一般将内存和磁盘分割成固定大小的块,每一块称为一页,内存与磁盘以页为单位交换数据。数据库系统将索引的一个节点的大小设置为页的大小,使得一次 I/O 就能完全载入一个节点。并且可以利用预读特性,相邻的节点也能够被预先载入。
|
(三)磁盘预读特性
|
||||||
|
|
||||||
|
为了减少磁盘 I/O 操作,磁盘往往不是严格按需读取,而是每次都会预读。预读过程中,磁盘进行顺序读取,顺序读取不需要进行磁盘寻道,并且只需要很短的磁盘旋转时间,速度会非常快。并且可以利用预读特性,相邻的节点也能够被预先载入。
|
||||||
|
|
||||||
## MySQL 索引
|
## MySQL 索引
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user