如果仅仅学习了数据结构和算法思想,只是学习了理论。我们都是马克思主义者,深刻了解一个道理,理论与实践不可分离。而实践,最好的办法就是解决经典问题。
本专栏不会穷举所有经典问题,只挑选一些最常见的问题,排除了出组合数学以外的数学问题,也就是说包括了组合数学,但是剔除了其他数学问题。
总体大纲如下:
一 排序问题 | 1.1 选择排序 |
1.2 冒泡排序 | |
1.3 插入排序 | |
1.4 希尔排序 | |
1.5 归并排序 | |
1.6 快速排序 | |
1.7 堆排序 | |
1.8 桶排序 | |
1.9 外部排序 | |
二 编辑距离问题 | 2.1 动态规划算法 |
三 字符串匹配问题 介绍常见的四种算法 | 3.1 朴素算法 |
3.2 Finite automaton算法 | |
3.3 Rabin-Karp Algorithm | |
3.4 Knuth Morris Pratt算法 | |
四 背包问题 | 4.1 01背包问题 |
4.2 部分背包问题 | |
五 凸包问题 | 5.1 Graham 扫描法 |
5.2 Jarvis’s march算法 | |
六 铺砖问题 编程与艺术的完美融合 | 6.1 罗杰·彭罗斯瓷砖 |
6.2 王浩瓷砖 | |
6.3 铺砖数量问题 | |
七 MAX-CNF问题 | randomized 2-approximation algorithm |
八 maze问题 | Flood Fill算法 |
九 15-puzzle问题 | A* pathfinding algorithm |
十 NP完全问题 | nearest-neighbor algorithm |
closest insertion algorithm | |
geometric algorithm |