“overlapping subproblems”(重叠子问题):指在用递归/分治来解决问题时,许多子问题会重复出现(同一个子问题被反复计算)。这是动态规划(Dynamic Programming)适用的重要特征之一:通过记忆化或表格法把已算过的子问题结果保存下来,避免重复计算,从而显著提高效率。
/ˌoʊvərˈlæpɪŋ ˈsʌbˌprɑːbləmz/
Dynamic programming works well when there are overlapping subproblems.
当存在重叠子问题时,动态规划就很有效。
In computing Fibonacci numbers recursively, the same smaller cases are recomputed many times, which is why overlapping subproblems make memoization so powerful.
用递归计算斐波那契数时,同样的更小情况会被反复重算,这就是为什么重叠子问题会让“记忆化”变得非常强大。
该术语由两部分组成:overlapping(重叠的)来自 overlap,表示“部分覆盖、重复”;subproblems(子问题)由 *sub-*(“次级、下层”)+ problem(问题)构成。合起来直观表达:一个大问题拆分后得到的若干子问题之间存在“重复/重叠”的部分,需要多次求解同一子问题。