2. Divide-and-Conquer

Core

  1. 把一个大问题划分成诺干个子问题(子问题之间相互独立)
  2. 解决每个子问题
  3. 把每个子问题合并到一起

Optimization Method

  1. Reduce the sub Question
    通过代数消除子问题的个数
    XY = ?
    X = A2^(n/2) + B
    Y = C2^(n/2) + D
    XY = AC2^(n/2) + (AD+BC)2^(n/2) + BD
    AD+BC = (A-B)(D-C) + AC + BD
    
    AC, BD 被复用
    时间复杂度从:
    c 是常数
    W(n) = 4W(n/2) + cn 
    W(n) = 3W(n/2) + cn
    
  2. Pretreatment before inner Recursion
    通过预处理减少内部的递归计算了,实际是空间换时间

经典例题

快速排序的实现

你可能感兴趣的:(2. Divide-and-Conquer)