Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31265
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 111
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-10 18:38
文章分类
文章存档

2014年(1)

2013年(4)

我的朋友

分类: C/C++

2013-06-10 20:52:34

        没有什么能比见到创造的源泉更为重要,我认为,它比创造本身更有意义。

                                                                                    ———G.w.布莱尼兹(1646-1716)

  基于归纳的算法思想类似于数学归纳法,方法要保证两点:第一、解决问题的一个小规模事例是可能的(基础事例),第二、每个问题的解答都可由更小规模问题的解答构造出来(归纳步骤)。
        1、如果原始问题的规模为n,假设问题规模为n-1时的求解释已知的,那么只要求出从n->n-1的过程即可。
        2、如果所求的问题,有如下的性质:[P and Q]( P(n)比直接求容易,那么我们就更强的归纳[P and Q]( [P and Q](n)
        需要注意:问题规模缩小时,必须保证子问题和原问题满足的条件必须一致;如果用更强的归纳,所使用的条件Q要证明

1、多项式求值

问题 给定一串实数an,an-1,...,a1,a0,以及一个实数x,计算多项式Pn(x) = anx+ an-1xn-1 + ... + a1x +a0的值

两种归纳假设的思路:a、Pn-1(x) = an-1xn-1 + an-2xn-2 + ... + a1+a0(假如n-1规模已知
                                             Pn(x) =  anxn +   Pn-1(x) (问题规模n->n-1
                                   b、P'n-1(x) = anxn-1 + an-1xn-2 + ... + a1 (假如n-1规模已知
                                             Pn(x) =  x.P'n-1(x) + a0(问题规模n->n-1
明显思路b的算法好于a。

        2、最大到处子图

问题 给定一个无向图G=(V,E)和一个整数k,试找出G的最大导出子图H=(U,F),其中H中所有顶点的度大于或等于k,或者说明不存在这样的子图。

归纳思路:
       [全局观] 首先,考虑顶点数小于n的情况,如果n<=k,那么即使是完全图,也无法满足要求,如果n=k+1,只有完全图才能满足要求。(问题的终止条件
       [纳假设然后,考虑n>k+1的情况,首先假设顶点数为n-1的情况是已知最大导出子图的。(假如n-1规模已知
                        如果顶点的度顶点去掉,并且这条边所指向节点的度要减一。(问题规模n->n-1
说明:1、处理顶点的
            2、如果问题改成每个顶点的度小于或等于k,那么问题将变成NP,不能用同样的方法求解。


    3、寻找一对一映射

问题  给定一个集合A和一个从A到自身的映射f,寻找元素个数最多的一个子集S属于A,S满足:(1)f把S中的每一个元素映射到S中的另一个元素(即f把S映射到它自身),(2)S中没有两个元素映射到相同的元素(即f在S上是一对一函数)。

归纳思路:
       a、对于包括n-1个元素的集合,如何求解是已知的(假如n-1规模已知   
       b、没有被任何元素映射的元素i 不可能属于集合S(换句话被映射次数为0的元素不可能属于集合S),要把元素i 删除,同时要删除f(i)元素被映射的次数。(规模n->n-1

4、社会名流问题

问题 给定一个n x n 连接矩阵,确定是否存在一个i,其满足在第i列的所有项(除了第ii)都为1,并且第i行所有项(除了第ii)都为0

归纳思路:
        a、对于包括n-1个元素的集合,如何求解是已知的(假如n-1规模已知   
        b、Know[i,j]=1,i不是名人去掉i,如果Know[i,j]=0,j不是名人去掉j(规模n->n-1)
最后的检验:当问题规模为1时,检验这个这个结果是否满足要求,Know[i,ca] = 1(i>=1 && i<=n && i !=ca) 以及 Know[ca,j] = 0(j>=1 && j<=n && j !=ca

5在二叉树中计算平衡因子

问题 给定一颗n个节点的二叉树T,计算所有节点的平衡因子。

归纳思路:
        我们已知如何计算节点数小于n的二叉树的全部节点的平衡因子。
更强的归纳假设:
        已知如何计算节点小于n的二叉树的全部节点的平衡因子和高度。(假如n-1规模已知
        根节点的平衡因子只与子节点的高度有关,所以提出更强的假设,虽然多求了高度,但简化了计算。(规模n->n-1)

        书中其他的方法也是类似的方法,如轮廓问题,背包问题,最大子序列等,在这里就不赘述了。


阅读(4056) | 评论(10) | 转发(3) |
1

上一篇:没有了

下一篇:乘机最大连续子序列

给主人留下些什么吧!~~

fancyzg2013-06-13 15:48:27

校长的马夹 期待分享更多的技术博文

感谢你的支持,希望多提提建议~嘿嘿

回复 | 举报

校长的马夹2013-06-13 11:20:55

 期待分享更多的技术博文

scdengyong2013-06-11 14:11:37

fancyzg:哈哈~~就是无聊写写,欢迎邓骚批评指正啊~~

你妹的,后面一句话说的太官方了,算法这东西学好了绝对之忧好处没有坏处

回复 | 举报

fancyzg2013-06-11 13:46:37

scdengyong:是的,2n次乘法,我只是说量级上是一样,在系数上还是有差距的。不然怎么第二种方法叫做Horner法则呢,樊志国求继续更新啊。。。

哈哈~~就是无聊写写,欢迎邓骚批评指正啊~~

回复 | 举报

scdengyong2013-06-11 13:27:54

fancyzg:非常感谢你的回复,这几个算法中我都没有说复杂度,你提的这个方法确实很好,不过在每次迭代过程中要多做一次乘法,所以总共做了2n次乘法n次加法,而第二种方法总共做n次加法和n次乘法即可。

是的,2n次乘法,我只是说量级上是一样,在系数上还是有差距的。不然怎么第二种方法叫做Horner法则呢,樊志国求继续更新啊。。。

回复 | 举报