随笔分类 - 【算法】
摘要:背包问题(Knapsackproblem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。这个问题涉及到了两个条件:一是物品总的大小小于或等于背包的大小,二是物品总的价值要尽量大。如果我们用子问题定义状态来描述的话可以这样解释:用f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。用公式表示: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}或f[v]=max{f[v],f[v-c[i]]+w[i]} 具体的解...
阅读全文
摘要:排序算法对程序员来说是比较基础的东西,但是因为它们比较繁琐,所以有时候就容易弄混,特别是一些算法本身就很相似的话,就更难弄清楚它们之间的区别和联系!排序可以分为内排序和外排序,一般我们所说的排序仅指的是内排序。这次我们来分别熟悉一下内部排序中的各种排!关于内排序和外排序,本为不做重点介绍! 在说排序之前,我们先熟悉一下排序中元素互换常用的三句代码:temp=a;a=b;b=temp; 这三行代码的含义是利用temp这个临时仓库交换a和b。这三句代码是比较经典的数据交换代码,可以确定的是任何语言的数据交换都可以类似的写成这个形式。当然你用的语言或者数据类型不同的话,也是需要稍微变化一下的...
阅读全文
摘要:递归算法:递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。递归算法是算法设计中比较常用的一种算法,它的优点在于考虑问题的角度不再局限于过程,而是从整体的角度去思考问题。常见的递归实例有:阶乘,斐波那契数列,汉诺塔等等。下面我们分别用java语言来书写上述的三个例子:阶乘:importjava.io.*;publicclass Factorial{publicstatic void main(String[] args) throws IOException {int n,m;BufferedReader buf;buf=new BufferedRe
阅读全文

浙公网安备 33010602011771号