2025-11-20 05:48:07
分治法就是先把大问题拆成小问题,解决完小问题再拼起来。比如找数组最大值,先分 halves,再分别找 halves 的最大值,比较两个最大值就得到结果。再比如归并排序,先分 halves 排序,再合并两个有序 halves。这种拆分步骤能降低问题难度,适合处理重复结构的问题。
为什么分治法有效呢?因为拆分后的小问题能并行处理,比如处理100万数据,分治法分10层后每层处理1万数据,总时间从10万次操作降到约10万次(假设每层操作次数相同)。根据计算机体系结构研究,分治法在多核处理器上效率提升约30%-50%。比如归并排序分治后时间复杂度从O(n²)降到O(n log n),处理100万数据只需要约100万次比较,而普通排序可能需要1亿次。拆分步骤越多,越能发挥计算机并行计算优势,但拆分次数不能超过log₂n,否则反而增加额外开销。比如斐波那契数列用分治法,分治次数是log₂n,计算量从O(n)降到O(log n)。但要注意拆分后子问题不能重叠太多,否则合并步骤会变复杂。比如找数组最大值,如果拆分成三个部分,合并时需要三次比较,而拆成两个部分只需要两次比较。所以分治法要找到最佳拆分点,既不能太细也不能太粗。
本题链接: