python分治算法_黄哥Python:分治算法(Divide-and-Conquer)

分治算法(Divide-and-Conquer)

在计算机科学中,分而治之(简称分治法)是基于多分支递归的算法设计范例。分而治之算法的工作原理是将问题递归分解为两个或多个相同或相关类型的子问题,直到这些子问题变得足够简单以至于可以直接解决。然后将子问题的解决方案组合起来,以解决原始问题。

利用分治法解决问题有下面三个步骤:

1、分解:将原问题分解为多个子问题,每个子问题与原问题类型相同,但比原问题规模小。

2、解决:递归求解子问题,如果子问题规模足够小,直接可以求解。

3、合并:合并子问题的解,得到原问题的解。

例子一:下面以一个简单的序列(a0, a1, a2, .....an)求和问题,说明分治算法的应用。

序列可以用Python的list或Go 语言的slice 来保存它。

1、分解:如果序列的n大于1,可以从中间一分为二,分别求出左边的和和右边的和。

2、解决:按照 n / 2 ,分解为左边,右边。左边和右边可以再递归的分解,分解到只剩下单一元素时,直接可以求解了。

3、合并:合并上面递归求的解(左、右的解)

下面请看Python 代码,特别提示,该方案不是最好的解决方法,只是用一个简单的例子来说明分治算法。

例子二: 归并排序

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

采用分治法:

分解:递归地把当前序列平均分割成两半。

合并:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。

请看Python 代码。

黄哥:黄哥Python:提醒要转行当程序员的朋友,学习要分先后主次​zhuanlan.zhihu.com黄哥:黄哥Python培训是这样训练学员的​zhuanlan.zhihu.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值