ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 香川群子

[原创] 2014新年元旦第一强帖:实用凑数凑金额高效递归剪枝算法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-19 10:33 | 显示全部楼层
本帖已被收录到知识树中,索引项:递归
本帖最后由 yssj1231 于 2018-12-21 12:10 编辑
香川群子 发表于 2018-12-17 11:47
结果符合要求?

我没有运行,只是看了一下附件的结果。

对于之前手工分单,这样的结果已经算是很理想了,自从看了你的另一个帖子([原创] 凑数之简化版【随机凑数】)后,才知道工作还可以继续简化下去。凑数化简很符合我目前遇到的问题,我只需要替换你里面的数据,写成循环就能满足我的分单要求,但有一个问题我始终不知道怎么解决,同一身份证不能分给两人的问题,在凑数化简里还是没办法解决。同一身份证如果出现2次就算2单,不知道代码如何修改,能否帮我看看附件,就是你的凑数化简。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 17:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yssj1231 发表于 2018-12-19 10:33
对于之前手工分单,这样的结果已经算是很理想了,自从看了你的另一个帖子([原创] 凑数之简化版【随机凑数 ...

解决了身份证相同需要合并计算的问题。

并在自动计算中,增加了一组虚拟组,当最后一组误差较大时,可以调整分单数用于调节误差。

随机分组凑数(按身份证合并计算).zip

185.28 KB, 下载次数: 338

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-12-21 11:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yssj1231 于 2018-12-22 17:26 编辑
香川群子 发表于 2018-12-20 17:40
解决了身份证相同需要合并计算的问题。

并在自动计算中,增加了一组虚拟组,当最后一组误差较大时,可 ...

谢谢香川老师,最近一直在看关于你发的凑数文章,得到了很多启发,我用字典提取了原始数据的身份证计数和金额求和,在你的代码基础上添加了对N(元素个数n)值的判定,现在这样的结果很满意,误差几乎可以忽略不计。谢谢你的帮助,谢谢
jdfw.gif

TA的精华主题

TA的得分主题

发表于 2019-2-15 17:08 来自手机 | 显示全部楼层
香川群子 发表于 2014-9-9 09:02
你的问题很实际,但也不太容易。

因为数据种类比较多,所以任意一个金额的有效组合都有成千上万种,这 ...

香川老师,如果通过你的算法得出的解中分别加上一个系数计算共和,该如何改写代码?

例如取6个数组合凑数完成后,要分别给6个数乘上不同系数后再求和,然后输出结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-15 17:27 | 显示全部楼层
12123 发表于 2019-2-15 17:08
香川老师,如果通过你的算法得出的解中分别加上一个系数计算共和,该如何改写代码?

例如取6个数组合 ...

系数固定的话,系数读入数组,然后计算即可。

自己做,不会做的话上附件吧。

TA的精华主题

TA的得分主题

发表于 2019-2-15 18:35 来自手机 | 显示全部楼层
香川群子 发表于 2019-2-15 17:27
系数固定的话,系数读入数组,然后计算即可。

自己做,不会做的话上附件吧。

好的,我先整整,不懂的地方再请教。这个算法工具真的很厉害,不过数据量大的话一般电脑抗不下来。

TA的精华主题

TA的得分主题

发表于 2019-2-18 22:27 来自手机 | 显示全部楼层
香川群子 发表于 2019-2-15 17:27
系数固定的话,系数读入数组,然后计算即可。

自己做,不会做的话上附件吧。

香川老师,按照你的思路,竟然让我这个初学者作出效果了。我的方法是根据n2(前提当然是不能空这一项)的个数,随机产生相同数量的不同系数,然后读入数组,分别在jg数组和dg函数中增加一项,然后在递归运算时对增加项编写系数和计算项乘积的累积和,并在其他位置加入相同项目,最后输出时也在增加最后一列就达到我想要的结果。谢谢谢谢。

另外,随着对该算法的深入了解,增加对输入项目的要求,举例:有6个数相加,每个数的取值范围都不同,比如第一个取得0-100,第二个120-150....这样的需求该如何改进算法?是不是要根据n2数分别读入不同的取值范围?可是如果按照这个逻辑来推演的话,计算项的数量会非常非常巨大,这样会大大影响速度。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-19 16:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
12123 发表于 2019-2-18 22:27
香川老师,按照你的思路,竟然让我这个初学者作出效果了。我的方法是根据n2(前提当然是不能空这一项)的 ...

你这个问题,是多元一次方程组,求整数系数的组合解。这样的意思吧。

如 aX1+bX2+cX3+dX4+eX5+fX6=A
已知 X1-X6,和A,求整数abcdef的组合解。

…………
这个很容易的。我做过这样的题目。

TA的精华主题

TA的得分主题

发表于 2019-2-19 17:41 来自手机 | 显示全部楼层
本帖最后由 12123 于 2019-2-19 17:44 编辑
香川群子 发表于 2019-2-19 16:05
你这个问题,是多元一次方程组,求整数系数的组合解。这样的意思吧。

如 aX1+bX2+cX3+dX4+eX5+fX6=A


对的!也是用这个帖子中算法来改吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-20 09:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 00:17 , Processed in 0.031816 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表