卡特兰数实战:从括号匹配到二叉树,5个经典算法问题一网打尽
卡特兰数(Catalan Numbers)是组合数学中一个既优雅又实用的数列,它在计算机科学领域有着广泛的应用。对于准备算法面试的开发者来说,掌握卡特兰数不仅能快速解决特定类型的问题,还能深入理解递归和动态规划的思想。本文将带你从实际问题出发,通过5个经典场景深入理解卡特兰数的应用。
1. 卡特兰数基础与计算
卡特兰数的前几项为:1, 1, 2, 5, 14, 42, 132, 429...这个看似简单的数列却蕴含着强大的力量。让我们先了解它的两种主要计算方法:
1.1 递推公式
卡特兰数满足以下递推关系:
C₀ = 1
Cₙ = Σ (Cᵢ × Cₙ₋₁₋ᵢ) 对于 i 从 0 到 n-1
这个公式的意思是,第n个卡特兰数等于前面所有卡特兰数的某种组合之和。例如:
- C₃ = C₀×C₂ + C₁×C₁ + C₂×C₀ = 1×2 + 1×1 + 2×1 = 5
1.2 组合数公式
更直接的计算方式是使用组合数:
Cₙ = (1/(n+1)) × C(2n,n)
其中C(2n,n)是二项式系数,表示从2n个物品中选取n个的组合数。
提示:在实际编程中,组合数公式通常更高效,因为它避免了递归计算的重复子问题。
2. 括号匹配问题
给定n对括号,求所有合法的排列组合数。这是卡特兰数最直观的应用场景。
2.1 问题分析
对于n=3,合法排列有5种:
()()()
()(())
(())()
(()())
((()))
为什么是卡特兰数?因为每个合法排列都可以分解为:
(左子问题)右子问题
其中左子问题和右子问题的括号对数之和为

174

被折叠的 条评论
为什么被折叠?



