简述递归和分治的关系_漫画:到底什么是分治算法?和递归有什么关系?

本文介绍了分治算法的基本思想,即通过分解问题至可解规模,再合并子问题的解决方案。文章以快速排序、快速傅里叶变换和Karatsuba大数乘法为例,展示了分治在实际问题中的应用。尽管递归是分治常见实现方式,但并非所有分治算法都依赖递归。文章强调了如何有效分解问题在分治策略中的核心地位,并鼓励读者在面对困难时借鉴分治思想,将其应用于生活中的问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎关注微信公众号:视学算法,后台回复【学习】获取5T程序员全栈资料。

03c5e9c0237737b97967a8e1812c1f58.png
74164ad427ce5f32b3b6888b5b117425.png
f8108f3b584703b8a0349c3c731bd9bc.png

分治顾名思义“分而治之”,英文的意思翻译为“分割并征服”。

分治思想,简而言之就是将原问题分解成与“原问题相同但是规模更小”的子问题,并可以反复执行这个过程,使得问题规模减小到可以求解为止。

4b6c2aea1195028c9ee15e71b5105349.png
6dcf82553460e173474e0af0da1de5f0.png
fcb02700228269d214df07a32a06d097.png

1、快速排序算法

2、快速傅里叶变换算法

3、Karatsuba大数乘法算法

133e2a782c48829b5764b431bbdfb5a0.png

问题:给定1000个数,从小到大进行排序。

b8c414ce98b2ea7e9bfec8476182ba90.png
dad94f56c02d5bda6044046b15acb6ca.png
5f3cc3398d419e8d11d316a4d40cdd3d.png

先选择一个“标准”A,按照“比A小”和“比A大”将原来的数列分为两类,这样,只需要将两个子序列分别排好序,然后再合并到一块就ok了。

0560ce84cd7410b87912d7d99b5e4369.png
1473d8d08fce7f5b3b174dd047a67b23.png
cfacce0b1c5fab6e12a6c656b3b6658c.png
f8df45e8e56baadb7b6a2c50d00bf8eb.png

直接做该运算,需要做平方级别的复数乘法,这样的复杂度超级高!如何进行分解呢?

首先,不可能像上边排序算法一样,找一个“标准数”,取前一半和后一半采样点来做!

2aa6b2337035f7841b1baa88a9c81bb4.png
9ab0684f60357ca16cf79a9289739f3b.png
73ebf60ab55952904d767211a7876334.png
b85eea47f8d85188b6e3146e5949e5a6.png

问题:两个很大的数相乘,如何更快的解决?

两个很大的数相乘,普通算法的时间复杂度为O(n^2)。

5efccdd08d886ccfc78ef5a32f579682.png
dde51eef40308b8c22e244dfb2d32574.png
0c6154f442b0301ad276b5dd25efc65a.png

首先,将n位大数x和y进行分解。

1eb03d4f8567f9811d539380fec18c21.png

然后,x·y就变成了下面这样

4ae717d19d4e85a45edf1b3057f0097a.png

并且满足

e9acba504c1528a21cff908ab7fdd9d3.png

所以,原来的大数乘法就变成了小数乘法!其实这位博士研究的算法不仅这里巧妙,而且还有一个小技巧!

4af277414d785dc3a8ac99e2630803a4.png

这样的话,乘法又能变成加法了!计算复杂度又大大的降低了!

ae1733611d5fa8bcb93d26720bdb656e.png
fea8baba37b44df28836850fe3f11442.png
0e22d5d84ec08ae3c403f5179c38ccf6.png

第一:数学归纳是使用分治思想

只要出现可以用数学归纳公式来表示的大规模问题,第一反应就应该想到分治算法,通过特定的函数参数安排,一定可以用同一个函数来表述不同规模的问题,套用递归结构,可迅速解决问题!

97991470ad6dafe41c3b3afaecec4f3b.png

第二:分治思想不一定使用递归结构

递归结构是循环结构的一种,也是分治思想应用最多的一种程序结构,但是不一定要使用它!关键在于能够写出递归公式以及是否有必要使用递归算法。比如上边提到的快速傅里叶变换算法,就没有用到递归!

d84f04439123262cebbc7ad795960eb1.png

三:分治思想的核心是“如何分”

能够把问题很棒的进行分解,也是一种能力和本事!也就是说把问题用分治法来进行解决,是算法的难点,也是重点!一方面需要经验,另一方面也需要想象力!所以说呢?人生也是如此!不管遇到多大的苦难,我们需要在一次一次的锻炼中进行学会分解苦难,才能够大事化小,小事化了!

b36e663d0894f379c7225f56af5ea00b.png
a52467111db47656101ef6b895b58917.gif

欢迎关注微信公众号:视学算法,后台回复【学习】获取5T程序员全栈资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值