贪心算法(greedy algorithm)
来源:互联网 发布:三阶矩阵的逆矩阵公式 编辑:程序博客网 时间:2024/06/05 19:04
关于贪心算法的概念、原理这里不想多提,可见百度http://baike.baidu.com/view/298415.htm 。因为是刚刚接触,所以并没什么特别的理解,但因为对C,C++等语言并不了解,这里姑且试着用SAS做两道题。
题1:
100元,50元,20元,10元,5元,2元,1元。你可以假设每种钱币的数量是无限的。现在有一笔交易,需要找个客户m元,请你设计一个算法,使得找给顾客的钱币张数最少。
/*找钱问题*/data _null_; p=100000; m=16; if 0<m<=p then do; a=floor(m/100); b=floor((m-100*a)/50); c=floor((m-100*a-50*b)/20); d=floor((m-100*a-50*b-20*c)/10); e=floor((m-100*a-50*b-20*c-10*d)/5); f=floor((m-100*a-50*b-20*c-10*d-5*e)/2); g=(m-100*a-50*b-20*c-10*d-5*e-2*f); num=sum(of a b c d e f g); output; end; put m a b c d e f g num;/*a,...,g是每种钱币对应数量,num是钱币总数*/ run;
题2:
0_1 背包问题--给定n 件物品和一个背包,物品的重量为weight,其价值为value,背包的容量为W,求从这n 件物品中选取一部分
物品且对每件物品,要么选,要么不选,要求满足被放入背包的物品重量不超过背包的容量。该例数据来源《基于贪心算法的0-1 背包问题》一文。
/*背包问题*/data beibao; input id weight value;/*物品重量,价值*/ m_value=value/weight;/*平均价值*/ flag=1;/*标示变量*/ w=90;/*背包容量*/cards;1 10 502 30 453 40 604 20 205 10 306 20 40;run;proc sort data=beibao out=beibao1;/*按照单位价值排序*/ by descending m_value;run;data new; set beibao1(rename=(weight=temp )); by flag; if first.flag then do; weight=0; end; weight+temp; if weight>w then delete;run;
对上述背包问题稍作修改,如果允许物品分割装入背包,那么背包能够装的物品的最大价值是多少?
这样背包最多装入w重量的物品,对上代码稍作修改:total_value即为所求
data new(keep=id w m_value weight value); set beibao1(rename=(weight=temp1 value=temp2 )); by flag; if first.flag then do; weight=0;value=0; end; weight+temp1;value+temp2;run;data need; merge new new(firstobs=2 keep=weight m_value rename=(weight=nextweight m_value=next_mvalue)) ; if weight<w & nextweight>w then do; total_value=value+(w-weight)*next_mvalue; end;run;
- 贪心算法(Greedy algorithm)
- 贪心算法(greedy algorithm)
- 贪心算法(greedy algorithm)
- 贪心算法(GREEDY ALGORITHM)证明实践
- 贪心法( Greedy algorithm),又称贪心算法
- 01-算法的乐趣-贪心算法(Greedy Algorithm)分析
- 算法之贪心算法(greedy algorithm)
- 贪心算法——狄克斯特拉算法(Greedy Algorithm
- 贪心算法(Greedy Algorithm)之霍夫曼编码(Huffman codes)
- 贪心算法(Greedy Algorithm)之霍夫曼编码(Huffman codes)
- USACO Training Section 1.3 Greedy Algorithm 贪心算法
- 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
- 贪心算法——普林姆算法(Greedy Algorithm-Prim's Algorithm)
- 贪心算法(Greedy Algorithms)
- bandit算法(1)--epsilon-Greedy Algorithm(附代码)
- 贪心算法(Greedy Algorithm)之活动选择问题(Activity-Selection Problem)
- 【贪心法求解最小生成树之Kruskal算法详细分析】---Greedy Algorithm for MST
- Greedy Mouse 贪心的耗子 nyoj824(贪心算法)
- web.xml加载过程
- Linux世界开启传送门4-预备第3天
- qq项目第五天(实现好友在线判断)
- LCD 基本知识
- 使用twisted实现Python客户端
- 贪心算法(greedy algorithm)
- 第九章 – 图像局部与分割 – 背景场景和分割前景目标的方法(平均背景法)(例程待实现)
- 互联网应用上线后,别忘记实现部署这些运维监控脚本
- Linux世界开启传送门4-预备第4天
- qsort源码
- java传值和传引用
- 用例执行顺序缺陷
- poj 2777 Count Color
- Linux世界开启传送门4-预备第5天