打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
算法系列: 10大常见排序算法: 分治的原理
一句

 分治法“分而治之”(Divide-and-Conquer),就是把一个复杂的问题分成两个或更多的相同或相似的子问题的策略

在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是后面要介绍的几个高效排序算法的基础,所以今天就讲分治。


一个例子

问题:在全美国找到个子最高的那个人

美国有2亿多人,我们显然不会把2亿多人排一排,然后一个个比较。


常用策略是选出每个州的冠军。这就是“分”的过程


然后再总决赛,选出全美傻大个冠军。这就是“治”的过程。当然各个州比赛下面也可以再继续细分为各个县的比赛,各个县可以细分为各个学校的比赛。。。


为什么分治策略奏效?

先来看个例子:

聚会有10个人。如果每个人都和其他所有人打招呼,聚会一共有多少次招呼?

显然是9*10=90次。

聚会人多嘈杂,怎么办?把10人分到2个房间里,或者分为2组,一组5个人。 只有同组的人相互打招呼。那么每组中的5个人相互打了 4*5=20个招呼。2组一共打了20+20=40个招呼,相比10个人打90个招呼,清净太多了!


简单的结论

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,问题的复杂程度降低的越多,越容易直接求解。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python|分治(分而治之)法
每个开发人员都应该知道的 6 种算法
算法排序
人生算法——解决人生难题的三种思路
面试官:连个冒泡排序都写不出来,你这五年都干些什么了?
算法策略的总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服