算法导论16(贪心算法)
2015-06-04 17:01
274 查看
16.1 活动选择问题
16.2 贪心算法原理
16.3 赫夫曼编码
void recursiveActivitySelector(vector<int> s,vector<int> f,int k,int n,vector<int> &res) { int m=k+1; while(m<=n&&s[m]<f[k])++m; if(m<=n)res.push_back(m); } vector<int> greedyActivitySelector(vector<int> s,vector<int> f) { int n=s.size(); vector<int> A; A.push_back(1); int k=1; for(int m=2;m<=n;++m) { if(s[m]>=f[k]) { A.push_back(m); k=m; } } return A; }
16.2 贪心算法原理
16.3 赫夫曼编码
struct Node { char val; int freq; Node *left,*right; Node(char x,int y):val(x),freq(y),left(NULL),right(NULL){} }; bool cmp(Node *a,Node *b) { return a->freq<b->freq; } Node *Huffman(vector<Node *> C) { int n=C.size(); vector<Node *> Q=C; for(int i=1;i<=n-1;++i) { Node *z=new Node('#',0),*x=NULL,*y=NULL; make_heap(Q.begin(),Q.end(),cmp); z->left=x=Q[0]; Q.erase(Q.begin()); make_heap(Q.begin(),Q.end(),cmp); z->right=y=Q[0]; Q.erase(Q.begin()); z->freq=x->freq+y->freq; Q.push_back(z); } return Q[0]; }
相关文章推荐
- iOS开发零基础教程之程序开发调试技巧
- Android 使用Gif图片及其注意点
- html基本进阶知识
- ubuntu源码安装R语言
- 【一起驴友】公司笔试
- SYN Flood攻击
- sat阅读想要短期提高做什么好?
- Android注解控件
- 优化UITableViewCell高度计算的那些事
- POJ 3723 最小生成树
- HeapSort(堆排序算法)
- 40个Java集合面试问题和答案
- 实现简单arrayList
- iframe跨域通信--html5.postmessage
- ubantu下安装mysql教程以及碰到的问题总结
- windows 2008+IIS7+Mysql+PHP5.5 + FastCGI环境配置
- 关于unity数值资源序列化后在windows和android平台的本地读取
- 使用jquery将图片放大
- shell中变量自增的计算方法
- 十字链表