Mergesort-and-Quicksort/AI/complex.md
2024-11-18 17:02:36 +08:00

98 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### **归并排序的时间和空间复杂度计算**
#### **时间复杂度计算**
归并排序遵循分治思想,将数组分为两半递归处理,然后合并两个有序数组。
1. **分解过程**
- 将数组分为两半,分解所需的时间是常数级别的 \(O(1)\)。
- 每次分解数组的大小减半,分解的层数为 \(\log_2 n\),因此分解过程的时间复杂度为 \(O(\log n)\)。
2. **合并过程**
- 每层需要合并 \(n\) 个元素,合并操作为线性时间 \(O(n)\)。
- 合并层数与分解层数相同,也为 \(\log_2 n\)。
3. **总时间复杂度**
- 每层合并耗时 \(O(n)\),共有 \(\log_2 n\) 层。
- 因此,总时间复杂度为:
\[
T(n) = O(n \log n)
\]
---
#### **空间复杂度计算**
1. **临时数组**
- 在合并过程中,需要额外的数组来存储左右子数组。每次合并的数组总大小是 \(n\)。
- 因此,临时数组占用的空间复杂度为 \(O(n)\)。
2. **递归栈空间**
- 每次递归调用会占用栈空间,递归深度为 \(\log_2 n\)。
- 递归栈空间的复杂度为 \(O(\log n)\)。
3. **总空间复杂度**
- 临时数组和递归栈空间的复杂度之和为:
\[
O(n) + O(\log n) = O(n)
\]
---
### **快速排序的时间和空间复杂度计算**
#### **时间复杂度计算**
快速排序通过选择一个基准元素,将数组分为两部分,然后递归处理这两部分。
1. **划分过程**
- 每次划分时,需要遍历整个数组来确定小于和大于基准的部分。
- 划分的时间复杂度为 \(O(n)\)。
2. **递归深度**
- **最好情况**:每次划分将数组均匀分成两部分,递归深度为 \(\log_2 n\)。
- **最坏情况**:每次划分时,只有一个元素进入子数组,递归深度为 \(n\)。
3. **总时间复杂度**
- **最好情况**
\[
T(n) = n + \frac{n}{2} + \frac{n}{4} + \cdots + 1 = O(n \log n)
\]
- **最坏情况**
\[
T(n) = n + (n-1) + (n-2) + \cdots + 1 = O(n^2)
\]
- **平均情况**
通过数学期望分析,平均时间复杂度为 \(O(n \log n)\)。
---
#### **空间复杂度计算**
1. **原地排序**
- 快速排序在划分数组时,直接在原数组上操作,因此额外空间复杂度为 \(O(1)\)。
2. **递归栈空间**
- **最好情况**:划分均匀时,递归深度为 \(\log_2 n\),栈空间复杂度为 \(O(\log n)\)。
- **最坏情况**:每次划分仅一个元素进入子数组,递归深度为 \(n\),栈空间复杂度为 \(O(n)\)。
3. **总空间复杂度**
- **最好情况**
\[
O(\log n)
\]
- **最坏情况**
\[
O(n)
\]
---
### **对比总结**
| **算法** | **时间复杂度(最好)** | **时间复杂度(最坏)** | **时间复杂度(平均)** | **空间复杂度(额外)** |
|----------------|------------------------|------------------------|------------------------|------------------------|
| **归并排序** | \(O(n \log n)\) | \(O(n \log n)\) | \(O(n \log n)\) | \(O(n)\) |
| **快速排序** | \(O(n \log n)\) | \(O(n^2)\) | \(O(n \log n)\) | \(O(\log n)\) |
通过以上计算,快速排序在平均情况下效率更高,但需要优化基准选择以避免最坏情况。归并排序虽然时间复杂度稳定,但占用更多的空间。