算法设计:排序,分治法

排序的分类:

刚刚好就是插入排序,最小、大值排序,冒泡排序,归并排序。

我决定要用分治法了!要怎么办?:

注意:划分可能不止分一遍,可以把子问题继续分:

因此可能会递归:

结果就成了我们上次学过的递归方程求和: 

接下来来几个例题:

 我们可以用分治的思想,把问题分成“求大”“求小”两部分。

大数乘法:

 

妙就妙在只要进行3次乘法,其他的都要4次。

接下来就是两个经典的排序算法:归并与快排。

 

 

可以看到这种算法就是把数组对半分,然后对子问题求解。

那快排呢?:

 

这下是以一个数为标准,把数组划分然后求解子问题。两个算法在划分方式上不同。

但感觉这样是不是有点碰运气?万一我选了一个不好的数“比如最大的,最小的”,那岂不好慢?我们来算一下平均的情况:

 

 接下来要怎么办呢?:

调和级数登场!分数相加也可以求。

 

 看到这个求平均数的操作,我们就要更深一步学习了:

排序问题的下界:

 

 这里引入一个决策树的概念:

 

可以看到,树的高度就是这种算法的复杂度,假如让高度最小那我们就获得了复杂度最小,也就是找到了算法的下界(最好情况)

 

 那

 不能空口白牙一说,怎么证呢?:

 还可以这样:

排序算法的下界我们知道了,加入我们要算平均情况怎么办?算法复杂度看高度,平均当然就看平均路长。

 

 这个地方不用除以项数,因为大家都一样,等呆会真算复杂度的时候再说。

现在我们可以看出来,平衡树的平均长度是最小的,那具体是多少呢?:

 

注意,最后要记得除以项数。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值