type
status
date
slug
summary
tags
category
icon
password

WHY

在刷算法题的过程中,我们时常会遇到一类问题,它们表面上看起来规模很复杂,直接去解决很不容易,这个不容易可能是思路上面,也可能是时间复杂度过高,比如,对n个数进行排序,当n为1,直接得出结果,为2时,做一次比较,但当n比较大时,这个问题就就没那么好直接得出结果。解决的办法有很多,这里我们关注今天的主角:分治算法。
 

WHAT

分治算法,顾名思义,分而治之,将一个大问题分为几个小问题去解决,化繁为简。
具体而言,对于一个规模为n的问题,有两种处理逻辑: 1. 直接处理;
  1. 分为更小的子问题去解决;
当问题的规模小到让我们很容易处理时,我们采取1,否则采取2;
划分出来的子问题往往与原问题具有相同的形式,可以递归进行处理,然后对各个子问题的结果合并得到原问题的答案;
从递归的角度来看,相当于对原问题一次次用逻辑2进行递归向下处理,最后到达递归终止条件,也就是规模足够小,这时用逻辑1处理,返回结果,结果再一次次递归向上传递,最后得到原问题的答案。
 
极简流程图
notion image
 
 

适用情况

  1. 原问题必须能够分成更小的子问题;
  1. 这些子问题要与原问题有相同的问题形式;
  1. 子问题之间要相互独立。
 

经典问题

二分搜索
汉诺塔
棋盘覆盖
 

代码简析

整数划分问题
 

实际应用

哈夫曼编码
各类搜索算法等
大牛语录之核心竞争力leetcode|最大子序列和
Alex
Alex
某不知名青年|web2.5人士|喜欢猫与美少女
公告
type
status
date
slug
summary
tags
category
icon
password
有事请邮箱联系:alexwu7@outlook.com
🚀🚀🚀