记一道毫无思路的算法题
今天贤内给了我一道很实际的算法题,把我彻底难住了,实在想不出来,于是写此博文以记之。 背景是这样的,现在有一个付款明细的Excel,里面有为哪个发票,哪个公司应付多少钱的明细,明细数据是62条,现在知道我们已经付出的金额为Sum,请问到底哪些发票是已付款的。 这是62条明细数据: 35857936.42 这听起来是一个很简单的算法题,其实就是算组合嘛,把每种组合的金额进行相加,如果等于Sum金额,那么就输出这种组合。于是网上找找组合函数的代码,很快就写出了这个程序。而且使用了一些简单的测试程序,确认计算是正确的。但是真正用到这个事情中,却崩溃了,计算量太大,根本算不出来。 仔细一想,对于每个数字,要么出现,要么不出现,那么其计算复杂度就是O(2^n),这里n=62,那么差不多就得计算2的62次,遍历每一种组合,才能找到全部答案。天啊!2的62次方! 根本不可能完成啊。想了又想,怎么都没有想到好的办法把复杂度降下来,伤心。不知道有没有大神能够解决这个问题。 这还只是一次数据,以后说不定还有100条明细,200条明细的,就这破算法,那更是天文数字,怎么可能算得出来啊?! ?附上现有的代码。 更新: 好吧,看来我太无知了,这个问题是没有解决办法的,StackOverflow的讨论: 而且还有专门的维基百科页面: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 我可以在sharepoint网站上使用多个母版页吗?
- asp.net-mvc – 在MVC3中渲染导航
- IIS8上未加载ASP.NET页面(Windows Server 2012)
- asp.net – RegisterStartupScript不能使用ScriptManager,U
- asp.net-mvc – 如何将查询字符串映射到MVC中的操作方法参数
- asp.net-mvc – 迷你探查器不显示ajax请求信息?
- asp.net – 如何将配置转换应用于外部配置文件
- Asp.Net Core中WebSocket绑定的方法详解
- asp.net – MVC5(VS2012)Identity CreateIdentityAsync –
- ASP.NET FormsAuthentication cookie值的内容是什么?