分治问题集锦

本文介绍了分治策略的基本思想,并通过整数划分问题和全排列问题详细阐述了分治算法的应用。对于整数划分,提出了递归解法,讨论了递归终止条件和子问题的构建。在全排列问题中,解释了如何通过递归生成n个元素的全排列。此外,还提及了大整数乘法和棋盘覆盖问题,说明了分治在这些问题上的应用和挑战。
摘要由CSDN通过智能技术生成

        自从学习《算法导论》以来已经有一段时间了,这段时间真可谓心酸,感觉web比算法简单多了,都是一些重复性的配置,但是看算法也是为了秋招的时候能去个好公司啊,所以一定要坚持下去。目前为止,基本的算法思想数据结构等都看完了,剩下的那些,真的不大容易看,总结来说《算法导论》真是经典,每一个理论都讲得很细,让人理解的很透彻,但是本科生读这本书也是很难的,所以最好能在上研究生的时候研究完,鄙人因为不大喜欢考研,所以就不闲扯了……以后会相继更新这些博客中的题,然后动规 、贪心 等算法。

1.浅谈分治策略

          分治,在《算法导论》上学习的就是,分开求解,然后再求解子问题,最后把子问题的解合并起来,思想大部分人都会懂的。但是实践应用起来 ,也不是简单,关键怎么想出一个当前问题表示成子问题的思路,还有当子问题规模足够小的时候,怎么结束递归,考虑所有包含的情况,因此这并不是简单的事情。

2.问题集锦

     例一整数划分问题

将一个正整数n表示成一系列正整数之和,n=n[1]+n[2]+...+n[k],其中n[1]>=n[2]>=...>=n[k]>=1,k>=1。正整数n的一个这种表示称为n的一个划分。求n的不同划分个数。
  用递归算法求解:
  (1)递归子结构性质:显然n的一个划分中包含了某个子问题t(<n)的一个划分。这里问题的解是划分数,关键是要研究用子问题的划分数来定义原问题的划分数。在n的所有不同划分中,将其中最大加数n[1]不大于m的划分数个记作q(n,m),则q(n,n)为原问题的解。递归定义如下:
  1)当n<1或m<1时,显然q(n,m)=0;
  2)当m=1时,n只有一种划分形式,n=1+1+...+1,共n个1相加。q(n,1)=1;
  3)当n=1时,显然也只有一种划分形式,q(1,m)=1;
  4)当n<m时,因为n[1]不能大于n,故q(n,m)=q(n,n);
  5)当n=m时,q(n,n)为n的所有划分个数,它由n[1]<=n-1的划分和n[1]=n的划分(只有一个)组成,q(n,n)=q(n,n-1)+1;
  6)!当n>m>1时,n[1]不大于m的划分,由n[1]<=m-1的划分和n[1]=m的划分组成,q(n,m)=q(n,m-1)+q(n-m,m)。关键!(分析:当只求最大加数为m的时候 第二个最大加数为n-m(因为 n-m+m=n)

           对n划分: n=m+(n-m)

      1.    因为 当 m>(n-m)时就是求n-m的所有划分  即(n-m,n-m),因为m>n-m  所以可以写成(n-m,m)

       2.  当m<(n-m)时,后面若为n-m的全划分,就超过m为最大划分了,矛盾。所以求 n-m的最大加数为m的划分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值