码迷,mamicode.com
首页 > 编程语言 > 详细

记一道毫无思路的算法题

时间:2014-10-23 17:34:20      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   使用   sp   数据   on   问题   

今天贤内给了我一道很实际的算法题,把我彻底难住了,实在想不出来,于是写此博文以记之。

背景是这样的,现在有一个付款明细的Excel,里面有为哪个发票,哪个公司应付多少钱的明细,明细数据是62条,现在知道我们已经付出的金额为Sum,请问到底哪些发票是已付款的。

这是62条明细数据:

653165.00
356029.11
220896.45
146362.00
1847670.00
3018518.91
1347553.07
145010.74
339784.84
199350.28
1206114.00
882000.00
253246.13
720000.00
24194.07
1518952.00
139453.48
200415.00
812044.00
9032764.57
3960608.05
1855126.31
7409087.18
608094.66
225519.59
627912.23
109897.52
1215819.87
4220245.50
94299.00
96547.00
92616.01
597100.54
880440.00
343991.59
70468.19
1092418.47
66911.94
80138.65
1398551.14
172287.48
691097.86
2371693.44
3773148.63
83898.33
89922.75
2619220.46
1179477.63
3440250.98
700000.00
997545.00
272523.00
3009976.00
451891.44
2111314.00
306377.00
142329.00
2057178.00
9340.00
249027.00
60811.50
51188.50

付款的金额为:

35857936.42

这听起来是一个很简单的算法题,其实就是算组合嘛,把每种组合的金额进行相加,如果等于Sum金额,那么就输出这种组合。于是网上找找组合函数的代码,很快就写出了这个程序。而且使用了一些简单的测试程序,确认计算是正确的。但是真正用到这个事情中,却崩溃了,计算量太大,根本算不出来。

仔细一想,对于每个数字,要么出现,要么不出现,那么其计算复杂度就是O(2^n),这里n=62,那么差不多就得计算2的62次,遍历每一种组合,才能找到全部答案。天啊!2的62次方!

根本不可能完成啊。想了又想,怎么都没有想到好的办法把复杂度降下来,伤心。不知道有没有大神能够解决这个问题。

这还只是一次数据,以后说不定还有100条明细,200条明细的,就这破算法,那更是天文数字,怎么可能算得出来啊?!

 附上现有的代码下载

记一道毫无思路的算法题

标签:style   blog   http   ar   使用   sp   数据   on   问题   

原文地址:http://www.cnblogs.com/studyzy/p/4046331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!