读《计算机常用算法与程序设计教程》

  这本书浅显易懂,除了贪心算法一章后面内容几个例子之外。

  第一章:算法与程序设计简介

 

算法的复杂性分析。。。。

 

  第二章:穷举与回溯

1、穷举:一般平时我写的程序,类似于for,switch之类都是用的穷举法。即使是穷举法,也经常可以做适当的优化使程序运行更快,只是平时写的代码运算量不是很大,计算机处理比较快,没发觉啦,但对循环变量的设置,循环对象选定,都能适当提高效率。

2、回溯:个人认为这个方法挺有意思的,也很适合平时思考问题的方式,如8皇后问题,虽然8皇后可以穷举(12345678-87654321之间),也可以利用回溯,但回溯的效率明显高出很多,这在于回溯的“聪明性”,也就是“碰壁回头”。如不满足要求,就回溯,不朝错的方向走下去。

      回溯的程序也经常有个范式:就是程序的框架差不多相同。如桥本分数式,还有经典的排列组合问题。

 

  第三章:递归与分治

递归与分治经常是不分家的,也是一个代码简洁,可读性比较高的编程思想。它往往能是程序变得更简单,但递归的效率不高,它利用系统堆栈不断的读入与读出,而后面介绍的递推则明显不一样,它不会重复计算很多已经计算过的值,它是从边界条件出发,利用递推关系式计算。

 

第四章 递推

学过数列和数学归纳法的话,感觉递推就是这个意思,找出初值,找出递推关系式,或者说是通项,就能不断的计算出一系列值,得出最后所要的值,如斐波那契数列,幂序列,杨辉三角。猴子爬上问题(挺有意思的,逆推构造通项)

 

第五章 贪心算法

贪心算法非常符合人的逻辑思维,就是像背包问题(0-1背包和可拆背包),要达到所求目标,譬如求效益最大,则可以根据人的思维,是单位重量效益最大的先上船,对于可拆背包的话,最后转不下的那个,就拆一部分;对以0-1的话,这样做未必能得到最优解,但相差一般不会太大,而且计算起来很方便快捷,如果要得到精确的最优解,则需要用动态规划求解,但会在效率上有所损失。

 

第六章动态规划

很时髦的方法,和贪心算法一样,都是求最优解,但一个效率高,一个准确度高。

动态规划中总是会寻求一个递推关系式,也有边界条件。但它和递推算法还是有很多的区别,如动态规划须满足最优性原理,最有子结构,求最优值后,往往会求出最优值的最优决策序列。如对硬币找零钱问题,求种数的话,利用递推(往往是一个求计数的问题,如前面说的猴子爬山)。而寻求一个找最少硬币数的问题,则需要利用动态规划来求解

 

像装载问题,0-1背包,都可以用动态规划求最优解,还有插入乘号问题和求最长子序列探索及最优路径搜索。

关键是寻求一个迭代的式子,找到初值。如m(i,j)表示还能装j重量,可取背包的序号为i,i+1.。。到n的最大装载量值。则可以考虑j和w(i)的大小关系。(w代表重量)j小的话,则和m(i+1,j)相同,如果大于w(i)的话,则可以考虑装不装,装的话,m(i+1,j-w(i))+w(i),不装的话,则同样为m(i+1,j).很显然,是寻求max。列出递推求解。求解完后再求最优决策序列。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值