这是一个分模块的算法题总结项目,包含了我对常见算法题目的理解和实现。
my_algorithm/
├── greedy.cpp # 贪心算法相关题目
├── backtracking.cpp # 回溯算法相关题目
└── README.md # 项目说明文档
核心思想: 在每一步选择中都采取当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法策略。
包含题目:
- 435. 无重叠区间 - 经典区间调度问题
- 763. 划分字母区间 - 字符串分割问题
- 56. 合并区间 - 区间合并问题
关键技巧:
- 区间排序(按开始时间或结束时间)
- 贪心选择策略
- 空间优化(使用
emplace_back
和reserve
)
核心思想: 通过深度优先搜索,在搜索过程中构建解,当发现当前路径不能得到有效解时,回溯到上一步,尝试其他选择。
包含题目:
- 77. 组合 - 基础组合问题
- 216. 组合总和 III - 带约束的组合问题
- 17. 电话号码的字母组合 - 字符串组合问题
关键技巧:
- 剪枝优化(减少无效递归)
- 状态管理(局部变量 vs 成员变量)
- 空间预分配优化
- 剪枝策略: 在回溯算法中减少无效分支
- 空间预分配: 使用
reserve()
避免动态扩容 - 引用传递: 减少不必要的拷贝操作
- 局部变量: 避免状态污染,提高线程安全性
- 清晰的注释和文档
- 统一的命名规范
- 模块化的代码结构
- 可读性强的实现
- 适用场景: 最优化问题,每一步都有最优选择
- 证明方法: 通常需要证明贪心选择性质
- 常见问题: 区间调度、分配问题、排序问题
- 三部曲: 参数设计 → 终止条件 → 遍历过程
- 剪枝技巧: 提前返回、约束条件、最优性剪枝
- 状态管理: 选择、处理、递归、回溯
# 编译 C++ 文件
g++ -std=c++11 greedy.cpp -o greedy
g++ -std=c++11 backtracking.cpp -o backtracking
# 运行程序
./greedy
./backtracking
每个算法模块都包含:
- 问题描述和思路
- 完整的代码实现
- 优化版本对比
- 性能分析
这个项目会持续添加新的算法模块和题目,包括但不限于:
- 动态规划
- 图论算法
- 字符串算法
- 数据结构应用
欢迎提出建议和改进意见!
这是一个用于学习和总结算法题目的个人项目,旨在提高算法思维和编程能力。