



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最小费用流的原始对偶 (Primal-Dual) 算法该日志由 zkw 发表于 2010-07-23 08:28:31最小费用流的直接 SPFA 算法和前面说的 KM 重标号算法,各自都有一些情况非常慢。这里要写的就是一个所谓的“新算法”(其实非常经典),融合两者优势。先从 zkw 算法的本质开始。细心的同学已经注意到了,算法的主要过程就是反复交替进行最短路和最大流的计算。具体地说,每一次增广过程就是在零权网络中找一个最大流增广,而重标号过程就是找到一组新的可行的距离标号。既然如此,最大流和最短路就完全可以用其他方法来替换。这种交替进行最短路和最大流计算用来求得最小费用最大流的算法,其实就是非常经典的原始对偶算法。费用流的算法大致分为两种,一种是经典的解法,如消圈,增广路,原始对偶等等,特点是步步为营,维持可行性或者最优性其中之一,再不断对另一方面作出改进。另一种就比较现代一些,典型的例子是松弛算法和网络单纯形,由于放松了对求解过程中解的限制条件,使得其速度远远超过经典解法,同时也增加了编程难度和理解障碍。下面要说的原始对偶算法,速度自然不可能比松弛和网络单纯形快,但应该是经典解法中的佼佼者了。先考虑最短路算法的选择。在流大费用小距离短的图上,KM重标号就可以取得不错的效果,但是 SPFA 在另外的图上就很有优势。再考虑最大流算法的选择。最朴素的 SPFA 暴力增广中根本就不维护距离标号,这里隐含地使用了一个单路增广。在 zkw 费用流的算法里,这里使用的是多路增广。是不是有必要用更高级的网络流算法呢?经过实际测试,除非在特别稠密的图上,否则效果一般。原因是可增广的流量并不是很大,如果去维护 SAP 的顶标反而增加了不少开销,预流推进亦然。总结一下,折中的选择就是使用 Small Label First 优化的 SPFA 来维护 zkw 算法中的距离标号,保留多路增广。注意,除了第一次之外,SPFA 算法都工作在一个所有边均为正权的图上(Reduced cost 意义下),这是和不维护顶标直接 SPFA 的不同之处,也是原来 zkw 算法的精神所在。也正因为如此,这里的 SPFA 甚至可以用 Dijkstra 替换。这个特殊的原始对偶算法在稠密二分费用小的图上不敌原来的 zkw 算法,但远远胜过暴力 SPFA。在另外的图上,对两者都是稳胜。比暴力 SPFA 快原因是,多路增广,同时使用了 Reduced Cost 缩小了费用范围,从而利于 SPFA 算法的工作(需要的松弛次数减少),而且使用 Reduced Cost 后不再有负边,使 SLF 的优化落到了实处(回忆:SLF 优化只有当所有边均为正的时候才能发挥出最佳效果),甚至允许用 Dijkstra 来完成后面的工作。比 zkw 算法快的原因是,在流小费用大距离长的图上,一次性把距离标号改对往往比反复调整更有效率。最后是代码,这次的例子是 POJ 3680 zkw Accepted 216K 360MS。另外还有一个 POJ 3422,是 原来的 zkw 算法不擅长的一个例子,这种方法只用 47MS,代码大同小异,就不放在这里了。1. #include 2. #include 3. #include 4. #include 5. using namespace std;6. 7. const int V=440, E=V*2, maxint=0x3F3F3F3F;8. 9. struct etype10. 11. int t, c, u;12. etype *next, *pair;13. etype() 14. etype(int T, int C, int U, etype* N): t(T), c(C), u(U), next(N) 15. void* operator new(unsigned, void* p)return p;16. *eV, TeE+E, *Pe;17. 18. int S, T, n, piS, cost;19. bool vV;20. 21. void addedge(int s, int t, int c, int u)22. 23. es = new(Pe+) etype(t, +c, u, es);24. et = new(Pe+) etype(s, -c, 0, et);25. es-pair = et;26. et-pair = es;27. 28. 29. int aug(int no, int m)30. 31. if (no = T) return cost += piS * m, m;32. vno = true;33. int l = m;34. for (etype *i = eno; i; i = i-next)35. if (i-u & !i-c & !vi-t)36. 37. int d = aug(i-t, l u ? l : i-u);38. i-u -= d, i-pair-u += d, l -= d;39. if (!l) return m;40. 41. return m - l;42. 43. 44. bool modlabel()45. 46. static int dV; memset(d, 0x3F, sizeof(d); dT = 0;47. static deque Q; Q.push_back(T);48. while(Q.size()49. 50. int dt, no = Q.front(); Q.pop_front();51. for(etype *i = eno; i; i = i-next)52. if(i-pair-u & (dt = dno - i-c) t)53. (di-t = dt) t) : Q.push_back(i-t);55. 56. for(int i = 0; i next)58. j-c += dj-t - di;59. piS += dS;60. return dS maxint;61. 62. 63. int abV, *pabV, wV;64. 65. struct lt66. 67. bool operator()(int* p1,int* p2) return *p1 *p2;68. ;69. 70. int main()71. 72. int t;73. scanf(%d,&t);74. while(t-)75. 76. memset(e,0,sizeof(e);77. Pe = Te;78. static int m, k;79. scanf(%d %d, &m, &k);80. int abz = 0;81. for(int i = 0; i m; +i)82. 83. scanf(%d, pababz = &ababz), abz+;84. scanf(%d, pababz = &ababz), abz+;85. scanf(%d, &wi);86. 87. sort(&pab0, &pababz, lt();88. int c=0xDEADBEEF; n=0;89. for(int i = 0; i abz; +i)90. 91. if(c != *pabi) c = *pabi, +n;92. *pabi = n;93. 94. +n, S = 0, T = n+;95. for(int i = 0; i T; +i) addedge(i, i+1, 0, k);96. for(int i = 0; i m; +i) addedge(abi+i, abi+i+1, -wi, 1);97. piS = cost = 0;98. while(modlabel()99. do memset(v, 0, sizeof(v);100. while(aug(S, maxint);101. printf(%dn, -cost);102. 103. return 0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行业廉洁教育测试题及答案
- 煤矿后勤专业试题及答案
- 铁路专业试题及答案
- 烹饪专业考证试题及答案
- 航空服务专业试题及答案
- 河北省衡水市桃城区2025-2026学年高二暑假开学考试语文试卷(含答案)
- 《烹饪原料初加工工艺》项目五配菜
- 小学数学专业知识考试试题及答案
- 质量专业试题及答案
- 马克笔建筑方案设计
- 智能控制技术发展前景分析
- T-CCASC 0043-2024 氯碱工业数字化车间建设指南 电解
- 2024年西安医学院第一附属医院招聘真题
- 卡西欧 fx-991CN X 科学计算器使用说明书
- 排污许可条例培训课件
- 婴儿配方奶粉管理办法
- 2025年新疆中考数学试卷真题(含答案解析)
- 中央厨房体系管理制度
- GB/T 19437-2025印刷技术印刷图像的光谱测量和色度计算
- 2025至2030中国医疗服务行业产业运行态势及投资规划深度研究报告
- 宾馆内部治安管理制度
评论
0/150
提交评论