实例:
活动安排问题:
问题表述:设有n个活动的集合E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si < fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si >= fj或sj >= fi时,活动i与活动j相容。
解决方案:
使用贪心算法,按结束时间排序后,每次选择活动结束时间最小的一个,以尽可以的多的可以按排余下活动
0-1背包问题:
给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。
解决方案:
使用动态规划算法,每个物品有放和不放两种选择,看哪种方案更优,动态规划算法将问题划分为子问题,后面的子问题会使用到上一步的计算结果,以节省计算时间。0-1背包问题(要么放要么不放,不能放一部分,不适合使用贪心算法,因为有可能,余下背包的一些空间,导致整体单元价值偏低。动态规划算法实现见:http://blog.csdn.net/u011750989/article/details/12967575
背包问题:
与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1 <= i <= n。
解决方案:
使用贪心算法,每次选择单元价值最高的放入
实现代码
/*背包问题,非0-1背包问题
* 建立物品类有两个属性:重量和价值
* 加入arraylist
* Collections.sort 自定义比较算法,按价值/重量,单位价值越高者越靠前
*
* 再建个arraylist(result)存储上面各个物品该存入多少比率,比如1,该物品都放进背包
* 0.5,放一半,0不放
*
* int sum=0;//重量累计
* int v=0; //价值累计
* for i in arraylist //已按单价排好序
*
* if sum>=total
* break;
*
*物品i还能完全放进背包
* else if (sum+wi<=Total)
* sum=sum+wi;
* v=v+vi
* result.add(1)
*
*物品i只能放入部分了
* else if sum+wi>total
* v=v+(total-sum)/wi * v(i)
* sum=total
* result.add((total-sum)/wi)
* /
/*
* 活动安排问题
* 建立个活动类,比如有活动名称,开始时间,结束时间
* 放个arraylist
* Collections.sort 自定义排序算法,按结束时间升序,越早越靠前
*
* 建个结果表arraylist(result)
*
* result.add(list0])
* temp=list[0]
* for j in arraylist+1 //从第二个活动开始
*
* if j.开始时间>=temp.结束时间
* result.add(list[j])
* temp=list[j]
*
*
*/
题目:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18。
// 贪心算法
public int maxProductAfterCuttingSolution2(int length) {
if (length < 2) {
return 0;
}
if (length == 2) {
return 1;
}
if (length == 3) {
return 2;
}
// 尽可能多的剪出长度为3的绳子
int timesOfThree = length / 3;
// 当绳子最后剩下的长度为4时(剩下长度为1),不能再减去长度为3的绳子
if ((length - timesOfThree * 3) == 1) {
timesOfThree -= 1;
}
// 长度为2的绳子
int timesOfTwo = (length - timesOfThree * 3) / 2;
return (int)(Math.pow(2,timesOfTwo) + Math.pow(3,timesOfThree));
}
参考资料:
http://www.cnblogs.com/chinazhangjie/archive/2010/11/23/1885330.html