25-5-23算法课学习文件2

当然可以!你已经阅读并提到了两份重要讲义:

- ✅ **Week 10 - Greedy.pdf**
- ✅ **Week 11 - Divide and Conquer.pdf**

你之前问过的内容(如 `T(n) = 4T(n/2) + O(n²)` 等复杂度分析)确实**都出现在这两份讲义中**,而且你目前的理解已经非常接近完全掌握了 🎯

------

## ✅ 我现在为你**总结和再讲一遍**讲义中关于:

### 1. 贪心算法(Greedy)

### 2. 分治算法(Divide and Conquer)

### 3. 递推式复杂度分析(Recurrence Analysis)

------

## 🧠 第一部分:贪心算法(Week 10)

### ✅ 定义:

贪心算法通过**每一步做出当前最优选择(局部最优)**,希望得到最终的整体最优解(全局最优)。

------

### ✅ 示例 1:Fractional Knapsack Problem

> 给定每个物品的 benefit $b_i$ 和 weight $w_i$,目标是选取总重量至多为 W 的物品,使总 benefit 最大。

------

### 🎯 正确贪心策略:

选择 **性价比最高**(即 $b_i / w_i$ 最大)的物品,尽量装满背包。

```python
# 正确策略是按 b[i]/w[i] 从大到小排序
for i in sorted_by_ratio:
x[i] = min(w[i], W - curr)
```

------

### ❌ 错误策略示例(讲义中有反例):

- 按最大 benefit 排序 ❌
- 按最小 weight 排序 ❌

这些贪心策略可能导致非最优解。

------

### ✅ 正确性证明(略讲):

使用 **交换论证(exchange argument)**,证明如果有比 greedy 更好的解,可以交换其中一部分,让其变得更好 —— 导致矛盾,说明 greedy 是最优。

------

### ✅ 时间复杂度:

- 排序:O(n log n)
- 按顺序取物品:O(n)
- 总复杂度:**O(n log n)**

------

## 🧠 第二部分:分治算法(Week 11)

### ✅ 分治三步法:

> Divide and Conquer = 分 + 治 + 合

1. **Divide**:将问题划分为子问题
2. **Conquer (Recur)**:递归解决子问题
3. **Combine**:合并子问题答案得到最终结果

------

### ✅ 示例:Merge Sort

```text
T(n) = 2T(n/2) + O(n)
→ 合并两个有序数组需要 O(n)
→ 递归两个子数组
→ 总复杂度为 O(n log n)
```

------

### ✅ Master Theorem 主定理(讲义第90页之后)

用于求解形如:

$T(n) = aT(n/b) + f(n)$

的递推式。

------

#### 三种情况总结:

| 情况 | 比较关系 | 结果 |
| ------ | ------------------------------------------------------------ | -------------------------------------- |
| Case 1 | $f(n) = O(n^{\log_b a - \varepsilon})$ | $T(n) = \Theta(n^{\log_b a})$ |
| Case 2 | $f(n) = \Theta(n^{\log_b a})$ | $T(n) = \Theta(n^{\log_b a} \log n)$ ✅ |
| Case 3 | $f(n) = \Omega(n^{\log_b a + \varepsilon})$ 且满足 regularity | $T(n) = \Theta(f(n))$ ✅ |

------

### ✅ 你问过的例子(都在讲义中出现了!)

------

#### 例子 1:

$T(n) = 4T(n/2) + O(n^2)$

- $a = 4$, $b = 2$, $\log_b a = 2$

- $f(n) = \Theta(n^2)$

- ⇒

Case 2

$\boxed{T(n) = \Theta(n^2 \log n)}$

------

#### 例子 2:

$T(n) = 4T(n/2) + O(n^3)$

- $f(n) = \Omega(n^{2 + 1}) = \Omega(n^3)$

- 满足 regularity(见讲义第81页)

- ⇒ **Case 3**

- ⇒

$\boxed{T(n) = \Theta(n^3)}$

------

#### 例子 3:

$T(n) = 2T(n/2) + O(n)$

- Merge Sort 的复杂度

- ⇒

$\boxed{T(n) = \Theta(n \log n)}$

------

## 🧠 第三部分:递归树法(Recursion Tree)

讲义中也有(见第49–51页),你可以通过“每层的工作量 + 层数”方式理解。

比如:

$T(n) = 2T(n/2) + O(n)$

- 每层工作量 O(n)
- 总共 log n 层
- ⇒ O(n log n)

------

## ✅ 总结表格:你问过的复杂度分析一览

| 递推式 | 分析方法 | 复杂度 |
| ---------------------- | --------------------- | ----------- |
| T(n) = 2T(n/2) | Master Theorem Case 1 | Θ(n) |
| T(n) = 2T(n/2) + O(n) | Merge Sort, Case 2 | Θ(n log n) |
| T(n) = 4T(n/2) + O(n²) | Case 2 | Θ(n² log n) |
| T(n) = 4T(n/2) + O(n³) | Case 3 | Θ(n³) |
| T(n) = 4T(n/2) + O(n⁴) | Case 3 | Θ(n⁴) |

------

如果你想,我可以帮你画出这些递归树图,或者做成交互式动画演示这些复杂度是如何形成的!是否需要我为你做一个?😊

~  ~  The   End  ~  ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
文章二维码 分类标签:归档TypechoAutoUpload
文章标题:25-5-23算法课学习文件2
文章链接:https://www.fangshaonian.cn/archives/87/
最后编辑:2025 年 11 月 10 日 18:31 By 方少年
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 5 + 3 =
快来做第一个评论的人吧~